JVM/Spring

Spring JacksonObjectMapper는 어떻게 jackson-module-kotlin을 등록하나

Hyo Kim 2022. 11. 27. 14:08
728x90
반응형

🤣 서론

이전에는 jackson-module-kotlin 모듈을 추가하면 자동으로 spring objectMapper에서 사용한다길래

그렇구나 하고 넘어갔었다.

 

찾아보게 된 계기는, 회사에서 만든 objectMapper가 jackson-module-kotlin 모듈을 추가했음에도 제대로 동작하지 않았었다.

처음에는 다른 문제 때문이라 생각했지만, 몇 번 다시 보니 objectMapper에 KotlinModule()을 넣어주는 부분이 없었다.

역시 모듈만 추가 한다고 자동으로 모든 objectMapper에서 적용되지 않을 텐데.. 생각이 매우 짧았다.

 

그래서 스프링에서는 어떻게 모듈 추가만으로 jackson-module-kotlin 를 사용하는지 궁금해서 찾아보게 되었다.


🙂 본론

처음으로 1차원적으로 찾아보려고 했다.

jackson-module-kotlin을 추가해서 사용되는 거니까 당연히 해당 모듈에서 스프링을 어떻게 수정해서 넣나?

하고 한참동안 해당 모듈을 찾아봤지만 역시 넣는 부분은 찾지 못하고 여기가 아니라는 걸 깨달았다.

 

다음 생각은 역시 spring에서 사용하니 spring에서 해당 모듈의 여부를 체크해서 사용하겠구나 였다.

열심히 구글링 후 공식문서를 찾았다!

 

Jackson2ObjectMapperBuilder !! 이 녀석을 살펴보았다.

 

configure

findWellKnownModules 변수는 defualt로 true가 설정되어있었다.

그렇기에 registerWellKnownModulesIfAvailable 메서드가 실행된다.

메서드 이름을 '잘 알려진 모듈이 사용가능한 경우 등록'으로 해석할 수 있는데

이 메서드명만 보고 어 여긴가 이런 생각이 들 정도니.. 이래서 네이밍이 중요하구나를 확 느꼈다.

registerWellKnownModulesIfAvailable 1

jackson-datatype-jdk8jackson-datatype-jsr310

2개의 모듈에 대해서는 있다고 가정하고 무조건 넣어준다.

 

registerWellKnownModulesIfAvailable 2

jackson-datatype-joda / jackson-module-kotlin

두 모듈에 대해서는 등록이 가능한지 체크 후에 추가해준다.

 

내가 찾던 부분이 여있었다!

kotlin을 사용중이면 jackson-module-kotlin을 사용하려고 한다.

모듈이 없다면 logger.warn으로 추가해야 한다고 알려준다.

spring에서도 이렇게 경고를 띄워줄 정도로 kotlin을 사용할 땐 jackson-module-kotlin을 사용하는 것이이점이 많다는 걸 알 수 있다.


😲 결론

어떤 모듈들은 Spring 공식지원이라면서 모듈 추가만 해줘도 자동으로 사용이 가능한 것들이 종종 있다.

앞으로 이런 것들을 알아볼 때는 1차원적으로 모듈을 보는 게 아니라 지원해주는 곳을 살펴봐야 된다는 걸 배웠다.

 

피드백은 언제나 환영입니다 ! (__)

 

참고

 

728x90
반응형