
안녕하세요.
오늘은 스프링부트의 중요한 키워드 중 하나인 Validation에 알아볼게요.
Validation
Validation(검증, 유효화/유효성)의 뜻으로 즉 유효성 검증을 위해 사용하는 스프링부트의 키워드
잘못된 입력값(DIO)에 대한 DB 저장 방지(데이터 무결성)와
사용자의 잘못된 입력을 빠르게 알려줌으로써 UX가 향상돼요.
주요 어노테이션
Validation의 어노테이션은 message 속성을 가지고 있어
검증 실패 시 사용자에게 보여줄 오류 메시지를 직접 지정해 줄 수 있어요.
1) @NotNull
- 값이 null이 아니어야 함
- 단, 빈 문자열("")은 허용됨
2) @NotEmpty
- 값이 null이 아니고 빈 문자열도 아님
- 단, 공백(" ")은 허용됨 @NotNull보다 업격함
3) @NotBlank
- 값이 null도 아니고, 빈 문자열도 아니고, 공백만 있는 경우도 아님
- 문자열 필드 검증 시 가장 많이 사용
cf) NonNull
: Lombok 어노테이션
- null 값이 아니어야 함
- 반드시 초기화가 이루어져야하기 때문에 @RequiredArgsConstructor와 주로 사용
4) @Size
- 문자열, 배열, List, Set 등의 길이(크기) 제한
- @Size(min = 5, max = 10): 최소/최대값 설정 가능
5) @Min(0) / @Max(100)
- 숫자 범위 지정 (나이 지정)
- @Min(value = 0) / @Max(value = 100)
6) @Email
- 이메일 형식 검증
7) @Pattern
- 정규표현식으로 직접 패턴 검증 (사용자 정의 무결성)
8) @Positive, @PositiveOrZero, @Negative, @NegativeOrZero
- 양수, 음수만 허용 (0포함 여부 선택 가능)
9) @Future, @Past
- 날짜 검증
- @Future: 예약일
- @Past: 생년월일
사용 예시
1. DTO(Data Transfer Object)에 어노테이션 적용(검증)
import jakarta.validation.constraints.*;
public class UserDto {
@NotBlank(message = "이름은 필수입니다.")
private String name;
@Email(message = "올바른 이메일 형식이어야 합니다.")
private String email;
@Min(value = 18, message = "나이는 18세 이상이어야 합니다.")
private int age;
// getter/setter 생략
}
2. Controller에서 적용(검증)
import org.springframework.validation.annotation.Validated;
import jakarta.validation.Valid;
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping
public ResponseEntity<String> createUser(@RequestBody @Valid UserDto userDto) {
// 유효성 검사 통과 시 실행
return ResponseEntity.ok("사용자 생성 완료");
}
}
+) @Valid 또는 @Validation과 함께 적용
++
@Validation 메서드 수준에서 검증할 때 사용.
@Valid 필드나 파라미터에 적용하여 검증 수행.
추가적으로 중첩 객체에도 @Valid를 붙으면 내부 객체도 검증 가능.
3. 입력값이 조건을 만족하지 못하면 자동 예외 발생 (Method Argument Not Valid Exception)
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>>
handleValidationExceptions(MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getFieldErrors().forEach(error ->
errors.put(error.getField(), error.getDefaultMessage()));
return ResponseEntity.badRequest().body(errors);
}
}
+) @RestControllerAdvice 또는 GlobalExceptionHandler로 처리 가능

여기까지 스프링부트의 중요한 키워드 중 하나인 Validation에 알아봤는데요.
잘 활용한다면 코드의 안정성이 향상될 것 같아요.
'Backend > Java' 카테고리의 다른 글
| Java - List vs Set (0) | 2025.08.25 |
|---|---|
| Spring Boot - 필터링 & 검색 기능 (0) | 2025.08.22 |
| Spring Boot (1) | 2025.08.17 |
| Java - JDBC (3) | 2025.08.13 |
| 스트림(Stream) API (5) | 2025.07.29 |