-
Spring Boot 시리즈 4편 – @Valid 입력값 검증과 글로벌 예외 처리 전략기술과 산업/언어 및 프레임워크 2025. 4. 17. 19:28728x90
Spring Boot에서 @Valid를 활용한 입력값 검증과 글로벌 예외 처리 방법을 정리했습니다. 실무에서 자주 쓰이는 검증 패턴과 ControllerAdvice 전략까지 안내합니다.
Spring Boot 시리즈 4편 – @Valid 입력값 검증과 글로벌 예외 처리 전략
API 개발에서 입력값 검증은 보안성과 안정성의 시작점입니다.
이번 편에서는 Spring Boot 환경에서 @Valid, @Validated, @ControllerAdvice 등을 활용해 입력값 검증과 예외 처리 구조를 체계적으로 구성하는 방법을 설명하겠습니다.
🧪 1. 입력값 검증을 왜 해야 할까?
- 클라이언트가 비정상적인 데이터를 보낼 수 있음
- 비즈니스 로직 이전에 잘못된 데이터는 차단해야 함
- 일관된 에러 응답 포맷 제공은 API 신뢰도 향상에 필수
🧱 2. DTO 클래스에 유효성 검증 애노테이션 적용
public class UserDto { @NotBlank(message = "이름은 필수입니다.") private String name; @Email(message = "이메일 형식이 올바르지 않습니다.") @NotBlank private String email; }
주요 검증 애노테이션
애노테이션 설명
@NotBlank null, 빈 문자열 모두 허용하지 않음 @Email 이메일 형식 유효성 체크 @Size 문자열 또는 리스트의 길이 제한 @Min, @Max 숫자 범위 제한
📬 3. Controller에서 @Valid 적용
@PostMapping public ResponseEntity<UserDto> createUser(@Valid @RequestBody UserDto userDto) { userService.createUser(userDto); return ResponseEntity.ok(userDto); }
- @Valid는 JSR-303 기반의 유효성 검증을 수행합니다.
- 검증 실패 시 MethodArgumentNotValidException이 자동 발생합니다.
📦 4. 글로벌 예외 처리 – @ControllerAdvice 사용
실무에서는 예외마다 다르게 try-catch를 두는 것보다, 전역 예외 처리 클래스를 설계하는 것이 좋습니다.
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity<Map<String, String>> handleValidationException(MethodArgumentNotValidException ex) { Map<String, String> errors = new HashMap<>(); ex.getBindingResult().getFieldErrors().forEach(error -> { errors.put(error.getField(), error.getDefaultMessage()); }); return ResponseEntity.badRequest().body(errors); } @ExceptionHandler(Exception.class) public ResponseEntity<String> handleAll(Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("서버 오류가 발생했습니다."); } }
🧠 실무 적용 전략
- 모든 DTO에 반드시 @Valid 애노테이션 적용
- 검증 메시지는 비즈니스 친화적인 한글 메시지로 커스터마이징
- 공통 응답 포맷을 맞추기 위해 ApiErrorResponse 클래스를 만들어 관리
- 필요 시 사용자 정의 예외(BusinessException)를 만들어 도메인 단위로 분리
✅ 마무리 요약
항목 설명
검증 대상 @RequestBody, @ModelAttribute 기반 DTO 검증 도구 @Valid, @Validated, BindingResult 응답 처리 @RestControllerAdvice로 전역 처리 공통 전략 예외 코드, 메시지 표준화 및 공통 응답 구조 적용 추가 도구 Hibernate Validator, 커스텀 애노테이션 정의 가능
📌 다음 편 예고
Spring Boot 시리즈 5편: API 응답 구조 표준화 – 성공/실패 응답 통일 설계 패턴
728x90'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글
Spring Boot 고급 시리즈 1편 – @Transactional 완전 정복: 실무 트랜잭션 설계 전략 (0) 2025.04.17 Spring Boot 시리즈 5편 – API 응답 구조 표준화 전략: 일관된 성공/실패 응답 설계하기 (0) 2025.04.17 Spring Boot 시리즈 3편 – JPA로 DB 연동하기: Entity와 Repository 설계 전략 (0) 2025.04.16 Spring Boot 시리즈 2편 – REST API 설계와 Controller 작성 가이드 (1) 2025.04.15 Spring Boot 시리즈 1편 – 기본 설정과 프로젝트 구조 정리 (0) 2025.04.15