003 Spring Data Mongodb

Spring data mongodb reactive #

Entity #

  • 데이터베이스에서 하나의 Document와 매칭되는 클래스
  • ReactiveMongoEntityTemplate, ReactiveMongoRepository 등은 데이터베이스에 요청을 보내고 그 결과를 Entity 형태로 반환한다.
  • Collection, Document에 필요한 데이터베이스 metadata를 어노테이션 등으로 제공 img.png

ReactiveMongoTemplate #

  • ReactiveMongoTemplate은 Spring data mongodb reactive의 추상화 클래스
  • Mongo 쿼리들을 Bson 형태로 넘기거나 PojoCodec, Custom codec 등을 등록하지 않아도, 메소드 체이닝을 통해서 쿼리를 수행하고 결과를 entity 객체로 받을 수 있다
  • ReactiveMongoOperations를 구현 img_1.png

MongoTemplate 생성 #

  • MongoClient와 databaseName을 전달하여 생성 가능
  • spring에서는 ReactiveMongoDatabaseFactory와 MongoConverter을 주입받아 생성 img_2.png

ReactiveMongoOperations #

  • ReactiveMongoTemplate의 operations를 담당하는 interface
  • ReactiveFluentMongoOperations를 상속하고 MongoConverter 제공
    • MongoConverter: 주어진 Document를 Entity로 만드는 converter img_3.png

ReactiveMongoDatabaseFactory #

  • getMongoDatabase: MongoDatabase를 반환
  • getCodecRegistry: bson의 CodecRegistry를 반환
  • ReactiveMongoTemplate은 ReactiveMongoDatabaseFactory의 MongoDatabase를 통해서 MongoCollection에 접근 img_4.png

ReactiveMongoTemplate 구현 #

  • ReactiveMongoTemplate은 createMono 혹은 createFlux를 이용하여 MongoCollection을 획득 img_5.png

ReactiveMongoTemplate 구현 #

  • createFlux를 이용하여 collectionName과 callback을 전달
  • callback에서 Publisher를 반환
  • 이런 방식으로 여러 operations를 구현 img_6.png img_7.png

MongoConverter #

  • MongoWriter(EntityWriter를 상속), EntityReader를 구현

  • 구현체로 MappingMongoConverter img_8.png

  • 다양한 전략을 통해서 Object <-> document 변환

    • custom converter로 mapping
    • Spring data의 object mapping
    • convention 기반의 mapping
    • metadata 기반의 mapping img_9.png

Custom converter mapping #

  • Configuration를 통해서 converter들을 등록
  • 데이터베이스에 읽고 쓰기를 하기 위해 두개의 Converter가 필요
    • bson.Document -> Target 클래스로 변환하는 Converter
    • Target -> bson.Document로 변환하는 Converter img_10.png

ReadConverter #

  • Document -> source, Entity -> target으로 하는 Converter
  • Document로부터 name으로 field에 접근할 수 있고, 변환하고나 type에 해당하는 메서드 호출 img_11.png

WriteConverter #

  • Entity -> source, Document -> target으로 하는 Converter
  • Document에 값을 추가
  • put을 통해서 field의 이름, value 순으로 전달
  • Document를 데이터베이스에 전달 img_12.png

위 CustomConverter 등록 #

  • AbstractMongoClientConfiguration를 상속하는 Configuration 생성
  • AbstractR2dbcConfiguration의 configureConverters에 custom converter들을 register img_13.png

  1. 강의 : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지_