1. Jackson이란?
Jackson은 Java에서 JSON 데이터를 쉽게 처리하기 위한 라이브러리입니다. 주로 객체(Object)를 JSON 문자열로 변환(직렬화)하거나, JSON 문자열을 객체로 변환(역직렬화)할 때 사용됩니다. 이 라이브러리를 통해 애플리케이션이 외부 시스템과 JSON 형식으로 데이터를 주고받을 수 있습니다.
2. Spring에서의 Jackson 지원
Spring은 3.0 버전부터 Jackson을 기본 JSON 처리기로 채택했습니다. 이를 통해 개발자가 직접 JSON 파싱 코드를 작성하지 않아도, @RestController
와 @RequestMapping
어노테이션을 활용할 때 Jackson이 자동으로 객체와 JSON을 변환합니다.
Spring Boot의 spring-boot-starter-web
의존성에는 Jackson이 기본 포함되어 있으므로 추가적인 설정 없이 바로 사용할 수 있습니다.
3. Jackson의 주요 기능
- 직렬화(Serialization) : 객체를 JSON 문자열로 변환
ObjectMapper mapper = new ObjectMapper();
User user = new User("홍길동", "gildong@example.com");
String jsonString = mapper.writeValueAsString(user);
System.out.println(jsonString);
// 출력: {"name":"홍길동","email":"gildong@example.com"}
- 역직렬화(Deserialization) : JSON 문자열을 객체로 변환
String json = "{\"name\":\"홍길동\",\"email\":\"gildong@example.com\"}";
User user = mapper.readValue(json, User.class);
System.out.println(user.getName()); // 출력: 홍길동
4. Spring과 Jackson 통합 예시
Jackson은 컨트롤러에서 반환되는 객체를 JSON으로 자동 변환합니다. 아래와 같은 예제에서 User
객체는 자동으로 JSON 형태로 변환되어 클라이언트에게 응답됩니다:
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return new User("홍길동", "gildong@example.com");
}
}
이 코드를 실행하면 클라이언트는 다음과 같은 JSON 응답을 받습니다
{
"name": "홍길동",
"email": "gildong@example.com"
}
5. 주의사항 및 TIP
- 무한 참조 방지 : 객체 간 상호 참조로 인해 발생하는 순환 참조 문제를 해결하려면
@JsonManagedReference
와@JsonBackReference
또는@JsonIgnoreProperties
를 사용합니다. - 커스텀 직렬화/역직렬화 : 복잡한 객체를 처리할 때는
JsonSerializer
와JsonDeserializer
인터페이스를 구현할 수 있습니다. - 에러 처리 : JSON 파싱 과정에서 예외가 발생할 수 있으므로 try-catch 또는 예외 처리를 적절히 추가합니다.
6. 정리
Jackson은 Spring Boot와 자연스럽게 통합되어 JSON 처리에 많은 편리함을 제공합니다. 직접 파싱 코드를 작성하지 않고도 직렬화/역직렬화를 자동화할 수 있으며, 다양한 설정을 통해 복잡한 객체도 손쉽게 처리할 수 있습니다.
'Spring' 카테고리의 다른 글
(Spring) HTTP 데이터 객체 처리 및 CRUD 구현하기 (0) | 2024.10.30 |
---|---|
(Spring) Path Variable & Request Param 차이점 (0) | 2024.10.29 |
(Spring) 삭제 관련 Cascade 사용 여부에 따른 정리 (0) | 2024.10.24 |
(Spring) Controller & RestController란 무엇인가 (0) | 2024.10.23 |
(Spring) DI와 IOC 이해하기 (0) | 2024.10.18 |