본문 바로가기
Today I Learned/Java

[Java] Jackson #1

by dbs_ 2025. 8. 10.

 

1. Jackson이란?

  • 목적
    • Java 객체를 JSON(또는 다른 포맷)으로 직렬화하거나, JSON을 Java 객체로 역직렬화하기 위한 오픈소스 라이브러리.
  • 특징
    • 빠른 성능(스트리밍 API 기반)
    • 풍부한 애노테이션과 플러그인 구조
    • XML·YAML·CSV·CBOR·Smile 등 다양한 포맷 모듈 제공

 

2. 핵심 모듈 구조

모듈 Maven 역할
jackson-core com.fasterxml.jackson.core:jackson-core 저수준 파서/제너레이터(API)
jackson-databind com.fasterxml.jackson.core:jackson-databind ObjectMapper 등 고수준 바인딩 기능
jackson-annotations com.fasterxml.jackson.core:jackson-annotations 직렬화 제어용 애노테이션 모음

 

3. ObjectMapper 기본 사용 예시

ObjectMapper mapper = new ObjectMapper();

// (1) 객체 → JSON 문자열
String json = mapper.writeValueAsString(user);

// (2) JSON → 객체
User user = mapper.readValue(jsonStr, User.class);

 

4. Jackson이 JSON을 다루는 방식 3종

  1. Streaming API (저수준, 토큰 기반)
    • JsonParser(읽기) / JsonGenerator(쓰기)로 JSON을 토큰 단위로 흘려보내며 처리.
    • 메모리 아껴야 할 때, 빠른 성능이 최우선일 때 사용하기 좋음.
  2. Tree Model (중간 수준, 문서=트리)
    • JsonNode(예: ObjectNode, ArrayNode)로 DOM처럼 메모리에 올려 탐색/수정.
    • 유연하지만 대용량엔 메모리 부담
  3. Data Binding (고수준, POJO 매핑)
    • ObjectMapper로 POJO ↔ JSON 자동 매핑.
    • 스키마 변화에 민감, JPA 프록시/순환참조 등 주의 필요.
    • 가장 많이 쓰이는 방식