Spring에서 몽고디비를 사용할 때
스트리밍 조회(Stream Processing)와 MongoDB Aggregation 중
어떤 방법이 더 좋은지 데이터의 특성과 사용 목적을 고려해야 한다.
스트리밍 조회 (Stream Processing)
- 장점
- 메모리 효율성: 전체 데이터를 한 번에 메모리에 로드하지 않고, 하나씩 처리하기 때문에 메모리 부담이 적다.
- 단순한 로직: 데이터 하나하나를 순차적으로 처리하는 데 적합하여, 복잡한 집계나 가공 작업을 서버 측 코드에서 쉽게 처리할 수 있다.
- 단점
- 네트워크 부담: 모든 데이터를 서버로 전송해야 하므로 네트워크 트래픽이 높아질 수 있다.
- 속도 저하 가능성: MongoDB 내에서 바로 처리하지 않고, 애플리케이션 서버에서 작업을 수행해야 하므로 처리 속도가 느려질 수 있다.
- 적합한 경우
- 데이터 가공이 복잡하지 않거나, 모든 데이터를 순차적으로 스캔하면서 서버 측에서 추가 작업이 필요한 경우.
- 예를 들어, 데이터 필터링 후 로깅이나 전송하는 작업처럼 각 데이터를 순차적으로 단순히 처리하는 경우.
MongoDB Aggregation
- 장점
- MongoDB 내에서 처리: 데이터 집계나 가공을 MongoDB 서버 내에서 바로 처리하여, 서버 애플리케이션 부하가 줄고 성능이 높아진다.
- 네트워크 효율성: 필요한 데이터만 서버로 전송하므로, 네트워크 비용이 줄어든다.
- 복잡한 집계에 적합: MongoDB의 강력한 Aggregation 파이프라인을 활용해 복잡한 데이터 집계를 빠르게 수행할 수 있다.
- 단점
- 쿼리 작성 복잡성: 복잡한 파이프라인을 작성하는 데 약간의 학습이 필요할 수 있으며, 파이프라인 구문이 길어질 수 있다.
- 유연성 제한: MongoDB 내에서 집계를 처리하므로, 서버 코드에서 모든 처리를 커스터마이징하기 어려울 수 있다.
- 적합한 경우
- 대량의 데이터를 요약, 집계, 필터링해야 하거나 복잡한 데이터 집계 작업이 필요한 경우.
- 예를 들어, 특정 필드에 대한 평균 값, 집계된 카운트 등을 처리할 때 적합하다.
결론
Aggregation이 일반적으로 효율성과 성능 면에서 유리하다.
특히 대량의 데이터를 요약하거나 복잡한 집계가 필요한 경우 MongoDB의 강력한 집계 기능을 사용하면 성능을 크게 개선할 수 있다.
그러나 각 데이터를 순차적으로 스캔하며 추가 로직을 적용해야 한다면 스트리밍 방식이 더 적합할 수 있다.
데이터 요약 및 필터링 작업이 주 목적이라면 Aggregation이 더 나은 선택이다.
반응형
'백엔드 > Spring' 카테고리의 다른 글
[Spring] Reactive MongoDB Stream의 Flux, Mono 조회 방법 비교 (0) | 2024.11.22 |
---|---|
[Spring] ReactiveMongoTemplate vs ReactiveMongoRepository (0) | 2024.11.07 |
[Spring] mongodb, mongodb-reactive Dependency 차이 (0) | 2024.10.31 |
[Spring] AES 암호화를 CBC 모드로 구현하기 (0) | 2024.07.30 |
[Spring] 스프링 AOP 포인트컷 (0) | 2024.05.21 |