[미니프로젝트] Validation 적용

김동혁·2025년 12월 18일

미니프로젝트

목록 보기
15/16
post-thumbnail

회원가입을 할 때나 로그인을 할 때 사용자가 이상한 값을 넣지 않도록 막아주는 작업이 필요하다

아이디의 최소/최대 길이를 정한다던가 비밀번호의 조합은 어떻게 해야 한다던가..

Validation을 적용하는 것은 간단하다

Validation 적용

우리는 회원가입과 로그인 할 때 DTO를 사용한다
DTO에서 필드에 검증 설정을 해주면 된다

public class SignupDto {


    @NotBlank(message = "아이디는 필수입니다.")
    @Size(min = 4, max = 20, message = "아이디는 4~20자여야 합니다.")
    @Pattern( regexp = "^[a-zA-Z0-9]+$", message = "아이디는 영문과 숫자만 사용할 수 있습니다." )
	private String username;

    @NotBlank(message = "비밀번호는 필수입니다.")
    @Size(min = 8, max = 20, message = "비밀번호는 8~20자여야 합니다.")
    @Pattern( regexp = "^(?=.*[A-Za-z])(?=.*\\d).*$", message = "비밀번호는 영문과 숫자를 포함해야 합니다." )
	private String password;

    @NotBlank(message = "이름은 필수입니다.")
    @Size(max = 30, message = "이름은 30자를 초과할 수 없습니다.")
	private String name;

	public User toEntity(String encodedPassword) {
		return User.builder()
				.username(username)
				.password(encodedPassword)
				.name(name)
				.provider("NONE")
				.role(Role.ROLE_USER)
				.build();
	}
}
  • @NotBlank: 빈값 + 공백만 있는 경우를 허용하지 않는다
  • @Size: 최소/최대 길이 설정
  • @Pattern: 입력하는 값의 패턴을 설정, 정규표현식으로 패턴을 설정할 수 있음
  • message를 입력해주면 사용자가 잘못 입력했을 때 설정한 메시지를 응답해준다

컨트롤러에도 어노테이션을 달아줘야 한다

	@Operation(summary = "회원가입", description = "새로운 사용자를 등록합니다.")
	@PostMapping("/signup")
	public ApiResponse<String> signup(
			@Parameter(description = "회원가입 요청 데이터 (아이디, 비밀번호, 이름)", required = true)
			@Valid @RequestBody SignupDto signupDto) {
		authService.signup(signupDto);
		return ApiResponse.onSuccess("회원가입 성공");
	}
  • @Valid: 자바에서 제공하는 검증 어노테이션

@Validated: 스프링에서 제공하는 검증 어노테이션. @Valid에서 제공하는 기능이 다 들어가 있고, 유효성 그룹 지정 기능이 추가로 들어가 있다

실행 화면

사용자에게 바로바로 응답해주기 때문에 잘못 입력할 수가 없다!

0개의 댓글