오늘은 Spring Framework에서 제공해 주는 MappingJacksonValue 클래스에 대해 포스팅을 해보겠습니다.
MappingJacksonValue 란?
MappingJacksonValue 는 JSON Serialization(직렬화)을 처리하는 데 사용되며, 주로 Spring MVC(혹은 Spring WebFlux) 기반의 웹 애플리케이션에서 Java 객체를 JSON으로 변환하거나, 반대로 JSON 데이터를 Java 객체로 변환하는 데 사용됩니다.
Spring에서는 기본적으로 Jackson 라이브러리를 내부적으로 사용하여 JSOn 데이터를 처리하는데, Jackson은 Java 객체를 JSON으로 변환하고, JSON 데이터를 Java 객체로 변환하는데 매우 효율적이고 강력한 라이브러리입니다.
일반적으로 컨트롤러 메서드에서 반환되는 데이터를 래핑하는데 사용되며, 이를 통해 특정 필터링 기능이나 시리얼라이제이션(Serialization) 설정을 적용하여 응답 데이터를 제어할 수 있습니다.
※ Serialization(직렬화)
데이터 시리얼라이제이션은 어떤 환경의 데이터 구조를 다른 환경에 전송 및 저장하기 위해 나중에 재구성할 수 있는 바이트의 포맷으로 변환하는 과정을 말합니다. 반대로, 일련의 바이트로부터 데이터 구조를 추출하는 일은 역직렬화(Deserialization)라고 합니다.
예를 들어, 다음과 같이 사용할 수 있습니다.
@RestController
public class MyController {
@GetMapping("/data")
public MappingJacksonValue getData() {
// 어떤 데이터를 가져오는 로직
MyData data = fetchData();
// MappingJacksonValue로 래핑하여 필터링 또는 시리얼라이제이션 설정을 적용할 수 있음
MappingJacksonValue jacksonValue = new MappingJacksonValue(data);
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.filterOutAllExcept("field1", "field2");
FilterProvider filters = new SimpleFilterProvider().addFilter("myDataFilter", filter);
jacksonValue.setFilters(filters);
return jacksonValue;
}
}
'MyData' 클래스의 'field1' 과 'field2'만 JSON 응답에 포함되도록 필터링하고 있습니다.
'myDataFilter'는 'MyData' 클래스에 등록된 Jackson 필터의 이름입니다. 필터 이름은 클래스에 @JsonFilter("myDataFilter")와 같이 등록되어야 합니다.
이렇게 'MappingJacksonValue '를 사용하면 컨트롤러 메서드에서 반환되는 데이터를 세밀하게 제어할 수 있어, 특정 사용자나 상황에 따라 다른 응답을 제공할 때 유용합니다.
MappingJacksonValue 장단점
[ 장점 ]
필터링 및 시리얼라이제이션 제어:
MappingJacksonValue를 사용하면 특정 필드만 포함하거나 제외하여 JSON 응답을 제어할 수 있습니다. 불필요한 데이터를 제외하거나 민감한 정보를 숨기는 등의 요구사항을 간단하게 처리할 수 있습니다.
다중 시리얼라이제이션 룰:
동일한 데이터 모델을 다른 형식의 JSON으로 변환해야 할 때 유용합니다. 예를 들어, 같은 객체를 다른 응답 형식으로 변환하여 웹과 모바일 앱에서 사용하는 경우에 각각의 요구사항에 맞는 JSON을 제공할 수 있습니다.
관심사의 분리:
MappingJacksonValue를 사용하여 컨트롤러에서 JSON 시리얼라이제이션 로직을 분리하면 코드가 더욱 읽기 쉽고 유지보수가 쉬워집니다. 필터나 시리얼라이제이션 설정과 같은 로직을 컨트롤러 메서드와 분리하여 컨트롤러는 비즈니스 로직에 집중할 수 있습니다.
[ 단점 ]
복잡성:
MappingJacksonValue를 사용하면 컨트롤러 메서드의 반환 유형이 더 복잡해지고, 코드의 가독성이 감소할 수 있습니다. 특히 복잡한 로직을 적용해야 하는 경우 코드가 복잡해질 수 있습니다.
오류 가능성:
MappingJacksonValue를 잘못 사용하거나 설정하는 경우, 올바르지 않은 JSON 응답이 생성될 수 있습니다. 필터링이나 설정을 오용하거나 잘못 구성하면 예상치 못한 결과가 발생할 수 있습니다.
성능 영향:
MappingJacksonValue는 일부 추가 로직을 필요로 하기 때문에, 불필요한 상황에서 사용하면 약간의 성능 영향이 발생할 수 있습니다. 하지만 대부분의 경우에는 무시할 수준의 성능 차이입니다.
결론적으로, MappingJacksonValue는 Spring 애플리케이션에서 JSON 데이터를 세밀하게 제어해야 할 때 유용하게 사용될 수 있습니다. 그러나 사용 시 주의해서 코드를 작성해야 하며, 복잡성과 성능에 대해 고려해야 합니다. 가독성과 유지보수성을 유지하기 위해 필요한 경우에만 사용하는 것이 좋습니다.
마치며
오늘은 MappingJacksonValue 클래스에 대해 알아봤습니다.
다음 포스팅으로 뵙겠습니다.
'[ JAVA ] > JAVA Spring' 카테고리의 다른 글
[ Spring Boot ] Bean Validation (0) | 2023.12.29 |
---|---|
[ Spring ] 싱글톤 컨테이너 (0) | 2023.08.07 |
[ Spring ] 페이지네이션 코드 해석 및 기록 (1) | 2023.06.19 |
[ Spring ] Component Scan (0) | 2023.05.26 |
[ Spring ] AOP 개념 및 설정 (0) | 2023.05.24 |