[Spring] 데이터 유효성 검증 (Validation) 이해하기

2025. 11. 4. 13:23·Spring

Validation이란 ? 

Validation은 클라이언트가 전송한 데이터를 서버가 받아 처리하기 전에 유효한 값인지 검사하는 과정이다. 

  • 잘못된 값이 들어오면 오류를 반환하고 처리 흐름을 막는다. 
  • 이를 통해 애플리케이션의 안정성과 신뢰성을 높일 수 있다. 

Spring에서 Validation 흐름

  1. 클라이언트가 데이터를 `@RequestBody` , `@RequestParam` ,`@PathVariable` 등을 통해 전송한다. 
  2. 컨트롤러에서 `@Valid` 또는 `@Validated` 어노테이션을 붙여 유효성 검사를 실행한다. 
  3. 검사 통과하면 서비스 로직에서 실행이 되며, 검사에 실패하면 `MethodArgumentValidException` 등의 예외가 발생하고, `@ControllerAdvice` 나 `@ExceptionHandler` 로 이를 잡아 적절히 응답을 반환한다.
  4. DTO 또는 엔티티 내부에 `@NotNull` ,`@NotEmpty` , `@NotBlank`, `@Size` . `@Pattern` 등의 제약 어노테이션을 사용해서 필드 수준의 유효성 조건을 정의한다. 

Validation 사용하기 

1) 의존성 추가 

Spring Boot에서는 기본적으로 `spring-boot-starter-validation` 을 추가해야 한다. 

implementation 'org.springframework.boot:spring-boot-starter-validation'

 

2) 필드 제약 어노테이션 

1. @NotNull

  • 필드 값이 null이면 안 되는 경우에 사용 
  • 문자열뿐 아니라 숫자, 객체 등 모든 타입에 적용 가능 
public record UserCreateRequest(
    @NotNull
    String username
) {}

null은 안되고 빈 문자열을 허용한다. 

 

2. @NotEmpty 

  • 문자열, 컬렉션, 배열 등에 적용 가능 
  • null이 아니고 길이가 0이 아니어야 함.
public record UserCreateRequest(
    @NotEmpty
    String username
) {}

공백 문자열은 허용하지만, null 또는 길이 0 은 안된다. 

 

3. @NotBlank 

  • 문자열 전용 
  • null, 빈 문자열, 공백 문자열 모두 허용하지 않음 
public record UserCreateRequest(
    @NotBlank
    String username
) {}

빈 문자열, 공백, null 모두 금

 

어노테이션 허용 값 설명

@NotNull 빈 문자열 허용 단순 null 체크
@NotEmpty 공백 문자열 허용 null 또는 길이 0 체크
@NotBlank 허용 없음 null, 길이 0, 공백 모두 체크
빈 문자열과 공백 문자열의 차이 
빈 문자열은 길이가 0인 문자열로 아무 문자도 없다. `""`가 예시이다. 
공백 문자열은 길이는 1이상, 문자이지만 공백 문자만 있는 경우이다. `" "` , `"\t"` , `"\n"` 이 다음 예시에 해당한다.  

 

'Spring' 카테고리의 다른 글

[Spring] 임베디드 타입 (@Embeddable, @Embedded)  (0) 2025.11.10
[Spring] Lombok 이해하기 - @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor  (0) 2025.11.04
[Spring] DTO 활용 패턴 - toEntity(), from() 정적 팩토리 메서드  (0) 2025.10.13
[Spring] 외부 API 연동하기 (RestTemplate vs. WebClient vs. OpenFeign)  (0) 2025.10.05
[Spring] N+1 문제  (0) 2025.10.03
'Spring' 카테고리의 다른 글
  • [Spring] 임베디드 타입 (@Embeddable, @Embedded)
  • [Spring] Lombok 이해하기 - @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor
  • [Spring] DTO 활용 패턴 - toEntity(), from() 정적 팩토리 메서드
  • [Spring] 외부 API 연동하기 (RestTemplate vs. WebClient vs. OpenFeign)
erika0915
erika0915
백엔드 개발자가 되고 싶어요 .
  • erika0915
    erikoding
    erika0915
  • 전체
    오늘
    어제
    • 분류 전체보기 (78)
      • 프로젝트 (13)
        • 끼니콩 (3)
        • 덕메랑 (3)
        • handDoc (7)
        • Haeil (0)
      • Java (9)
        • 클린코더스 (0)
      • Spring (30)
      • Redis (3)
      • CS (7)
        • 운영체제 (3)
        • 컴퓨터구조 (0)
        • 네트워크 (4)
      • DevOps (2)
      • 코딩테스트 (0)
      • Tech (14)
        • TDD (1)
        • 정리 (5)
        • 우테코 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    coderabbit
    java
    깃
    코드레빗
    스프링
    지라
    몽고디비
    TDD
    CoolSMS
    springboot
    git
    github
    레디스
    파인튜닝
    스프링부트
    AI
    docker
    깃허브
    promtail
    jira
    자바
    STT
    네트워크
    MongoDB
    redis
    운영체제
    Network
    OS
    도커
    Spring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
erika0915
[Spring] 데이터 유효성 검증 (Validation) 이해하기

티스토리툴바