현문hyun답

[현문hyun답] MongoDB 에서 별도의 컬렉션으로 분리하는 것과 문서 내부에 저장하는 것 비교

Hyun-danpung2 2024. 11. 18. 21:03
728x90
반응형

서론

MongoDB의 장점이자 단점이 될 수 있는 것은 문서 내부에 통으로 저장하는 방식으로 join으로 인한 성능 저하를 줄일 수 있다는 점이다. 이는 다시 말해 처음 설계에서 어떻게 할지 정하는 것이 더욱 중요하다는 얘기가 될 수도 있다. 데이터 무결성과 중복 사이에서 적절한 줄타기가 필요한 특징이다.

그럼에도 불구하고, 별도의 컬렉션으로 분리하여 다른 컬렉션의 id를 참조해야하는 경우가 발생하기 마련이기 때문에, 두 방법을 비교해보는 글을 쓰게 되었다.

 

본론

별도의 컬렉션으로 분리

  • 사용
    • 자주 추가되고, 자주 변경되는 데이터
    • A와 B 데이터가 독립적으로 관리되어야 하는 경우
    • 다양한 필터링이나 분석이 필요한 경우
  • 장점
    • 데이터 중복을 줄일 수 있어 저장 공간을 효율적으로 사용
    • 별도의 문서로 관리되기 때문에 필요할 때만 쿼리 가능
  • 단점
    • 동시에 조회할 때 두 개의 쿼리가 필요하여 성능에 영향을 줄 수 있음
    • 두 데이터의 관계를 유지할 때 추가적인 관리 필요
  • 예시: 유저와 구매 내역이 있을 때
    • 구매 내역에 대해 별도로 필터링이나 분석을 진행하는 경우에 유리
    • 삭제된 유저의 구매 내역을 어떻게 할 지 정의 필요
    • 유저 정보와 구매 내역을 동시에 조회하는 것을 가급적 피하기
    • 물품 구매 등 이커머스 서비스에서 유리

 

문서 내부에 저장

  • 사용
    • 두 문서의 관계가 밀접하고 함께 조회하는 일이 잦은 경우
    • 상대적으로 추가되거나 변경되는 일이 드문 경우
  • 장점
    • 추가적인 쿼리 필요없이 한번에 조회가 가능하여 성능이 향상
    • 같은 문서에 존재하기 때문에 일관성을 유지하기 쉬움
    • 두 문서가 항상 동기화 되어있음
  • 단점
    • B 문서를 여러 개의 A 문서가 가지고 있는 경우 중복 저장될 수 있음
    • 문서 크기의 제한으로 B 문서가 많아질 경우 성능에 영향을 줄 수 있음
  • 예시: 유저와 구매 내역이 있을 때
    • 유저와 구매 내역의 관계가 밀접하여 같이 조회하는 일이 잦은 경우
    • 구매 내역이 상대적으로 적고 자주 변경되지 않는 경우
    • 멤버십 구독 등의 경우에 유리

 

결론

개발에서 어떤 기술을 사용할 지에 대한 정답이 없다는 것은 개발자가 이 프로젝트에 적합할 기술을 판단해야 한다는 말이다. 그렇기 때문에 다양한 기술에 대해 가볍게라도 알고 있는 건 굉장한 장점이 되는 것 같다.

728x90
반응형