본문 바로가기
[ JAVA ]/JAVA RESTful API

[ RESTful API ] SimpleBeanPropertyFilter

by 환이s 2023. 8. 4.


오늘은 RESTful API 공부하면서 커스텀 직렬화 로직을 작성할 때 활용한 SimpleBeanPropertyFilter를 포스팅해 보겠습니다.

 

SimpleBeanPropertyFilter 란?

 

SimpleBeanPropertyFilter는 Jackson 라이브러리에서 제공하는 필터링 기능 중 하나로, Java 객체를 JSON으로 시리얼 라이즈 할 때 특정 필드를 선택적으로 포함하거나 제외하는 데 사용됩니다.

 

Java 객체를 JSON으로 변환할 때는 보통 객체의 모든 필드가 기본적으로 포함됩니다. 그러나 때로는 불필요한 정보를 제외하거나 민감한 정보를 숨겨야 하는 경우가 있는데, 이럴 때 SimpleBeanPropertyFilter를 사용하여 필요한 정보만을 선택적으로 포함하거나 제외할 수 있습니다.

 

SimpleBeanPropertyFilter는 기본적으로 직렬화 중에 포함할 필드의 이름을 지정하는 데 사용되는데, 필터는 FilterProvider와 함께 사용되며, FilterProvider는 객체의 필드마다 적용할 필더를 제공하는 역할을 합니다.

 

간단한 예시를 통해서 알아보겠습니다.

 

public class Person {
    private String name;
    private int age;
    private String email;
}

 

Person이라는 데이터를 담아주는 객체를 생성해서 JSON으로 변환하는 코드를 작성해 보겠습니다.

 

public class FilterExample {
    public static void main(String[] args) throws JsonProcessingException {
        Person person = new Person("John Doe", 30, "john.doe@example.com");

        ObjectMapper objectMapper = new ObjectMapper();
        FilterProvider filters = new SimpleFilterProvider()
                .addFilter("personFilter", SimpleBeanPropertyFilter.filterOutAllExcept("name", "age"));
        String json = objectMapper.writer(filters).writeValueAsString(person);

        System.out.println(json);
    }
}

 

위 코드는 Person 객체를 JSON으로 변환하고 있습니다.

 

SimpleBeanPropertyFilter.filterOutAllExcept("name", "age")를 사용하여 Person 객체의 name과 age 필드만을 포함하고 나머지 필드는 JSON에 제외시켰습니다. 따라서 결과적으로 email 필드는 JSON에 포함되지 않습니다.

 

출력 결과는 다음과 같습니다.

 

{"name":"John Doe","age":30}

 

SimpleBeanPropertyFilter는 컨트롤러에서 반환하는 JSON 응답을 제어하거나, 커스텀 직렬화 로직을 작성할 때 유용하게 사용될 수 있습니다.

 


장단점

 

[ 장점 ]

필드 선택적 포함 또는 제외:

 

 SimpleBeanPropertyFilter를 사용하면 객체의 필드를 선택적으로 포함하거나 제외하여 JSON 응답을 제어할 수 있습니다. 이를 통해 불필요한 정보를 제외하거나 보안에 민감한 정보를 숨길 수 있습니다.



간단하고 쉬운 사용:

 

 SimpleBeanPropertyFilter는 Jackson 라이브러리에서 기본적으로 제공되며, 사용법이 간단합니다. 객체의 필드 이름만 지정하면 원하는 필드를 선택할 수 있습니다.



다양한 필터 적용 가능:

 

 SimpleBeanPropertyFilter를 여러 필드에 대해 다양한 방식으로 사용하여 필터링 로직을 세밀하게 제어할 수 있습니다. 필드별로 다른 필터를 적용할 수 있습니다.

 



[ 단점 ]

필드 추가/제거의 어려움:

 

 SimpleBeanPropertyFilter는 필드 단위로 동작하므로, 객체에 새로운 필드가 추가되거나 필드명이 변경되는 경우에 매번 필터를 수정해야 합니다. 이는 유지보수 측면에서 번거로울 수 있습니다.



중복 필터링 로직:

 

 여러 컨트롤러나 뷰에서 동일한 필터링 로직을 적용해야 할 경우, 중복 코드가 발생할 수 있습니다. 이 경우 필터링 로직을 중앙에서 관리하는 방법을 고려해야 합니다.



오버헤드:

 

 필터링 로직을 적용하는 과정에서 추가적인 오버헤드가 발생할 수 있습니다. 특히 복잡한 필터링이 필요한 경우, 객체의 필드를 순회하며 필터링하는 작업이 성능에 영향을 미칠 수 있습니다.



커스텀 필터링의 한계:

 

 SimpleBeanPropertyFilter는 필드의 이름을 기준으로 동작하기 때문에, 보다 복잡한 커스텀 필터링 로직이 필요한 경우에는 다른 방식의 필터링 기능을 사용해야 합니다.

 


마치며

 

SimpleBeanPropertyFilter는 일반적인 필터링 요구사항을 쉽게 처리할 수 있는 간단하고 유용한 기능을 제공합니다. 

그러나 프로젝트의 복잡성과 성능 요구사항에 따라 다른 필터링 방식을 사용하는 것도 고려해야 합니다. 

 

필요에 따라 SimpleBeanPropertyFilter와 다른 Jackson 필터링 기능을 조합하여 필터링 로직을 유연하게 구현하는 것이 좋습니다.

728x90