개요
Spring Framework 7.0 버전 출시가 올해 11월로 예정되어 있고, 다양한 변경사항이 있지만 그중 json을 처리하는데 많이 사용하는 Jackson 라이브러리에 대한 변경이 예정되어 있어서 어떤 변경사항이 있는지 알아본다. Spring Framework 6.x에서는 Jackson 2.x 버전을 사용했지만 Spring Framework 7.x 버전 이후로는 Jackson 3.x 버전으로 변경된다. (참고 https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-7.0-Release-Notes#jackson-3x-support)
변경사항
Jackson 3.x와 Spring Framework 7.x에 변경사항은 내용이 많아서 각각 아래 링크를 참고한다.
- Jackson : https://github.com/FasterXML/jackson/wiki/Jackson-Release-3.0#major-changesfeatures-in-30
- Spring Framework : https://github.com/spring-projects/spring-framework/issues/33798
Getting Started
Basic Requirements
글 작성일 기준 3.0.0-rc5 버전까지 릴리즈 되었고, 이후 릴리즈 일정은 아래 주소를 참고한다.
https://github.com/FasterXML/jackson/wiki/Jackson-Release-3.0#pre-releases
3.0.0 버전을 사용하기 위해서는 JDK 17 이산 버전이 필요하다. (참고 Spring Framework 7.x도 JDK 17 이상 필요)
Getting Jackson 3.0.0
이전 Jackson 버전과 동일하게 3.0.0 버전도 Maven Central 저장소에 게시되어 기존과 동일하게 사용할 수 있다.
단 groupId는 com.fasterxml.jackson에서 tools.jackson으로 변경되었다.
implementation('tools.jackson.core:jackson-databind:3.0.0-rc5')
Usage
의존성을 추가했으면 아래 코드와 같이 기존 사용법 그대로 코드를 작성할 수 있다.
단 import 구문의 패키지 주소는 tools.jackson으로 변경된 것을 확인할 수 있다.
jackson-annotation 패키지는 기존과 동일하게 com.fastxml.jackson 아래에 있다.
import tools.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonProperty;
public class JacksonTest {
public static void main(String[] args) {
final var mapper = new ObjectMapper();
var person = mapper.readValue("""
{
"name": "igooo",
"age": 20,
"hobbies": ["sing", "dance"]
}
""", Person.class};
System.out.println(person);
// Person[name=igooo, age=20, hobbies=[sing, dance]]
var json = mapper.writeValueAsString(person);
System.out.println(json);
// {"name":"igooo","age":20,"hobbies":["sing","dance"]}
}
}
하지만 3.0.0부터는 ObjectMapper를 약간 다르게 구성해야 한다. 별도의 설정이 필요하다면 빌드(builder) 패턴을 사용해야 한다. 2.x 버전에서는 선택 사항이었지만, ObejctMapper와 JsonFactory 같은 불변 객체들로 인해 3.x 버전에서는 빌드 패턴으로 생성하는 것이 필수사항이다.
빌더 패턴을 사용해서 ObjectMapper를 구성하면 아래와 같이 구성할 수 있다.
public class JacksonTest {
public static void main(String[] args) {
final var mapper = JsonMapper.builder()
.enable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY)
.enable(JsonWriteFeature.ESCAPE_NON_ASCII)
.builder();
var person = mapper.readValue("""
{
"name": "igooo",
"age": 20,
"hobbies": ["sing", "dance"]
}
""", Person.class};
System.out.println(person);
// Person[name=igooo, age=20, hobbies=[sing, dance]]
var json = mapper.writeValueAsString(person);
System.out.println(json);
// {"name":"igooo","age":20,"hobbies":["sing","dance"]}
}
}
추가적으로 json 처리시 더 이상 IOException에 대하여 명시적으로 처리하지 않아도 된다.
Jackson 3.0에서는 JacksonException이 RuntimeException을 상속받아 구현되었기 때문에 일반적인 상황에서 코드를 더 간결하게 작성할 수 있다. (기존에는 JacksonException은 IOException을 상속받았다.)
마무리
Spring Framework 7.x 버전도 올해 11월 출시 예정이고, JDK 25 버전도 하반기에 출시되면 새로운 버전에 다양한 기능을 사용하기 위해 개발 중인 프로젝트를 버전업 해야 할지 모른다. Jackson의 경우 많은 프로젝트에서 사용하고 있는 라이브러리라서 가능하다면 정식 출시 전에 미리 내용을 살펴보도록 하자.
'dev > spring' 카테고리의 다른 글
Spring Batch에서 JobParameter사용하기 (0) | 2025.06.17 |
---|---|
Spring Boot에서 Project Leyden을 사용하는 방법 (2) | 2025.06.09 |
Spring AI MCP with IntelliJ IDEA (0) | 2025.05.26 |
MCP with Spring Boot (0) | 2025.04.04 |
Spring Boot ShedLock in Action (with MongoDB) (0) | 2025.03.18 |