Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

희디비

[Spring] 빈 검증 ( Bean Validation ) 본문

Spring

[Spring] 빈 검증 ( Bean Validation )

희디비 2024. 9. 3. 20:51

💡 빈 검증 ( Bean Vaildation )

 

Validator를  등록하여 검증 하는 방식은 따로 클래스를 만들고 등록 하는 과정이 필요합니다.

이 과정을 없애기 위해 스프링부트는 글로벌 Validator를 등록 합니다.

그러므로 따로 Validator를 등록 할 필요가 없습니다.

 

또한 코드를 통해 검증 하는 방식을 빈 어노테이션을 통해 검증 하여  검증 코드를 작성 하지 않고,

빈 어노에티션을 통해 검증 할 수 있습니다.

 

🙄 빈 검증 기능을 어떻게 사용하나요?

 

검증 하고자 하는 객체에 원하는 검증 어노테이션을 붙이고,

컨트롤러에서 검증 객체 앞에 @Valid or @Validated 어노테이션을 붙이면 됩니다.

그러면 해당 객체의 어노테이션을 통해 검증을 하게 됩니다.

 

빈 검증 단계는 다음과 같습니다.

1. @ModelAttribute 를 통해 Item 객체 필드에 바인딩을 합니다.

2. 바인딩에 성공한 필드만 @Validation 검증을 합니다.

3. 검증에 실패 한다면 BindingResult에 error가 담기게 됩니다.

 

🙄  BindingResult 값이 어떻게 담기나요?

 

codes를 보면 messageCodesResolver가 동작 한 것을 알 수 있습니다.

그레서 message를 바꾸고 싶다면 메시지 기능을 사용 하여 바꿀 수 있습니다.

 

 

🙄  ObjectError 는 어떻게 검증 하나요?

 

@ScriptAssert를 사용해 글로벌 에러를 검증 할 수 있습니다.

하지만 글로벌 에러는 현재 객체 뿐만 아니라 다른 객체의 값, 혹은 DB 조회등 복잡한 방식을 사용 할 수 있기 때문에

@ScriptAssert 보단 BindingResult.reject를 사용 하는 것을 권장 합니다.

 

 

💥 등록과 수정을 다르게 검증 하고 싶어요.

 

groups 라는 기능을 지원 하는데, 인터페이스를 만들고 검증을 원하는 필드에 groups를 지정 하면 됩니다.

@Validated(검증인터페이스.class)를 지정 하면 해당 그룹이 지정된 필드만 검증 어노테이션만 동작 하게 됩니다.

하지만 이러한 방식은 도메인 객체를 보기 힘들게 만들고,

객체의 등록과 수정에 사용 되는 필드는 보통 같지 않기  때문에 추천 되지 않습니다.

 

💥 등록과 수정 객체를 나누기

 

등록 객체를 따로 분리 함으로써 객체의 검증이 뚜렷하고 등록 할 때 어떤 필드를 사용 하는지 보이게 됩니다.

 

💥  HTTP 메시지 컨버터

 

API를 받을땐 @RequestBody를 사용 하게 되는데 이때 @Validated를 사용 하면 문제가 있습니다.

@ModelAttribute는 하나의 필드씩 접근하여 값을 매핑 하는데,

@RequestBody는 한번에 매핑을 시도 합니다.

 

 

int price에 String 값이 들어 오지 못하고 오류를 내고 컨트롤러가 호출 되지 못합니다.

그레서 defaultExceptionresolver가 에러 메시지를 보여 준 것 입니다.

예외처리에 대한 것은 다음 글에서 알아 보겠습니다.

 

위 글은 영한님의 mvc2를 보고 작성 하였습니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런

김영한 | 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습

www.inflearn.com