본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : Bean Validation 한계와 해결하기 위한 groups

by 오주현 2022. 2. 16.
반응형

Bean Validation 한계와 해결하기 위한 groups


만약 변경 사항이 들어와서

 

@Max(value = 9999) //수정 요구사항 추가
private Integer quantity;

수정 할 때에는 한계값이 없어야 한다.

 

간단하게 여기서 어노테이션을 수정할 수 있겠지 싶지만 사실 그렇게 되면 등록을 할 때에도 한계값이 사라지기 때문에 요구사항에 맞지 않게 된다.

 

어노테이션을 분리해서 적용해야 하는데 그렇게 하기 위한 기능이 groups 기능이라고 보면 된다.

 

먼저 인터페이스 두 개를 만들어주었다.

public interface SaveCheck {
}
public interface UpdateCheck {
}

인터페이스 자체에 코드가 들어가진 않는다.

 

@Max(value = 9999, groups = {SaveCheck.class}) //수정 요구사항 추가

이걸 이제 이런식으로 groups스 기능을 통해 나누어 적용할 수 있게 된다.

물론 사용하기 위해서는 컨트롤러에서 등록을 해줘야 한다.

 

public String editV2(@PathVariable Long itemId, @Validated(UpdateCheck.class) @ModelAttribute Item
    item, BindingResult bindingResult) {

수정시에만 사용하려면 UpdateCheck.class를 사용하도록 등록했다.

 

이렇게 되면 최대 값을 정한 SaveCheck.class는 등록시에만 적용이 되도록 하였고, 수정시에만 적용이 되도록 한 UpdateCheck.class는 사용하지 않았으므로 등록 할 때에는 값의 제한이 있고, 수정 할 때에는 값의 제한이 없게 된다.

 

참고로 @Valid 에는 groups를 적용할 수 있는 기능이 없으므로 @Validated를 사용해야 한다.

 

하지만 이렇게 groups 기능을 사용하면 등록과 수정시에 각각 다른 검증을 할 수 있는 장점이 있지만 복잡도가 올라가기 때문에 잘 사용하지 않는다. 현업에서는 등록용 폼 객체와 수정용 폼 객체를 분리해서 사용하는 편이다.


스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.

반응형

댓글