Header Banner
GG Logo

Future Engineering

기술의 최전선을 기록합니다.

기술 자료/BackEnd/Jackson Datatype JSR310 활용한 ObjectMapper LocalDateTime 변환 문제 해결

Jackson Datatype JSR310 활용한 ObjectMapper LocalDateTime 변환 문제 해결

BackEnd약 1개월 전

jackson-datatype-jsr310은 JSON 데이터와 Java 객체 간 변환을 담당하는 Jackson 라이브러리 확장 모듈입니다. 날짜 및 시간 API (JSR-310)을 Jackson이 올바르게 처리할 수 있도록 지원하는 핵심 기능을 제공합니다.

 

무슨 기능이고 왜 설치해야 하는가? (기능 및 설치 이유)

기본 ObjectMapper가 Java8의 날짜/시간 객체를 JSON문자열로 변환(직렬화)하고, 반대로 JSON 문자열을 어떻게 Java8 날짜/시간 객체로 변환(역직렬화)해야 할지 몰랐습니다. 직렬화, 역직렬화 문제를 해결하기 위해 도입됐습니다.

 

  • 직렬화 (Serialization): Java 객체 → JSON 문자열 (Java 안에서 밖으로)

  • 역직렬화 (Deserialization): JSON 문자열 → Java 객체 (Java 밖에서 안으로)

 

jackson-datatype-jsr310 라이브러리를 설치하지 않고 LocalDateTime과 같은 필드를 가진 객체를 JSON으로 변환하려고 하면, 다음과 같은 InvalidDefinitionException 오류가 발생하게 됩니다.

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

jackson-datatype-jsr310 의존성을 추가하면 JavaTimeModule이라는 모듈이 제공됩니다. 이 모듈을 Jackson의 ObjectMapper에 등록하면, ObjectMapperLocalDate, LocalDateTime 등의 JSR-310 타입을 인식하고, 국제 표준 형식인 ISO 8601 (예: "2025-06-20T14:30:00")으로 직렬화 및 역직렬화를 자동으로 수행합니다.

 

결론적으로, 이 라이브러리는 Java 8 이상의 환경에서 Jackson을 사용하여 JSON을 다룰 때, 날짜/시간 데이터를 안정적이고 표준화된 방식으로 처리하기 위해 반드시 설치해야 하는 필수 요소입니다.

 

언제 사용하는가?

jackson-datatype-jsr310는 다음과 같은 상황에 사용됩니다.

  • Java 객체(DTO, Entity 등)에 LocalDate, LocalDateTime, LocalTime, ZonedDateTime, Instantjava.time 패키지의 클래스를 필드로 포함하고 있을 경우

  • 해당 객체를 Spring Web MVC의 @RequestBody@ResponseBody를 통해 JSON 형태로 주고받는 RESTful API를 개발할 때

  • 객체를 JSON 형태로 변환하여 Redis와 같은 캐시 저장소나 메시지 큐에 저장 또는 전송할 때

  • 파일이나 데이터베이스에 객체 상태를 JSON 형식으로 저장하고 읽어올 때

 

ObjectMapper에 모듈 등록 예시

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

// ...

ObjectMapper objectMapper = new ObjectMapper();
// JavaTimeModule을 등록하여 Java 8 날짜/시간 API 지원 활성화
objectMapper.registerModule(new JavaTimeModule());

 

직렬화 (Serialization) 예시: Java 객체 → JSON 문자열

[처리 전: Java 객체 상태]

product.setLaunchDate(LocalDateTime.of(2025, 6, 20, 14, 37, 23)); // ⬅️ Java가 이해하는 LocalDateTime 객체

[처리 후: JSON 문자열 상태]

{
  "launchDate": "2025-06-20T14:37:23"
}

역직렬화 (Deserialization) 예시: JSON 문자열 → Java 객체

[처리 전: JSON 문자열 상태]

{
  "launchDate": "2025-06-20T14:37:23"
}

[처리 후: Java 객체 상태]

product.setLaunchDate( /* "2025-06-20T14:37:23" 문자열로부터 완벽하게 복원된 LocalDateTime 객체 */ );

키워드

Jackson LocalDateTime 직렬화jackson-datatype-jsr310 사용법Spring Boot LocalDateTime JSON 변환
Jackson Datatype JSR310 활용한 ObjectMapper LocalDateTime 변환 문제 해결 | TECH.KAKAO.GG