728x90
반응형
서론
MongoDB의 장점이자 단점이 될 수 있는 것은 문서 내부에 통으로 저장하는 방식으로 join으로 인한 성능 저하를 줄일 수 있다는 점이다. 이는 다시 말해 처음 설계에서 어떻게 할지 정하는 것이 더욱 중요하다는 얘기가 될 수도 있다. 데이터 무결성과 중복 사이에서 적절한 줄타기가 필요한 특징이다.
그럼에도 불구하고, 별도의 컬렉션으로 분리하여 다른 컬렉션의 id를 참조해야하는 경우가 발생하기 마련이기 때문에, 두 방법을 비교해보는 글을 쓰게 되었다.
본론
별도의 컬렉션으로 분리
- 사용
- 자주 추가되고, 자주 변경되는 데이터
- A와 B 데이터가 독립적으로 관리되어야 하는 경우
- 다양한 필터링이나 분석이 필요한 경우
- 장점
- 데이터 중복을 줄일 수 있어 저장 공간을 효율적으로 사용
- 별도의 문서로 관리되기 때문에 필요할 때만 쿼리 가능
- 단점
- 동시에 조회할 때 두 개의 쿼리가 필요하여 성능에 영향을 줄 수 있음
- 두 데이터의 관계를 유지할 때 추가적인 관리 필요
- 예시: 유저와 구매 내역이 있을 때
- 구매 내역에 대해 별도로 필터링이나 분석을 진행하는 경우에 유리
- 삭제된 유저의 구매 내역을 어떻게 할 지 정의 필요
- 유저 정보와 구매 내역을 동시에 조회하는 것을 가급적 피하기
- 물품 구매 등 이커머스 서비스에서 유리
문서 내부에 저장
- 사용
- 두 문서의 관계가 밀접하고 함께 조회하는 일이 잦은 경우
- 상대적으로 추가되거나 변경되는 일이 드문 경우
- 장점
- 추가적인 쿼리 필요없이 한번에 조회가 가능하여 성능이 향상
- 같은 문서에 존재하기 때문에 일관성을 유지하기 쉬움
- 두 문서가 항상 동기화 되어있음
- 단점
- B 문서를 여러 개의 A 문서가 가지고 있는 경우 중복 저장될 수 있음
- 문서 크기의 제한으로 B 문서가 많아질 경우 성능에 영향을 줄 수 있음
- 예시: 유저와 구매 내역이 있을 때
- 유저와 구매 내역의 관계가 밀접하여 같이 조회하는 일이 잦은 경우
- 구매 내역이 상대적으로 적고 자주 변경되지 않는 경우
- 멤버십 구독 등의 경우에 유리
결론
개발에서 어떤 기술을 사용할 지에 대한 정답이 없다는 것은 개발자가 이 프로젝트에 적합할 기술을 판단해야 한다는 말이다. 그렇기 때문에 다양한 기술에 대해 가볍게라도 알고 있는 건 굉장한 장점이 되는 것 같다.
728x90
반응형
'현문hyun답' 카테고리의 다른 글
[현문hyun답] 언제 어떤 데이터베이스와 ORM/ODM을 사용하는게 좋을까? (2) - ORM/ODM (0) | 2024.11.15 |
---|---|
[현문hyun답] 언제 어떤 데이터베이스와 ORM/ODM을 사용하는게 좋을까? (1) - 데이터베이스 (1) | 2024.11.14 |
[현문hyun답] go의 goroutine(고루틴), kotlin의 coroutine(코루틴), typescript의 generator(생성기), roblox lua의 corotuine(코루틴) 비교 (0) | 2024.08.13 |
[현문hyun답] Web Server와 WAS의 차이 (0) | 2022.11.10 |
[현문hyun답] ORM이란? JPA, Sequelize 등을 쓰는 이유는? (0) | 2022.08.18 |