Spring

(Spring) Jackson과 Spring에서의 활용

lastdove 2024. 10. 28. 20:51

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를 사용합니다.
  • 커스텀 직렬화/역직렬화 : 복잡한 객체를 처리할 때는 JsonSerializerJsonDeserializer 인터페이스를 구현할 수 있습니다.
  • 에러 처리 : JSON 파싱 과정에서 예외가 발생할 수 있으므로 try-catch 또는 예외 처리를 적절히 추가합니다.

6. 정리

Jackson은 Spring Boot와 자연스럽게 통합되어 JSON 처리에 많은 편리함을 제공합니다. 직접 파싱 코드를 작성하지 않고도 직렬화/역직렬화를 자동화할 수 있으며, 다양한 설정을 통해 복잡한 객체도 손쉽게 처리할 수 있습니다.