Back-End/Spring

@Valid(스프링 MVC에서의 입력 유효성 검증)

h_jinnny 2024. 5. 22. 01:42

웹 애플리케이션에서 사용자 입력은 필수적인 부분이며, 올바른 데이터가 입력되었는지 확인하는 유효성 검증(validation)은 매우 중요하다. 스프링 MVC(Spring MVC)에서는 이러한 유효성 검증을 간편하게 처리하기 위해 @Valid 어노테이션을 제공한다. 이 글에서는 @Valid 어노테이션의 개념, 사용 방법, 그리고 실제 예제를 통해 입력 유효성 검증을 어떻게 구현할 수 있는지 살펴보겠다.

@Valid 어노테이션이란?

@Valid 어노테이션은 자바의 표준 유효성 검증 API인 Bean Validation(JSR-380, JSR-303)의 일부이다. 스프링 MVC에서는 이 어노테이션을 사용하여 컨트롤러 메서드의 파라미터로 전달되는 객체의 유효성을 검증할 수 있다. 이를 통해 간편하게 데이터 유효성 검사를 수행하고, 검증 실패 시 적절한 에러 메시지를 제공할 수 있다.

@Valid 사용 방법

1. 검증할 객체 정의: 유효성 검사를 할 객체에 검증 어노테이션을 추가한다.

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;

public class UserForm {
    @NotEmpty(message = "Name is required.")
    @Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters.")
    private String name;

    @NotEmpty(message = "Email is required.")
    private String email;

    // Getters and Setters
}

 

2. 컨트롤러에서 @Valid 사용: 컨트롤러 메서드에서 @Valid 어노테이션을 사용하여 파라미터를 검증한다.

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class UserController {

    @GetMapping("/user")
    public String showForm(Model model) {
        model.addAttribute("userForm", new UserForm());
        return "userForm";
    }

    @PostMapping("/user")
    public String submitForm(@Valid UserForm userForm, BindingResult result, Model model) {
        if (result.hasErrors()) {
            return "userForm";
        }
        model.addAttribute("message", "User successfully registered.");
        return "success";
    }
}

 

유효성 검증 어노테이션

@Valid 어노테이션은 검증 대상 객체에 있는 다양한 유효성 검증 어노테이션과 함께 사용된다. 다음은 자주 사용되는 유효성 검증 어노테이션들이다.

  • @NotNull: 값이 null이 아님을 검증.
  • @NotEmpty: 문자열, 컬렉션 등이 비어있지 않음을 검증.
  • @Size: 문자열, 컬렉션 등의 크기를 검증.
  • @Min 및 @Max: 숫자의 최소값과 최대값을 검증.
  • @Email: 올바른 이메일 형식인지 검증.

예제: 사용자 등록 폼

스프링 MVC에서의 실제 예제를 통해 입력 유효성 검증을 살펴보자. 사용자 등록 폼을 예로 들어 보겠다.

 

1. UserForm 클래스: 유효성 검증 어노테이션을 추가한 사용자 폼 객체

import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import lombok.Data;

@Data
public class UserForm {
    @NotEmpty(message = "Name is required.")
    @Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters.")
    private String name;

    @NotEmpty(message = "Email is required.")
    @Email(message = "Email should be valid.")
    private String email;
}


2. UserController 클래스: 사용자 입력 폼을 처리하는 컨트롤러

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class UserController {

    @GetMapping("/user")
    public String showForm(Model model) {
        model.addAttribute("userForm", new UserForm());
        return "userForm";
    }

    @PostMapping("/user")
    public String submitForm(@Valid UserForm userForm, BindingResult result, Model model) {
        if (result.hasErrors()) {
            return "userForm";
        }
        model.addAttribute("message", "User successfully registered.");
        return "success";
    }
}

 

3. userForm.html: 사용자 입력 폼을 나타내는 Thymeleaf 템플릿

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User Form</title>
</head>
<body>
    <h1>User Registration</h1>
    <form th:action="@{/user}" th:object="${userForm}" method="post">
        <p>
            Name: <input type="text" th:field="*{name}" />
            <span th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</span>
        </p>
        <p>
            Email: <input type="email" th:field="*{email}" />
            <span th:if="${#fields.hasErrors('email')}" th:errors="*{email}">Email Error</span>
        </p>
        <p><button type="submit">Submit</button></p>
    </form>
</body>
</html>

 

결론

@Valid 어노테이션은 스프링 MVC에서 입력 유효성 검증을 간편하게 구현할 있는 강력한 도구다. 이를 통해 클라이언트의 데이터를 검증하고, 잘못된 입력에 대해 적절한 피드백을 제공할 있다. 유효성 검증을 올바르게 구현함으로써, 애플리케이션의 안정성과 신뢰성을 크게 향상시킬 있다.

 

다음 글에서는 위에 코드에 나와있는 BindingResult에 대해서 다뤄보겠다.