dkdud9261 / develop-log

BE 개발자의 현업 이슈 정리 🌟
3 stars 0 forks source link

[MongoDB+Spring] 객체/컬렉션 필드 타입 분리시키기 #6

Open dkdud9261 opened 5 months ago

dkdud9261 commented 5 months ago

MongoDB에 컬렉션을 저장하기 위한 객체 클래스를 아래와 같이 정의하면 클래스 내에 정의한 타입과 동일하게 필드가 만들어진다.

data class MyCollection(
  @Id
  val id: String? = null,
  val myField: String
)

만약, 객체의 필드 타입과 디비의 필드 타입을 다르게 관리하고 싶다면 아래와 같은 방법을 사용할 수 있다.

예제) 객체에는 MyString Object 타입, 디비에는 String 타입으로 저장하기

  1. 객체 필드로 저장하고자 하는 타입 클래스와 같은 패키지 내에 Converter 정의하기

    class MyString {
    val value: String
    
    @WritingConverter
    class MyStringToStringConverter: Converter<MyString, String> {
    override fun convert(source: MyString): String {}
    }
    
    @ReadingConverter
    class StringToMyStringConverter: Converter<String, MyString> {
    override fun convert(source: String): MyString {}
    }
    }
  2. MongoCustomConversions 빈 등록하기

    @Configuration
    class MongoConfig {
    
    @Bean
    fun customConversions(): MongoCustomConversions {
      return MongoCustomConversions(
          listOf(
              MyStringToStringConverter(),
              StringToMyStringConverter()
          )
      )
    }
    }