Validation 의 의미
특정 데이터의 값이 유효한지 확인하는 단계
유효하다 : 시스템이 미리 정의한 사양에 부합한다.
→ HTTP 요청이 정상인지 검증하는 것이 컨트롤러의 주 역할
구체적 역할
- 검증을 통해 적절한 메시지를 유저에게 보여주어야 함
- 검증 오류로 인해 정상적인 동작이 끊기면 안 됨
- 사용자가 입력한 데이터는 항상 유지되어야 함
검증의 종류
프론트엔드 검증
- 보안에 취약하지만 필수
- 유저 사용성 증가
서버 검증
- 프론트없이 사용할 경우 유저 사용성 저하
- API 스펙 정의 → Validation 오류를 Response 예시에 남겨주어야 함
- API 명세서 작성 중요
데이터베이스 검증
- Not Null, Default와 같은 제약 조건 설정
- 최종 방어선의 역할 수행
Bean Validation
의미 : 검증 로직을 어노테이션으로 표현하는 기술.
효과 : 모든 필드를 일일이 if문으로 검사하지 않고도 편하고 직관적으로 데이터를 검증할 수 있다.
의존성
implementation 'org.springframework.boot:spring-boot-starter-validation'
Bean Validation 코드 예시
public class SaveMemberRequestDto {
@NotBlank // 1. "값이 꼭 있어야 해요!" (null, "", " " 모두 거부)
private String name;
@Email // 2. "이메일 형식이어야 해요!" (xxx@xxx.xxx)
private String email;
@Size(min = 8, max = 20) // 3. "8~20자 사이여야 해요!"
private String password;
@Min(19) // 4. "최소 19 이상이어야 해요!"
private Integer age;
@Pattern(regexp = "^010-\\d{4}-\\d{4}$") // 5. "이 패턴과 일치해야 해요!"
private String phone;
}
자주 사용되는 Validation 어노테이션
@NotBlank`: 공백이 아닌 문자가 1개 이상 (null, "", " " 모두 거부)
@Email`: @가 포함된 이메일 형식
@Size`: 문자열 길이나 컬렉션 크기 제한
@Min/@Max`: 숫자의 최소/최대값
@Pattern`: 정규표현식 패턴 (전화번호, 주민번호 형식 등)
에러 메시지 커스터마이징 - message 사용
// 직접 작성
@NotBlank(message = "이름을 입력해주세요!")
private String name;
// 다른 옵션값 포함 가능
@Size(min = 8, message = "비밀번호는 {min}자 이상이어야 합니다")
private String password;
컨트롤러에서 검증 실행
@RestController
public class MemberController {
// @Valid만 붙이면 자동으로 검증 실행!
@PostMapping("/signup")
public String signup(@Valid @RequestBody SaveMemberRequestDto request) {
// ...
return "가입이 완료되었습니다.";
}
}
@Getter
public class SaveMemberRequestDto {
@NotBlank // 1. "값이 꼭 있어야 해요!" (null, "", " " 모두 거부)
private String name;
@Email(message = "올바른 이메일 형식이 아닙니다.") // 2. "이메일 형식이어야 해요!" (xxx@xxx.xxx)
private String email;
@Size(min = 8, max = 20) // 3. "8~20자 사이여야 해요!"
private String password;
@Min(19) // 4. "최소 19 이상이어야 해요!"
private Integer age;
@Pattern(regexp = "^010-\\d{4}-\\d{4}$") // 5. "이 패턴과 일치해야 해요!"
private String phone;
}'ETC > 1. Today I Learned' 카테고리의 다른 글
| [Git] 실수로 커밋했을 때 해결법 (0) | 2026.03.18 |
|---|---|
| [Java] Integer 클래스 (0) | 2026.01.15 |
| [Spring] Spring JPA 영속성 전이(Cascade)와 고아 제거(Orphan Removal) (0) | 2026.01.06 |
| 개발 주요 개념 정리 - 클래스, 인터페이스, JSON, (0) | 2025.12.24 |
| [Java] Collections에 관하여 (0) | 2025.12.23 |