Study Note

NoSQL 데이터 모델링 절차 본문

아키텍처/대용량 아키텍처

NoSQL 데이터 모델링 절차

moreLearn 2020. 2. 7. 16:29

다음과 같은 절차를 통해서 NoSQL의 데이터 모델링이 진행 된다.

 

  1. 도메인 모델 파악하기

  2. 데이터 출력 형태 디자인(쿼리 결과 디자인)

  3. 패턴을 이용한 데이터 모델링

  4. 최적화에 필요한 기능 리스팅

  5. 후보 NoSQL 선정과 테스트

  6. 데이터 모델을 선정한 NoSQL에 최정화 및 하드웨어 디자인

 

도메인 모델 파악하기

RDBMS든 NoSQL이든 먼저 도메인 모델을 파악해야 한다. 어떤 데이터 개체가 있고 데이터 개체 간의 관계가 어떻게 되는지를 파악한 후 ERD를 그린다. 해당 과정 없이 바로 어플리케이션 관점에서 접근하면 저장할 데이터에 대한 명확한 이해 없이 데이터 모델링을 하는 것이기 때문에 문제가 생길 수 있다.

 

간단한 블로그 시스템의 도메인 모델이다.

  • 사용자 ID를 기반으로 블로그의 분류를 가진다.

  • 분류별로 글을 작성할 수 있다.

  • 글에 파일을 첨부할 수 있다.

  • 댓글을 달 수 있다.

 

블로그 시스템의 ERD

데이터 출력 형태 디자인 (쿼리 결과 디자인)

도메인 모델을 기준으로 어플리케이션에 쿼리 되는 결과 값을 정한다.

 

  1. 블로그 사용자의 포스팅 분류 명들을 목록으로 출력한다.

  2. 포스팅 출력 화면은 상단 부터 포스팅 분류명과 제목, 포스팅 날짜, 본문을 출력한다.

  3. 차례대로 첨부 파일의 업로드 날짜와 파일명을 출력하고 파일에 대한 링크를 포함시킨다.

  4. 댓글에 작정일과 작정자 이름, 댓글 내용을 출력하며 작성자 이름에 이메일 링크를 단다.

 

블로그 시스템의 가단한 출력 화면

이런 데이터들이 필요하며 그에 대한 각각의 데이터 형태들이다.

블로그 시스템의 데이터 형태

패턴을 이용한 데이터 모델링

NoSQL의 Put/Get 만으로 데이터를 가져 올수 있게 테이블을 다시 정의한다.

가장 눈에 띄는 거는 역정규화를 토해 중복 값을 만들어 I/O 횟수를 줄였다. 콜론을 통해 Composite Key를 만들고 Enumerable Keys를 통해 트래버스 기능을 제공한다. 

 

블로그 시스템의 NoSQL 테이블 구조

Ordered Key/Value Store의 경우 그림과 같이 Key를 생성하면

  1. postId를 순서대로 증가해 가면서 사용자 글의 정렬 되는 기능을 한다.

  2. 검색시 특정 userId의 postId가 순서대로 출력되다 userId가 바뀌면 해당 post부터 다른 user가 장석한 post이기 때문에 그룹화 기능이 된다.

최적화에 필요한 기능 리스팅

첨부 파일(Attachment)은 Document Store를 고려해야 한다. 첨부 파일은 Posting이 작성된 후 레코드가 추가되며 변경이 거의 없다. 또한 많은 양이 아니기 때문에 하나의 필드에 저장할수 있다.

 

카테고리(category)가 있기 때문에 카테고리 별로 분류되어 검색이 가능해야 한다. 카테고리에 따라 Posting을 출력하려면 Posting의 카테고리 필드에 저장되고 조건에 따라 검색이 가능해야 한다. 이런 이유로 카테고리는 NoSQL의 Secondary Index를 고려해야 한다.

블로그 시스템의 컬럼별 상세 데이터

후보 NoSQL 선정과 테스트

이렇게 모델링한 데이터 구조를 효과적으로 실행할 수 있는 NoSQL을 찾고 해당 NoSQL의 특성, 부하, 안정성, 확장성 등의 테스트를 모두 거친후 선택해야 한다.

또한 각 서비스에 대하여 데이터 형태와 업무의 목적에 따라 맞는 여러개의 NoSQL을 복합하여 사용할 수도 있다.

데이터 모델을 선정한 NoSQL에 최정화 및 하드웨어 디자인

마지막으로 선택한 NoSQL을 기반으로 어플리케이션 인터페이스 설계와 하드웨어 디자인을 진행하면 된다.

 

이 글은 저: 조대협님의 "대용량 아키텍처와 성능 튜닝"을 읽고 공부한 내용입니다.

이 글은 코드프레소 DevOps Roasting 코스를 수강하면서 작성한 글입니다.

'아키텍처 > 대용량 아키텍처' 카테고리의 다른 글

NoSQL 데이터 모델링  (0) 2020.02.07
NoSQL이란?  (0) 2020.02.07