Bean Validation 의존 관계 추가
build.gradle 에 의존관계 추가
implementation 'org.springframework.boot:spring-boot-starter-validation'
spring-boot-starter-validation 의존관계를 추가하면 아래와 같이 라이브러리가 추가 됨.
jakarta.validation-api : Bean Validation 인터페이스
hibernate-validator 구현체



Bean Validation 등록/수정에 따른 대응에 한계가 있어 Groups 사용
한계 : 대표적으로 등록시 Key(Unique Value)가 필요 없지만 수정시 Key(Unique Value)가 필요 하다. 이럴 경우 같은 Validation을 처리 할 경우 대응이 되지 않음.

Group 적용 코드 (사실 실무에서 잘 사용하지 않음)
#Model 코드
@Data
public class Item {
@NotNull(groups = UpdateCheck.class)
private Long id;
@NotBlank(groups = {SaveCheck.class, UpdateCheck.class})
private String itemName;
@NotNull(groups = {SaveCheck.class, UpdateCheck.class})
@Range(min = 1000, max = 1000000, groups = {SaveCheck.class, UpdateCheck.class})
private Integer price;
@NotNull(groups = {SaveCheck.class, UpdateCheck.class})
@Max(value = 9999, groups = SaveCheck.class)
private Integer quantity;
public Item(String itemName, Integer price, Integer quantity) {
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
}
#등록 코드
@PostMapping("/add")
public String addItemV2(@Validated(SaveCheck.class) @ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes) {
}
#수정 코드
@PostMapping("/{itemId}/edit")
public String editV2(@PathVariable Long itemId, @Validated(UpdateCheck.class) @ModelAttribute Item item, BindingResult bindingResult) {
}
@Validated 에 클래스 적용 로직이 다르다.

해당 개념이 DTO(Data Transfer Object)
그냥 기존 구현처리대로 DTO 만들어서 상속 잘 받아서 해당 객체가 DataBase 까지
처리하는 방식을 설명 함.
기존 코드를 최대한 변경하지 않고 등록/수정이 같은 처리가 되도록 고민하는게 핵심.
위의 모든 처리는 @RestController 의 @RequestBody에도 적용 됨.
출처 김영한의 스프링 로드맵 - 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술