🧩 Jakarta Validation API를 사용하여 객체의 유효성 검증하기
Jakarta Validation API는 Java Bean Validation의 최신 버전으로,
객체의 필드에 설정된 제약 조건(Constraints)을 검사하고, 유효하지 않은 경우에는 해당 오류를 보고.
→ Java 애플리케이션에서 데이터의 일관성과 유효성을 보장하는 데 필수적인 도구
Jakarta Validation API 개요
1. ValidatorFactory 생성
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
- 'Validation.buildDefaultValidatorFactory()' 메서드 : 기본 구성을 사용하여 `ValidatorFactory` 인스턴스를 생성
- 'ValidatorFactory' : Validator 객체를 생성
2. Validator 생성
Validator validator = factory.getValidator();
- 'ValidatorFactory'에서 'getValidator()' 메서드를 호출하여 실제 'Validator' 객체를 생성
- 'Validator' 객체는 실제 유효성 검사를 수행하는 인스턴스
3. 유효성 검증 수행
Set<ConstraintViolation<SignupRequestDto>> violations = validator.validate(signupRequestDto);
- 'Validator' 객체의 'validate()' 메서드를 사용하여 주어진 객체(signupRequestDto)의 유효성을 검증
- 메서드는 `Set<ConstraintViolation<SignupRequestDto>>`을 반환하며, 이는 검증 결과로 발생한 모든 오류를 포함함
4. ConstraintViolation 객체
'ConstraintViolation' 객체는 유효성 검사에서 발생한 각 오류를 나타냄
- 'getPropertyPath()': 오류가 발생한 속성의 경로를 나타내는 객체.
- 'getMessage()': 발생한 오류에 대한 메시지.
- 'getInvalidValue()': 유효성 검사를 실패한 속성의 값.
주요 활용법
- 유효성 검사: 주어진 객체의 각 필드에 대해 정의된 제약 조건(Annotation 기반)을 검사
- 오류 처리: 검증 결과인 'Set<ConstraintViolation>'을 통해 각 오류를 처리하고, 클라이언트에게 적절한 메시지를 제공
- 통합: Spring Framework, Jakarta EE, Micronaut 등 다양한 Java 프레임워크와 통합하여 사용가능
- 다국어 지원: 'Locale'을 설정하여 메시지를 다국어로 제공
Locale.setDefault(Locale.KOREAN);
제약 조건(Constraints)
- @NotNull, @NotEmpty, @NotBlank: 필드가 null이 아니거나 값이 비어 있지 않아야 함
- @Size(min, max): 필드의 길이나 크기가 주어진 범위 내여야 함
- @Pattern(regexp): 필드의 값이 주어진 정규 표현식과 일치해야 함
- @Email: 필드의 값이 유효한 이메일 주소 형식이어야 함
- @Min, @Max: 숫자 필드의 최소값과 최대값
- @Valid: 중첩된 객체(객체 그래프)의 유효성을 검사할 때 사용
장점
- 코드 중복 최소화: 객체의 유효성 검증 로직을 한 곳에 집중하여 중복 코드를 줄임
- 강력한 검증: 제약 조건에 따라 자동으로 검증을 수행하므로 일관된 데이터 검증이 가능
- 확장성: 사용자 정의 제약 조건을 만들어 필요에 맞게 유효성 검사를 확장 가능