Spring data mongodb reactive #
Entity #
- 데이터베이스에서 하나의 Document와 매칭되는 클래스
- ReactiveMongoEntityTemplate, ReactiveMongoRepository 등은 데이터베이스에 요청을 보내고 그 결과를 Entity 형태로 반환한다.
- Collection, Document에 필요한 데이터베이스 metadata를 어노테이션 등으로 제공
ReactiveMongoTemplate #
- ReactiveMongoTemplate은 Spring data mongodb reactive의 추상화 클래스
- Mongo 쿼리들을 Bson 형태로 넘기거나 PojoCodec, Custom codec 등을 등록하지 않아도, 메소드 체이닝을 통해서 쿼리를 수행하고 결과를 entity 객체로 받을 수 있다
- ReactiveMongoOperations를 구현
MongoTemplate 생성 #
- MongoClient와 databaseName을 전달하여 생성 가능
- spring에서는 ReactiveMongoDatabaseFactory와 MongoConverter을 주입받아 생성
ReactiveMongoOperations #
- ReactiveMongoTemplate의 operations를 담당하는 interface
- ReactiveFluentMongoOperations를 상속하고 MongoConverter 제공
- MongoConverter: 주어진 Document를 Entity로 만드는 converter
ReactiveMongoDatabaseFactory #
- getMongoDatabase: MongoDatabase를 반환
- getCodecRegistry: bson의 CodecRegistry를 반환
- ReactiveMongoTemplate은 ReactiveMongoDatabaseFactory의 MongoDatabase를 통해서 MongoCollection에 접근
ReactiveMongoTemplate 구현 #
- ReactiveMongoTemplate은 createMono 혹은 createFlux를 이용하여 MongoCollection을 획득
ReactiveMongoTemplate 구현 #
- createFlux를 이용하여 collectionName과 callback을 전달
- callback에서 Publisher를 반환
- 이런 방식으로 여러 operations를 구현
MongoConverter #
-
MongoWriter(EntityWriter를 상속), EntityReader를 구현
-
구현체로 MappingMongoConverter
-
다양한 전략을 통해서 Object <-> document 변환
- custom converter로 mapping
- Spring data의 object mapping
- convention 기반의 mapping
- metadata 기반의 mapping
Custom converter mapping #
- Configuration를 통해서 converter들을 등록
- 데이터베이스에 읽고 쓰기를 하기 위해 두개의 Converter가 필요
- bson.Document -> Target 클래스로 변환하는 Converter
- Target -> bson.Document로 변환하는 Converter
ReadConverter #
- Document -> source, Entity -> target으로 하는 Converter
- Document로부터 name으로 field에 접근할 수 있고, 변환하고나 type에 해당하는 메서드 호출
WriteConverter #
- Entity -> source, Document -> target으로 하는 Converter
- Document에 값을 추가
- put을 통해서 field의 이름, value 순으로 전달
- Document를 데이터베이스에 전달
위 CustomConverter 등록 #
- AbstractMongoClientConfiguration를 상속하는 Configuration 생성
- AbstractR2dbcConfiguration의 configureConverters에 custom converter들을 register
- 강의 : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지_