..

Troubleshooting: Jackson의 LocalDateTime 직렬화 오류 해결

1. 문제 상황

Spring Boot 프로젝트에서 데이터베이스의 datetime 컬럼을 엔티티의 LocalDateTime 타입으로 매핑하여 작업하던 중, 이를 DTO로 변환하여 JSON 응답을 보내려 할 때 다음과 같은 오류가 발생했습니다.

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default

2. 원인 분석

Jackson 라이브러리는 기본적으로 Java 8에 도입된 java.time 패키지(JSR-310) 타입들을 어떻게 JSON으로 변환(Serialize)할지 알지 못합니다. 이를 처리하기 위한 별도의 모듈 설정이 필요합니다.

3. 해결 방법: JavaTimeModule 등록

단계 1: 라이브러리 확인

일반적인 spring-boot-starter-json에는 포함되어 있으나, 별도로 필요할 경우 다음 의존성을 추가합니다.

implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'

단계 2: ObjectMapper 설정

LocalDateTime을 처리할 수 있도록 JavaTimeModule을 등록해 줍니다.

// AS-IS
ObjectMapper om = new ObjectMapper();

// TO-BE
ObjectMapper om = new ObjectMapper().registerModule(new JavaTimeModule());

Spring Boot를 사용 중이라면 application.yml 설정만으로도 전역 설정이 가능하지만, 도메인 로직 내에서 수동으로 ObjectMapper를 생성해 쓸 경우에는 위와 같이 명시적인 모듈 등록이 필수입니다.