본문 바로가기
Development/Spring

@Validation 어노테이션

by 메정 2021. 9. 23.

@Validation 어노테이션을 사용하면 좋은 점

Java에서는 2009년부터 Bean Validation이라는 데이터 유효성 검사 프레임워크를 제공

Bean Validation은

  1. 애플리케이션 전체에 유효성 검사 로직이 분산되어 있는 문제
  2. 코드 중복이 심한 문제
  3. 비즈니스 로직이 섞여 검사 로직 추적이 어렵고 앱이 복잡해지는 문제
  4. 수정하기 어렵고, 오류 발생 가능성이 큰 문제

를 해결하기 위해 도메인 모델(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의 예외 발생

출처

댓글