🤣 서론
이전에는 jackson-module-kotlin 모듈을 추가하면 자동으로 spring objectMapper에서 사용한다길래
그렇구나 하고 넘어갔었다.
찾아보게 된 계기는, 회사에서 만든 objectMapper가 jackson-module-kotlin 모듈을 추가했음에도 제대로 동작하지 않았었다.
처음에는 다른 문제 때문이라 생각했지만, 몇 번 다시 보니 objectMapper에 KotlinModule()을 넣어주는 부분이 없었다.
역시 모듈만 추가 한다고 자동으로 모든 objectMapper에서 적용되지 않을 텐데.. 생각이 매우 짧았다.
그래서 스프링에서는 어떻게 모듈 추가만으로 jackson-module-kotlin 를 사용하는지 궁금해서 찾아보게 되었다.
🙂 본론
처음으로 1차원적으로 찾아보려고 했다.
jackson-module-kotlin을 추가해서 사용되는 거니까 당연히 해당 모듈에서 스프링을 어떻게 수정해서 넣나?
하고 한참동안 해당 모듈을 찾아봤지만 역시 넣는 부분은 찾지 못하고 여기가 아니라는 걸 깨달았다.
다음 생각은 역시 spring에서 사용하니 spring에서 해당 모듈의 여부를 체크해서 사용하겠구나 였다.
열심히 구글링 후 공식문서를 찾았다!
Jackson2ObjectMapperBuilder !! 이 녀석을 살펴보았다.
findWellKnownModules 변수는 defualt로 true가 설정되어있었다.
그렇기에 registerWellKnownModulesIfAvailable 메서드가 실행된다.
메서드 이름을 '잘 알려진 모듈이 사용가능한 경우 등록'으로 해석할 수 있는데
이 메서드명만 보고 어 여긴가 이런 생각이 들 정도니.. 이래서 네이밍이 중요하구나를 확 느꼈다.
jackson-datatype-jdk8 / jackson-datatype-jsr310
2개의 모듈에 대해서는 있다고 가정하고 무조건 넣어준다.
jackson-datatype-joda / jackson-module-kotlin
두 모듈에 대해서는 등록이 가능한지 체크 후에 추가해준다.
내가 찾던 부분이 여있었다!
kotlin을 사용중이면 jackson-module-kotlin을 사용하려고 한다.
모듈이 없다면 logger.warn으로 추가해야 한다고 알려준다.
spring에서도 이렇게 경고를 띄워줄 정도로 kotlin을 사용할 땐 jackson-module-kotlin을 사용하는 것이이점이 많다는 걸 알 수 있다.
😲 결론
어떤 모듈들은 Spring 공식지원이라면서 모듈 추가만 해줘도 자동으로 사용이 가능한 것들이 종종 있다.
앞으로 이런 것들을 알아볼 때는 1차원적으로 모듈을 보는 게 아니라 지원해주는 곳을 살펴봐야 된다는 걸 배웠다.
피드백은 언제나 환영입니다 ! (__)
참고
'JVM > Spring' 카테고리의 다른 글
[Spring] CaffeineCache key는 Object (0) | 2022.12.30 |
---|---|
[Spring] Spring의 ObjectMapper 쉽게 Custom 만들기 (0) | 2022.12.26 |
[Error] Invalid character found in method name.HTTP method names must be tokens (0) | 2022.10.21 |
[Spring] How to change the CamelCase to SnakeCase when i use POST form-url-encoded in Spring Cloud feign Client (0) | 2022.07.14 |
[Spring] Spring Cloud Feign logging 설정 (0) | 2022.07.13 |