[JAVA] Validation

김동욱·2024년 11월 27일
0

Java

목록 보기
9/9
post-thumbnail

Validation

입력 객체의 유효성 검사하는 방법을 알아보겠습니다.

예를 들어 회원가입 시 여러가지 조건들이 존재합니다.
1. 이메일: 이메일 양식에 맞게(example@example.com)
2. 비밀번호: 비밀번호는 최소 8자 이상이며, 대문자, 소문자, 숫자, 특수문자를 포함 등

클라이언트 측에서 직접 입력값을 검증할 경우 쉽게 조작이 가능하기 때문에 서버에서 필수적으로 검증을 해야합니다.

조건문 검증

if (request.getEmail() == null) {
	return ResponseEntity.badRequest().body("이메일을 입력해주세요");
} else if (!Pattern.matches("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$", request.getEmail())) {
	return ResponseEntity.badRequest().body("이메일 형식에 맞게 입력해주세요");
}

조건문으로만 입력값을 검증하는 방법
조건이 많아질 수록 복잡해집니다.

@Valid, @Validated 어노테이션

@Valid

자바 표준 스펙으로 컨트롤러에서만 동작하며
객체의 필드에 설정된 검증 어노테이션에 맞게 검증(@Email, @NotBlank, @NotNull 등등..)
다른 계층에서 사용하려면 @Validated와 같이 사용해야 합니다.

@Validated

스프링 어노테이션으로 컨트롤러가 아닌 다른 계층에서 동작 가능하며
빈으로 등록된 클래스에 @Validated를 붙여 사용합니다.

코드

build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-validation'
}

@Valid

  • UserController
@PostMapping("/signup")
    public ResponseEntity<Void> signup(@RequestBody @Valid SignupRequest Request){
        ...
    }
  • signupRequest
public class signupRequest{

    @Email(message = "이메일 형식에 맞게 입력해주세요")
    @NotNull(message = "이메일을 입력해주세요")
    private String email;
    
    @Pattern(regexp = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[a-zA-Z]).{8,}$",
            message = "비밀번호는 최소 8자 이상이며, 대문자, 소문자, 숫자, 특수문자를 포함해야 합니다.")
    private String password;
    
    @NotBlank
    private String name;
}

@Validated

  • UserService
@Service
@Validated
public class UserService {

    public void signup(@Valid SignupRequest request){
    }
}

서비스 계층에서 입력 파라미터 검증 가능합니다.

profile
안녕하세요. 공부해요

0개의 댓글