ReactiveMongoTemplate과 ReactiveMongoRepository는 반응형 MongoDB 작업을 수행하는 두 가지 주요 방식이다.
ReactiveMongoRepository를 사용해야 하는 경우
ReactiveMongoRepository는 주로 기본적인 CRUD 작업을 간편하게 처리할 때 유용하다.
단순한 조회, 저장, 삭제 등의 작업이 자주 필요할 때는 repository가 더 직관적이고, 필요한 메서드들이 미리 정의되어 있어 코드가 간결해진다.
- 단순한 CRUD 작업: 기본적인 조회(findById, findAll), 저장(save), 삭제(deleteById) 등의 작업
- 메서드 이름을 통한 쿼리 정의: findByName, findByStatus 등 메서드 이름만으로 간단한 조건 기반 조회 수행
- 반응형 스트림 기반 리턴: 대부분의 메서드가 Mono나 Flux로 결과를 반환하므로, 필요한 경우 직접적인 반응형 처리 가능
기본적인 데이터 저장과 조회 작업은 repository에서 쉽게 수행할 수 있다.
@Service
public class MyService {
private final ResultRepository repository;
@Autowired
public MyService(ResultRepository repository) {
this.repository = repository;
}
public Mono<Result> saveResult(Result result) {
return repository.save(result);
}
public Flux<Result> getAllResults() {
return repository.findAll();
}
}
ReactiveMongoTemplate를 사용해야 하는 경우
ReactiveMongoTemplate은 더 복잡한 쿼리 작업을 수행하거나 커스텀 집계 쿼리가 필요할 때 적합하다.
특정 필드의 집계나 여러 조건을 결합한 복잡한 쿼리를 실행할 때 ReactiveMongoTemplate의 유연성을 활용할 수 있다.
- 복잡한 집계(Aggregation) 작업: 여러 단계의 집계를 수행하거나, 특정 필드 기준으로 그룹화 등의 복잡한 쿼리를 구성할 때
- 다중 컬렉션 간의 조인: MongoDB에서 컬렉션 간의 조인이나 데이터 조작이 필요한 경우
- 조건에 따른 동적 쿼리 구성: 조건이 동적으로 결정되거나 여러 필터가 결합된 조회가 필요할 때
특정 필드에 대한 집계 작업을 수행할 경우 아래와 같이 작업하면 된다.
public Flux<ResultSummary> getResultSummary() {
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.group("fieldName").count().as("total")
);
return mongoTemplate.aggregate(aggregation, "resultCollection", ResultSummary.class);
}
결론
- 단순한 CRUD와 기본적인 조회는 ReactiveMongoRepository가 더 편리
- 복잡한 쿼리와 커스텀 집계 작업에는 ReactiveMongoTemplate을 사용
두 가지를 함께 사용하면 기본 작업은 repository로 처리하고,
복잡한 쿼리는 mongoTemplate로 처리하는게 유연한 데이터 접근이 가능하다.
반응형
'공부 > Spring' 카테고리의 다른 글
[Spring] MongoDB 조회 - Stream, Aggregation 비교 (0) | 2024.11.04 |
---|---|
[Spring] 스프링 AOP 포인트컷 (0) | 2024.05.21 |
[Spring] Spring AOP 구현 예제 (0) | 2024.05.17 |
[Spring] AOP 개념 및 용어 정리 (0) | 2024.05.13 |
[Spring] @Aspect란, 생성 과정 설명 (0) | 2024.05.12 |