프로젝트 (Java)/예약마켓

[프로젝트] 27. 유효성 검사(validation) 추가

hihyuk 2024. 1. 31. 09:37

프로젝트에 유효성 검사(validation)를 추가하는 것은 입력 데이터의 정확성을 보장하고, 서버 측에서 예상치 못한 오류를 방지하는 중요한 단계입니다. Spring Boot에서는 spring-boot-starter-validation 의존성을 통해 Bean Validation API를 쉽게 사용할 수 있습니다. 이를 통해 컨트롤러에서 들어오는 요청의 DTO 객체에 대한 유효성 검사를 선언적으로 할 수 있습니다.

 

Gradle 설정

build.gradlespring-boot-starter-validation 의존성을 추가하여 프로젝트에 Bean Validation을 활성화합니다.

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

 

AuthService 컨트롤러 메서드에 유효성 검사 적용

AuthService 컨트롤러의 joinlogin 메서드에 @Valid 어노테이션을 사용하여 요청 바디의 유효성을 검사합니다. 유효성 검사를 통과하지 못하면 메서드는 실행되지 않으며, 스프링은 클라이언트에게 유효성 검사 오류에 대한 정보를 자동으로 반환합니다.

    @PostMapping("/join")
    public void join(
            @Valid @RequestBody RegisterDto registerDto
    ) {
        authService.join(registerDto);
    }

    @PostMapping("/login")
    public TokenResponseDto login(
            @Valid @RequestBody LoginDto loginDto
    ) {
        return authService.login(loginDto);
    }

 

DTO 클래스에 유효성 검사 규칙 정의

LoginDtoRegisterDto 클래스에 유효성 검사 규칙을 정의합니다. @Email, @NotBlank 등의 어노테이션을 사용하여 필드에 대한 유효성 검사 규칙을 선언합니다.

LoginDto

import javax.validation.constraints.Email;

@Getter
public class LoginDto {
    @Email
    private String email;
    private String password;
}

RegisterDto

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;

@Getter
public class RegisterDto {
    @NotBlank
    private String name;
    @Email
    private String email;
    @NotBlank
    private String password;
    private String profileImg;
    private String introduce;
    
    // 생략

 

결론

이 방법을 통해, 클라이언트로부터 받은 입력 데이터가 서버 측에서 정의한 규칙에 따라 유효한지 검사할 수 있습니다. 유효성 검사를 통과하지 못한 경우, Spring Boot는 클라이언트에게 의미 있는 오류 메시지를 함께 담은 응답을 자동으로 반환합니다. 이를 통해 애플리케이션의 로버스트함을 높이고 사용자 경험을 개선할 수 있습니다.