본문 바로가기
spring

[Spring] Jackson

by goblin- 2024. 12. 17.

Jackson이란?

 

Jackson은 자바에서 JSON 데이터를 직렬화(Serialization)하고 역직렬화(Deserialization)하는 오픈소스 라이브러리입니다. **JSON (JavaScript Object Notation)**은 가볍고 가독성이 좋은 데이터 포맷으로, 대부분의 애플리케이션에서 데이터를 송수신할 때 사용됩니다.

 

Jackson은 빠른 성능, 유연성, 강력한 커스터마이징 덕분에 가장 널리 사용되는 JSON 처리 라이브러리 중 하나입니다. 스프링 프레임워크에서도 기본 JSON 직렬화/역직렬화 라이브러리로 Jackson을 사용합니다.

 

Jackson의 주요 모듈

 

Jackson은 크게 세 가지 주요 모듈로 나뉩니다.

 

1. Jackson Databind

핵심 모듈로, JSON과 자바 객체 간 직렬화역직렬화를 처리합니다.

ObjectMapper 클래스가 포함되어 있습니다.

ObjectMapper objectMapper = new ObjectMapper();

 

2. Jackson Core

JSON 데이터의 파싱생성을 위한 저수준 API를 제공합니다.

JsonParser, JsonGenerator와 같은 클래스가 포함됩니다.

성능을 극대화할 때 사용됩니다.

3. Jackson Annotations

JSON 직렬화/역직렬화 시 필드를 제외하거나 이름을 변경하는 등 세부 설정을 위해 어노테이션 기반 설정을 제공합니다.

예: @JsonProperty, @JsonIgnore

 

Jackson의 주요 기능

 

1. JSON과 자바 객체 간 변환

ObjectMapper를 사용하여 JSON 문자열을 자바 객체로 변환하거나 반대로 자바 객체를 JSON으로 변환합니다.

객체 → JSON 직렬화 (Serialization)

ObjectMapper objectMapper = new ObjectMapper();
Person person = new Person("John", 30);

String jsonString = objectMapper.writeValueAsString(person);
System.out.println(jsonString); // {"name":"John","age":30}

 

JSON → 객체 역직렬화 (Deserialization)

String json = "{\"name\":\"John\",\"age\":30}";
Person person = objectMapper.readValue(json, Person.class);
System.out.println(person.getName()); // John

 

2. JSON 트리 모델 (JsonNode)

JSON을 자바 객체가 아닌 트리 구조로 읽고 특정 값을 접근합니다.

String json = "{ \"name\": \"John\", \"age\": 30 }";
JsonNode rootNode = objectMapper.readTree(json);

String name = rootNode.path("name").asText();
int age = rootNode.path("age").asInt();

System.out.println(name); // John
System.out.println(age);  // 30

 

 

3. 컬렉션 및 제네릭 변환

JSON 데이터를 List, Map 등 다양한 자바 컬렉션으로 변환할 수 있습니다.

String jsonArray = "[{\"name\":\"John\"},{\"name\":\"Jane\"}]";
List<Person> people = objectMapper.readValue(jsonArray, new TypeReference<List<Person>>(){});

 

4. 어노테이션 활용 (커스터마이징)

Jackson은 다양한 어노테이션을 제공하여 JSON과 객체 매핑을 세부적으로 제어할 수 있습니다.

@JsonProperty: JSON 필드 이름 설정

@JsonIgnore: 특정 필드 무시

@JsonInclude: NULL 또는 특정 조건 필드 제외

@JsonFormat: 날짜 포맷 설정

예제:

public class Person {
    @JsonProperty("full_name")
    private String name;

    @JsonIgnore
    private int age;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate birthDate;
}

 

5. 스트림 기반 JSON 처리

Jackson은 스트림 API를 통해 메모리 사용을 최소화하면서 대량의 JSON 데이터를 처리할 수 있습니다.

JsonParser: JSON 데이터를 읽음

JsonGenerator: JSON 데이터를 생성

 

Jackson의 장점

 

1. 높은 성능

Jackson은 매우 빠르게 JSON 데이터를 처리하며, 대량의 데이터를 처리하는 데 유리합니다.

2. 강력한 유연성

다양한 어노테이션과 API를 통해 JSON과 객체 간 매핑을 정교하게 설정할 수 있습니다.

3. 스트림 API 제공

JSON 데이터를 스트림 기반으로 처리하여 메모리 사용량을 줄일 수 있습니다.

4. 다양한 데이터 포맷 지원

JSON 외에도 XML, YAML, CSV 등 다양한 데이터 포맷을 Jackson 확장 모듈을 통해 처리할 수 있습니다.

jackson-dataformat-xml: XML 지원

jackson-dataformat-yaml: YAML 지원

5. 스프링 프레임워크와의 완벽한 통합

Jackson은 스프링의 기본 JSON 변환 라이브러리로, REST API를 개발할 때 별도의 설정 없이도 사용할 수 있습니다

 

결론

 

Jackson은 자바 기반 JSON 라이브러리 중 가장 강력하고 유연한 라이브러리입니다. 빠른 성능과 다양한 기능을 제공하며, 특히 스프링 프레임워크에서 REST API 개발 시 JSON 변환을 담당합니다.

 

기본적인 ObjectMapper 사용법부터 고급 어노테이션 및 스트림 기반 처리까지 학습하면 대용량 JSON 데이터 처리나 복잡한 객체 매핑도 쉽게 구현할 수 있습니다.

'spring' 카테고리의 다른 글

[Spring] I/O 작업, CPU작업  (0) 2025.01.06
[Spring] Spring에서의 동기 비동기  (0) 2025.01.06
[Spring] JWT기반 로그인 예시  (0) 2024.12.11
[Spring] JPA 연관관계  (0) 2024.12.04
[Spring] JPA  (0) 2024.12.03