Header Banner
GG Logo

Future Engineering

기술의 최전선을 기록합니다.

기술 자료/BackEnd/MongoDB 데이터 모델링 가이드

MongoDB 데이터 모델링 가이드

BackEnd8개월 전

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 모델링 시의 성능 최적화 팁

  • 적절한 인덱스 사용: 자주 사용하는 쿼리에 필요한 필드에 인덱스를 설정하여, 검색 성능을 향상시킵니다.

  • 쿼리 패턴에 따른 스키마 설계: 데이터를 조회하는 방식에 따라 스키마를 최적화합니다.

  • 데이터 중복 허용: 조회 성능을 높이기 위해 필요할 경우 데이터 중복을 허용합니다.

  • 컬렉션 수 제한: 너무 많은 컬렉션이 존재하면 성능에 영향을 미칠 수 있습니다. 관련 데이터는 같은 컬렉션에 두고 구분할 수 있는 필드를 추가하여 관리하는 것이 좋습니다.