더북(TheBook)

“모든 수준에서 좋은 의사결정을 내리는 것은 중요한 스킬이다.”

– 피터 드러커(Peter Drucker), 저자 겸 경영 컨설턴트


이 장에서 다룰 내용

문서 데이터베이스를 설계할 때 설계자들에게는 선택권이 많다. JSON과 XML 문서의 유연한 구조(유연성)는 이런 선택권 중에서 핵심 요소다. 만약 어느 설계자가 문서 안에 리스트를 넣고 이 리스트 안에 또 다른 리스트를 넣고자 한다면? 가능하다. 또 다른 설계자가 별도의 컬렉션을 별도의 데이터 타입에 넣길 원한다면 이것도 가능하다. 하지만 이러한 자유가 모든 데이터 모델에 똑같이 좋을 것이라 해석하는 것은 금물이다. 실제로는 그렇지 않기 때문이다.

이 장의 목적은 문서 데이터베이스 모델을 사용하고 요구 사항에 맞는 최상의 기법을 선택하는 방법을 이해할 수 있게 하는 것이다.

관계형 데이터베이스 설계자들은 데이터 모델에 접근하게 해 주는 정규화 규칙을 참조할 수 있다. 전형적인 관계형 데이터 모델은 삽입, 갱신, 삭제 작업이 수행될 때 데이터 이상현상을 피하도록 설계되어 있다. 예를 들어 만약 데이터베이스가 고객의 현재 주소 복사본을 여러 개 관리하고 있다면 하나 이상의 주소 복사본은 갱신되겠지만 나머지는 갱신되지 않을 가능성이 있다. 이때, 데이터베이스에서 고객의 현재 주소가 저장된 복사본은 어떤 것일까?

또 다른 경우를 생각해보자. 만약 고객의 주문과 분리해서 고객 정보를 저장하지 않는다면 주문을 모두 삭제했을 때 고객 레코드도 모두 삭제될 것이다. 이러한 이상현상을 회피하는 규칙들은 논리적이며 예제에서 쉽게 배울 수 있다.

Note 문서 데이터베이스 모델러들은 데이터베이스를 설계할 때 경험 법칙이나 발견적 학습법에 더 많이 의존한다. 이는 형식적인 규칙이 아니며 정규화 같은 논리적인 규칙이다. 예를 들어 문서 데이터베이스 모델에 대한 설명만 봐서는 이 모델이 효율적으로 수행될 것인지 알 수 없다. 사용자가 데이터베이스 질의를 어떻게 수행하는지, 얼마나 많은 데이터가 입력될 것인지, 문서가 얼마나 자주, 어떤 방식으로 갱신될 것인지를 고려해야 한다.

이 장에서는 정규화와 비정규화, 그리고 이 둘을 문서 데이터베이스 모델링에 적용하는 방법을 배울 것이다. 문서를 갱신할 때, 특히 문서의 크기가 변할 때 발생하는 영향도 배울 것이다. 인덱스는 질의 응답 시간을 획기적으로 향상시킬 수 있지만, 문서를 입력하거나 갱신할 때 인덱스도 같이 갱신되는데 이때 필요한 추가 시간과 균형을 맞춰야 한다. 문서 데이터베이스 설계를 연습하면서 몇 가지 설계 패턴이 등장했다. 이는 후반부에서 설명하겠다.

이 장의 맨 마지막에 있는 사례 연구에서는 이전 장들에서 소개했던 가상의 운송 회사에서 운송 내역을 추적하는 용도로 문서 데이터베이스를 사용하는 방법을 다룰 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.