본문 바로가기
스프링 부트3

Validation API를 이용한 데이터 검증

by 굿센스굿 2024. 12. 11.
반응형

 

스프링 부트 3에서 데이터 검증은 안정성과 신뢰성을 보장하기 위해 필수적인 과정입니다. 특히, 사용자가 입력한 데이터를 처리하기 전에 정확성을 검증함으로써 애플리케이션의 오류를 방지하고 보안을 강화할 수 있습니다. Validation API는 이를 구현하기 위한 강력한 도구를 제공합니다. 이번 글에서는 Validation API의 개념과 활용법, 그리고 실제 코드 예제를 통해 데이터 검증 방법을 알아보겠습니다.


1. Validation API란 무엇인가?

Validation API는 자바의 표준 데이터 검증 메커니즘으로, 데이터가 특정 규칙을 따르는지 확인하기 위해 사용됩니다.
스프링 부트에서는 javax.validation과 org.hibernate.validator 라이브러리를 통해 이를 쉽게 통합할 수 있습니다.
이를 사용하면 사용자 입력 데이터의 유효성을 선언적으로 정의하고, 오류 발생 시 자동으로 처리할 수 있습니다.


2. 스프링 부트에서 Validation API 설정

스프링 부트 3 프로젝트에서 Validation API를 사용하려면 다음 의존성을 추가해야 합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

3. Validation API 적용 방법

1) 간단한 DTO 클래스 생성 및 검증 애노테이션 사용

검증은 주로 DTO(Data Transfer Object) 클래스에 선언적으로 적용됩니다.

import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

public class UserRequest {

    @NotNull(message = "이름은 필수입니다.")
    @Size(min = 2, max = 30, message = "이름은 2자 이상 30자 이하로 입력해야 합니다.")
    private String name;

    @NotNull(message = "이메일은 필수입니다.")
    private String email;

    @NotNull(message = "나이는 필수입니다.")
    private Integer age;

    // Getter 및 Setter
}

위 코드에서 @NotNull, @Size와 같은 애노테이션을 사용해 필드의 검증 조건을 정의합니다.
이러한 조건에 맞지 않는 데이터가 입력되면 검증 오류가 발생합니다.


2) 컨트롤러에서 @Valid 및 @Validated 사용

컨트롤러 메서드에서 검증을 활성화하려면 @Valid 또는 @Validated를 사용합니다.

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import jakarta.validation.Valid;

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public String createUser(@Valid @RequestBody UserRequest userRequest) {
        return "사용자 생성 완료: " + userRequest.getName();
    }
}

@Valid는 요청 본문에서 전달된 UserRequest 객체를 자동으로 검증하며, 오류가 발생하면 MethodArgumentNotValidException이 던져집니다.


3) 검증 실패 시 예외 처리

스프링 부트는 기본적으로 검증 오류를 처리하지만, 사용자 정의 예외 처리를 통해 더 세밀한 응답을 제공할 수 있습니다.

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Map<String, String> handleValidationExceptions(MethodArgumentNotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getFieldErrors().forEach(error -> 
            errors.put(error.getField(), error.getDefaultMessage())
        );
        return errors;
    }
}

위 코드는 발생한 검증 오류를 세부적으로 처리하고, 사용자에게 명확한 피드백을 제공하는 방법을 보여줍니다.


4. 예제: Validation API 활용 사례

예제 1: 이름과 이메일 형식 검증

사용자가 이름 필드를 비워두거나 이메일 형식을 잘못 입력한 경우, 다음과 같은 응답을 받을 수 있습니다.

{
    "name": "이름은 필수입니다.",
    "email": "이메일은 필수입니다."
}

예제 2: 입력 길이 초과 또는 부족

이름이 30자를 초과하거나 2자 미만일 경우 오류 메시지가 반환됩니다.

{
    "name": "이름은 2자 이상 30자 이하로 입력해야 합니다."
}

예제 3: 사용자 정의 메시지

애플리케이션에 맞는 사용자 정의 검증 메시지를 추가하여 친근한 UX를 제공할 수 있습니다.

@Size(min = 2, max = 30, message = "입력된 이름의 길이가 올바르지 않습니다. (2~30자)")
private String name;

5. Validation API의 장점

  1. 코드 간결화: 선언적 검증으로 코드 중복을 줄일 수 있습니다.
  2. 확장성: 사용자 정의 애노테이션과 규칙을 추가할 수 있습니다.
  3. 일관성 유지: 검증 로직을 중앙화하여 전체 시스템의 안정성을 높입니다.

6. 마무리

Validation API는 사용자 입력 데이터의 품질을 보장하고, 애플리케이션의 신뢰성을 향상시키는 데 중요한 역할을 합니다. 위에서 소개한 방법과 예제를 바탕으로 프로젝트에 데이터 검증 로직을 추가해 보세요. 이를 통해 더 안정적이고 견고한 스프링 부트 3 애플리케이션을 구현할 수 있을 것입니다. 😊

반응형