
Spring Boot 4와 Spring Framework 7의 등장과 함께 JSON 직렬화/역직렬화의 핵심 역할을 담당하는 Jackson이 드디어 3.x 버전으로 업그레이드되었다. 이번 변화는 단순한 버전 업데이트가 아니라 패키지 구조, 기본 설정, 주요 API, Spring 생태계 전반의 적용 방식까지 모두 달라지는 큰 전환점이다.
기존 프로젝트를 Spring Boot 4로 올리려는 개발자라면 Jackson 3는 피할 수 없는 변화다. 이 글에서는 Jackson 3의 주요 특징과 Spring Boot 4에서의 적용 방식, 마이그레이션 전략, 모듈별 변화까지 전체 흐름을 하나로 정리했다.
Jackson 3는 무엇이며 왜 Spring에 도입되었는가
Jackson은 JVM 환경에서 가장 널리 사용되는 JSON 라이브러리다. 이번 Jackson 3 도입은 단순히 최신 버전에 맞추기 위한 것이 아니라, 성능, 안정성, API 정합성 개선을 위해 Spring과 Jackson 간의 긴밀한 협업을 통해 이루어졌다.
이 과정에서 다음과 같은 개선점이 반영되었다.
- Jackson 2와 Jackson 3를 동시에 사용할 수 있도록 개선
- JDK 17을 기준으로 정리
- Spring의 JSON View 기본 동작과 Jackson을 일관되게 맞춤
- 논블로킹 파서 개선
- JsonNode API에서 null-safety 정교화
- JsonWriteFeature 기본값 재조정
- @JsonCreator 사용 필요성이 증가한 문제 개선
- 공식 Jackson 3 마이그레이션 가이드 제공
Spring 팀은 Jackson 팀과의 협업을 통해 생태계 전체에 영향을 줄 수 있는 부분까지 세심하게 조율했다.
Spring Boot 4에서의 Jackson 3 지원 현황
Spring Boot 4와 Spring Framework 7은 다음과 같은 원칙으로 Jackson 3를 도입한다.
- Jackson 3 공식 지원 시작
- Jackson 2는 deprecated 처리
- Spring Boot 기본 Jackson 버전은 Jackson 3로 전환
단, Spring AI는 2026년 상반기 출시 예정인 2.0 버전부터 Jackson 3를 도입할 예정이다.
Spring Boot 4.0의 구체적인 변화는 다음과 같다.
- Jackson 2와 3에 대한 의존성 관리 제공
- Jackson 3 기반 자동 설정 제공
- Jackson 2 자동 설정은 deprecated
- spring-boot-starter-json, starter-jackson은 Jackson 3를 기본 포함
Spring Boot 4 업그레이드 시 권장 순서
- Jackson 3로 완전히 마이그레이션
- Jackson 3를 사용하되 spring.jackson.use-jackson2-defaults=true 설정
- 일시적으로 Jackson 2를 유지하며 점진적으로 이전
Jackson 3 마이그레이션 시 꼭 알아야 할 주요 변경점
1. 패키지 변경
가장 먼저 마주칠 깨짐 포인트는 아래의 패키지 변경이다.
- 기존: com.fasterxml.jackson
- 변경: tools.jackson
단, jackson-annotations는 호환성을 위해 기존 패키지를 유지한다.
2. 기본 설정 변경
Jackson 3의 기본값은 Jackson 2와 다르다.
- 속성 정렬 기본값: MapperFeature.SORT_PROPERTIES_ALPHABETICALLY → true
- 날짜 직렬화: DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS → false(ISO-8601 문자열로 출력됨)
기존 테스트 코드에서 문자열 비교를 하는 경우 깨질 가능성이 높다.
가능한 경우 새로운 기본값을 수용하되, 초기에는 아래 속성을 적용하여 기존 Jackson 2 방식에 가깝게 유지할 수 있다.
spring.jackson.use-jackson2-defaults=true
3. Jackson 모듈 처리 방식 변화
기존 Jackson 2의 여러 모듈(parameter-names, datatype-jsr310 등)이 Jackson 3에 기본 포함되었다.
또한 Spring은 이제 JDK Service Loader 기반으로 모듈을 자동 탐색한다.
필요한 경우 JsonMapper.Builder를 통해 직접 설정할 수 있다.
4. ObjectMapper → JsonMapper
Jackson 3의 핵심 변화 중 하나는 불변 기반 API이다.
- Jackson 2: mutable ObjectMapper
- Jackson 3: immutable JsonMapper (ObjectMapper 상속)
Spring도 JsonMapper 사용을 기본으로 전환했다.
Spring Boot 3에서 사용하던 커스터마이징 방식은 아래와 같다.
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
return builder -> builder.indentOutput(true);
}
Spring Boot 4 + Jackson 3에서는 다음과 같이 변경된다.
@Bean
JsonMapperBuilderCustomizer jacksonCustomizer() {
return builder -> builder.enable(SerializationFeature.INDENT_OUTPUT);
}
Jackson 3 방식의 대표적인 예시: JsonView 사용 변화
Jackson 2와 Spring Framework 6에서는 JsonView를 사용하기 위해 MappingJacksonValue를 감싸야 했다.
예시:
var jacksonValue = new MappingJacksonValue(user);
jacksonValue.setSerializationView(Summary.class);
Spring 7에서는 JacksonJsonHttpMessageConverter가 SmartHttpMessageConverter를 구현하여 힌트 기반 처리 방식을 지원한다. 더 이상 MappingJacksonValue가 필요 없다.
변경된 방식:
var response = this.restClient.post().uri("http://localhost:8080/create")
.hint(JsonView.class.getName(), Summary.class).body(user)
.retrieve().body(String.class);
이제 힌트만 전달하면 JsonView가 동작한다.
Jackson 2를 잠시 계속 사용하는 방법
Jackson 3로 완전히 전환하지 못하는 경우에도 Jackson 2를 계속 사용할 수 있다.
방법은 다음과 같다.
- spring-boot-starter-jackson, starter-json에서 jackson 3 의존성 제외
- spring-boot-jackson2 의존성으로 대체
- 구성 속성은 spring.jackson 대신 spring.jackson2를 사용
Spring은 일정 기간 동안 Jackson 2 자동 설정을 유지하지만, 결국 제거될 예정이다.
Spring Security 7의 Jackson 3 지원
Spring Security 7.0은 Jackson 3 기반으로 전환되었으며 Jackson 2 지원은 deprecated 상태다.
또한 기본 타입 검증을 강화하여 보안성을 높였다.
PolymorphicTypeValidator 기반으로 Spring Security 타입만 기본 허용되며, 필요 시 커스텀 타입을 추가할 수 있다.
BasicPolymorphicTypeValidator.Builder typeValidatorBuilder =
BasicPolymorphicTypeValidator.builder()
.allowIfSubType(CustomGrantedAuthority.class);
JsonMapper mapper = JsonMapper.builder()
.addModules(SecurityJacksonModules.getModules(loader, typeValidatorBuilder))
.build();
Jackson 2로 직렬화된 객체는 Jackson 3에서도 역직렬화가 가능하여 호환성이 유지된다.
Spring Data 4에서의 Jackson 3 지원
Spring Data 4는 핵심 모듈 전반에서 Jackson 3를 지원한다.
다만 생태계 규모가 큰 만큼 모듈별 변화 사항도 확인할 필요가 있다.
Spring Data Commons
- Jackson 3 기본 사용, Jackson 2는 클래스패스 감지 시 폴백
- JacksonResourceReader, JacksonRepositoryPopulatorFactoryBean 추가
- XML namespace 기반 Jackson 2 사용 시 Java Config로 대체 필요
Spring Data Redis
- JacksonHashMapper, JacksonJsonRedisSerializer 등 Jackson 3 기반 버전 제공
- 기존 Jackson2ObjectReader/Writer는 명칭 정리 필요
Spring Data REST
- Jackson 2 모드 지원 제거
- Spring HATEOAS도 동일하게 Jackson 3 필수
Spring Data Couchbase, Elasticsearch, Drivers
- 내부적으로 Jackson 2를 쓰는 경우가 있으나 엔티티 직렬화에는 영향 없음
Jackson 3는 필수적인 변화이며 준비할 가치가 있다
Jackson 3는 더 나은 보안성, 향상된 기본 설정, 정교해진 API, 그리고 Spring과의 높은 일관성을 제공한다.
물론 패키지 변경, 기본값 차이, JsonMapper 도입 등 초기 마이그레이션 비용은 존재하지만, Spring 팀은 이를 부드럽게 넘어갈 수 있도록 다양한 지원책을 제공하고 있다.
- 점진적 적용(동시 사용 가능)
- Jackson 2 기본값 유지 옵션 제공
- Spring Security, Spring Data 등 모듈별 상세 가이드
- 확장된 지원 기간
Spring Boot 4와 Spring Framework 7로 올라가는 길목에서 Jackson 3는 피할 수 없는 변화다.
하지만 그만큼 안정적이고 미래 지향적인 JSON 처리 환경을 제공하며, 장기적으로는 프로젝트 유지보수성이 크게 향상될 것이다.
이번 글이 Jackson 3 도입을 준비하는 데 도움이 되었기를 바란다.
Introducing Jackson 3 support in Spring
This is a new blog post in the Road to GA series, this time sharing more details on the new Jackson 3 support, just a few days after Jackson 3.0.0 GA release, about to be introduced in Spring Boot 4 and related Spring portfolio projects. Jackson is by far
spring.io

'Spring' 카테고리의 다른 글
| Spring Boot 4.0 출시: 개발자가 꼭 알아야 할 변화와 실무 활용 포인트 (0) | 2025.12.02 |
|---|---|
| Beyond JSON: Spring AI에서 TOON·XML·CSV·YAML로 툴 응답 포맷을 전환하는 방법 (0) | 2025.12.01 |
| Spring AI와 Redis로 구현하는 시맨틱 캐싱: LLM 비용을 줄이는 가장 실용적인 방법 (0) | 2025.11.22 |
| AI가 AI를 평가하고 스스로 개선한다: Spring AI Recursive Advisors를 활용한 LLM-as-a-Judge 구축 (0) | 2025.11.16 |
| Spring Batch 6.0 마이그레이션 가이드: 꼭 알아야 할 변경 사항 (0) | 2025.08.20 |