리펙토링 중인 프로젝트의 엔티티에는 챌린지 startedDate, completedDate 컬럼이 존재하는데, 해당 컬럼의 타입은 LocalDateTime이었다. 해당 데이터를 직렬화하고 Redis에 저장한 후, 캐시 데이터를 조회할 때 역직렬화 과정을 거쳐야하는데 Jackson 라이브러리에서 LocalDate, LocalTime, LocalDateTime을 지원하지 않았다.
이를 처리하도록 사용하려면 com.fastxml.jackson.datatype:jsr310 모듈을 추가해야한다는 경고가 나타났고, 아래와 같이 추가해주었다. 그러나, 문제는 해결되지 않았다. Jackson을 공부하면서 ObjectMapper에 대한 이해가 필요함을 느꼈다.
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
ObjectMapper
Java에서 JSON을 다루는 데 사용되는 Jackson 라이브러리의 주요 클래스로 JSON과 Java 객체 간의 변환을 담당한다. 컬렉션 타입, 날짜/시간 타입과 같은 복잡한 데이터 유형을 적절하게 처리하기 위해서는 사용자 정의 모듈을 추가해주어야 한다. 나는 LocalDateTime을 사용하기 위해 JavaTimeModule이 필요했다. ObjectMapper에 JavaTimeModule을 등록하고 스프링 빈으로 등록주었고, 이제 날짜/시간 타입에 대해서도 직렬화 및 역직렬화가 정상적으로 동작하게 되었다.
@Configuration
public class ModuleConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
return objectMapper;
}
}
참고 자료