Jackson 3로 마이그레이션할 때 주요하게 변경된 사항들을 다음과 같이 요약할 수 있습니다. Jackson 3는 Jackson 2에 비해 **모듈성, 불변성(Immutability), 기본 설정, 패키지 구조** 등 전반적인 아키텍처에서 큰 변화가 있었습니다.
---
## 📦 1. 패키지 및 아티팩트 이름 변경 (가장 큰 Breaking Change)
Jackson 3 마이그레이션에서 마주할 가장 큰 변화는 바로 패키지 이름과 Maven 그룹 ID의 변경입니다.
* **Maven 그룹 ID 변경:**
* **2.x:** `com.fasterxml.jackson`
* **3.x:** `tools.jackson` (대부분의 컴포넌트)
* **Java 패키지 이름 변경:**
* **2.x:** `com.fasterxml.jackson`
* **3.x:** `tools.jackson` (대부분의 컴포넌트)
* **예외: `jackson-annotations`**
* 하위 호환성을 유지하기 위해 **`jackson-annotations`**의 그룹 ID와 패키지 이름은 **2.x를 그대로 사용**합니다. (`com.fasterxml.jackson.core:jackson-annotations`).
---
## 🛠️ 2. 아키텍처 및 코어 엔티티 변경
### 불변성 및 빌더 패턴 강화
핵심 엔티티(예: `ObjectMapper`의 기반이 되는 `JsonMapper`)는 **불변성(Immutability)**을 강화하고 **빌더(Builder)** 스타일의 생성 방식을 기본으로 채택했습니다. 이는 설정의 안정성을 높입니다.
### 코어 클래스 이름 변경 및 통일
* 이전의 `JsonFactory`는 **`TokenStreamFactory`**로 변경 및 통합되었습니다.
* `ObjectMapper`는 `JsonMapper` 또는 특정 포맷에 특화된 서브클래스(예: `XmlMapper`)를 사용하는 방식으로 변경되어, 포맷별로 보다 명확하게 분리되었습니다.
### 모듈 통합 (Java 8 관련)
Jackson 2.x에서 별도의 모듈로 사용해야 했던 세 가지 Java 8 관련 모듈이 **`jackson-databind`에 내장**되어 별도로 등록할 필요가 없어졌습니다.
* `jackson-module-parameter-names` (생성자 파라미터 이름 자동 감지)
* `jackson-datatype-jdk8` (`Optional`, `OptionalDouble` 등 지원)
* `jackson-datatype-jsr310` (`java.time` (날짜/시간) 타입 지원)
---
## ⚙️ 3. 기본 설정 변경 (Deserialization / Serialization)
Jackson 3에서는 일부 핵심 설정의 기본값이 변경되어, 마이그레이션 시 기존 테스트에 영향을 줄 수 있습니다.
| 설정 항목 (Jackson 3) | 2.x 기본값 | 3.x 기본값 | 주요 변경 사항 |
| :---: | :---: | :---: | :---: |
| `MapperFeature.SORT_PROPERTIES_ALPHABETICALLY` | `false` | **`true`** | **속성이 알파벳 순으로 정렬**되어 직렬화됩니다. JSON 문자열 비교에 영향을 줍니다. |
| `DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS` (구 `SerializationFeature`) | `true` | **`false`** | 날짜가 **ISO-8601 문자열**로 직렬화됩니다. (기존: 숫자 타임스탬프) |
| `JsonWriteFeature.ESCAPE_FORWARD_SLASHES` | `false` | **`false`** (rc8에서 이전 기본값으로 돌아옴) | `/` 문자 이스케이프 기본 설정이 유지되었습니다. |
---
## 🗑️ 4. 제거된 기능 및 메소드
Jackson 2.x에서 **deprecated(사용 중단)** 처리되었던 모든 메서드와 기능이 Jackson 3에서는 **완전히 제거**되었습니다.
* **Format Auto-detection 제거:** (JSON, XML, Smile 등) 포맷 자동 감지 기능이 널리 사용되지 않아 제거되었습니다.
* **핵심 엔티티의 변경:** `JsonFactory`, `ObjectMapper` 등의 코어 엔티티가 변경되면서, 이와 관련된 레거시 API들이 대거 정리되었습니다.
Jackson 3는 Spring Framework 7.0 및 Spring Boot 4.0에서 기본 JSON 처리 라이브러리로 채택될 예정이므로, 불변 객체와 모듈성 강화에 초점을 맞춘 중요한 업그레이드입니다.
---
Jackson 3 마이그레이션을 위한 구체적인 코드 변환 가이드가 필요하신가요?
댓글
댓글 쓰기