@Validation 어노테이션을 사용하면 좋은 점
Java에서는 2009년부터 Bean Validation이라는 데이터 유효성 검사 프레임워크를 제공
Bean Validation은
- 애플리케이션 전체에 유효성 검사 로직이 분산되어 있는 문제
- 코드 중복이 심한 문제
- 비즈니스 로직이 섞여 검사 로직 추적이 어렵고 앱이 복잡해지는 문제
- 수정하기 어렵고, 오류 발생 가능성이 큰 문제
를 해결하기 위해 도메인 모델(Domain Model)에 어노테이션(Annotation)을 정의할 수 있도록 해주는 것
build.gradle에 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-validation'
제약 설정과 검사
각 제약조건은 모든 액세스 유형(public, private 등)의 필드에 적용될 수 있음.
정적 필드에 대한 제약조건은 지원되지 않음.
컨테이너 요소에 대해서 지정도 가능
@Length
: 길이 설정@NotBlank
: null + 빈문자열 안돼@NotNull
: null 안돼
ex.
public class CreateContact {
@Length(max = 64) // 최대 길이 64
@NotBlank // 빈문자열은 안됨
private String uid;
@NotNull // null 안됨
private ContactType contactType;
@Length(max = 1_600) // 최대 길이 1,600
private String contact;
}
Spring에서 사용하기
1. Controller에서 @Valid 사용
검사를 진행할 곳에 @Valid
를 추가한다
public Response createContact(@Valid CreateContact createContact) { // 메서드 호출 시 유효성 검사 진행
2. Service나 Bean에서 사용
클래스 전에 @Validated
어노테이션을 추가해주고, 검사하고자 하는 메소드에 @Valid
어노테이션을 추가한다.
@Validated // 여기에 추가
@Service
public class ContactService {
public void createContact(@Valid CreateContact createContact) { // '@Valid'가 설정된 메서드가 호출될 때 유효성 검사를 진행한다.
// Do Something
}
}
데이터 유효성 검사 진행 시 검사가 중복으로 실행되지 않도록 해야 함! 여러번 유효성 검사가 실행되면 성능에 영향을 미칠 수 있음
@Validated 로 발생하는 예외처리
ConstraintViolationException.class
의 예외 발생
출처
'Development > Spring' 카테고리의 다른 글
Java Optional 바르게 쓰기 (0) | 2021.09.23 |
---|---|
Unit Test에서 AssertThat을 사용 (0) | 2021.09.23 |
테스트 코드 작성 시 유의사항 (0) | 2021.09.23 |
빠르게 실패 vs 안전하게 실패 (0) | 2021.09.23 |
Spring Security 기본 개념과 동작구조 이해 (0) | 2021.08.24 |
댓글