MongoDB 데이터 모델링 가이드
KUKJIN LEE • 23시간 전 작성
MongoDB는 비관계형(NoSQL) 데이터베이스로, 데이터를 JSON과 유사한 BSON(Binary JSON) 문서 형태로 저장합니다. 이 구조는 데이터의 중첩과 비정규화를 가능하게 하여 관계형 데이터베이스와 다른 방식으로 데이터를 모델링하게 됩니다.
MongoDB 데이터 모델링의 주요 개념
MongoDB의 데이터 모델링에서는 다음과 같은 주요 개념을 염두에 두어야 합니다.
-
컬렉션(Collection): 테이블과 유사한 데이터 그룹으로, 동일한 구조의 문서들을 포함
-
문서(Document): JSON과 유사한 개별 데이터 항목. 관계형 데이터베이스의 레코드와 유사
-
필드(Field): 문서 내의 각 데이터 속성으로, 컬럼과 유사
-
스키마 유연성: MongoDB는 스키마를 강제하지 않으며, 서로 다른 구조의 문서를 하나의 컬렉션에 포함할 수 있음
관계형 데이터베이스와 MongoDB 모델링 비교
MongoDB는 비정규화된 데이터 구조를 채택하여, 데이터를 중첩하고 배열 형태로 저장할 수 있습니다. 관계형 데이터베이스(RDBMS)에서 여러 테이블로 분리하는 방식과 달리 MongoDB에서는 데이터 중첩을 통해 중복을 줄이고, 빠르게 접근할 수 있도록 설계할 수 있습니다.
특징 |
관계형 데이터베이스 |
MongoDB |
---|---|---|
데이터 저장 방식 |
테이블 구조, 강력한 스키마 |
문서 기반, 스키마 유연성 |
관계 표현 방식 |
외래 키를 통한 참조 |
중첩 문서, 배열 또는 참조 방식 |
성능 최적화 |
정규화 |
비정규화 및 중첩 구조 |
데이터 모델링 기본 원칙
MongoDB의 데이터 모델링에서는 몇 가지 중요한 원칙이 있습니다.
-
일관성 유지: 문서의 중첩과 참조 방식 선택 시 일관성을 유지
-
읽기 성능 최적화: 모델링 단계에서 애플리케이션의 주된 쿼리 패턴을 고려하여 설계
-
데이터 중복 허용: 필요할 경우 데이터 중복을 허용하여 쿼리 성능을 최적화
-
확장성 고려: 데이터 크기와 쿼리 성능을 고려한 컬렉션 설계를 통해, 시스템 확장에 유연하게 대응
MongoDB의 데이터 모델링 전략
가장 중요한 부분입니다. 모델링을 할 때 주로 임베딩(Embedding)과 참조(Referencing) 방식을 조합하여 사용합니다.
임베딩(Embedding)
데이터를 한 문서 안에 중첩하여 저장하는 방식입니다. 주로 다음의 경우에 사용됩니다.
-
데이터 간 관계가 일대일(1:1) 또는 일대다(1:N) 관계일 때
-
데이터가 함께 자주 조회될 때
-
데이터를 독립적으로 관리할 필요가 없을 때
{
"_id": "123",
"name": "KJ",
"contact": {
"email": "cptkuk91@gmail.com",
"phone": "123-456-7890"
}
}
참조(Referencing)
두 컬렉션 간 관계를 유지하며 데이터 중복을 줄이는 방식으로, 두 개의 문서를 연결할 때 사용합니다. 외래 키와 유사한 방식입니다.
-
데이터 간 관계가 다대다(N:N) 관계일 때
-
데이터가 독립적으로 관리되어야 할 때
-
데이터를 별도로 업데이트할 필요가 있을 때
// users 컬렉션
{
"_id": "123",
"name": "KJ",
"contact_id": "456"
}
// contacts 컬렉션
{
"_id": "456",
"email": "cptkuk91@gmail.com",
"phone": "123-456-7890"
}
MongoDB 모델링 시의 성능 최적화 팁
-
적절한 인덱스 사용: 자주 사용하는 쿼리에 필요한 필드에 인덱스를 설정하여, 검색 성능을 향상시킵니다.
-
쿼리 패턴에 따른 스키마 설계: 데이터를 조회하는 방식에 따라 스키마를 최적화합니다.
-
데이터 중복 허용: 조회 성능을 높이기 위해 필요할 경우 데이터 중복을 허용합니다.
-
컬렉션 수 제한: 너무 많은 컬렉션이 존재하면 성능에 영향을 미칠 수 있습니다. 관련 데이터는 같은 컬렉션에 두고 구분할 수 있는 필드를 추가하여 관리하는 것이 좋습니다.