Backend/Java

Spring Boot - Validation

개발자의 첫 걸음 2025. 8. 20. 18:00

안녕하세요.

 

오늘은 스프링부트의 중요한 키워드 중 하나인 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