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 |