본문 바로가기
대외활동/DRACONIST-백엔드

03. validation유효성 검사 DRACONIST

by 피스타0204 2025. 2. 20.

 

유효성 검사는 @Valid 애너테이션과 DTO 클래스 내의 검증 애너테이션을 통해 이루어집니다.

 

아래와 같이 Valid 어노테이션을 이용하여 유효성 검사가 실행되는 DTO를 컨트롤러단에서 설정하고,

@PostMapping("/login")
public ResponseEntity<?> login(@Valid @RequestBody LoginRequestDTO loginRequestDTO) {
    return memberService.login(loginRequestDTO);
}

@PostMapping("/join")
public ResponseEntity<?> join(@Valid @RequestBody JoinDTO joinDTO) {
    return memberService.join(joinDTO);
}

 

DTO 파일에서 Validation 라이브러리를 이용해 유효성 검사를 시행할 수 있습니다.

package com.draconist.goodluckynews.domain.member.dto;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class LoginRequestDTO {
    @NotNull(message = "이메일 입력은 필수입니다.")
    @Email
    private String email;
    @NotNull(message = "패스워드 입력은 필수입니다.")
    private String password;
}

 


 

이번에는 정규식과 pattern 라이브러리를 이용해 이메일과 비밀번호, 기타 값들의 유효성을 부여하겠습니다.

package com.draconist.goodluckynews.domain.member.dto;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class JoinDTO {

    @NotBlank(message = "이메일 입력은 필수입니다.")
    @Email(message = "올바른 이메일 형식이어야 합니다.")
    @Pattern(
            regexp = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$",
            message = "이메일은 'example@gmail.com' 형식이어야 합니다."
    )
    private String email;

    @NotBlank(message = "비밀번호 입력은 필수입니다.")
    @Size(min = 6, message = "비밀번호는 최소 6자 이상이어야 합니다.")
    private String password;

    @NotBlank(message = "이름 입력은 필수입니다.")
    private String name;

    private String profileImage;

    @NotBlank(message = "오전/오후 값은 필수입니다.")
    @Pattern(regexp = "AM|PM", message = "'AM' 또는 'PM'만 입력 가능합니다.")
    private String amPm;

    private int hours;

    private int minutes;
}
  • 이메일은 아무거나@아무거나@.com 형식이어야 합니다.
  • 허용됨
    • test@example.com
    • hello.world@domain.net
    • user123@sub.example.co.kr
    • name.surname@company.org
    ❌ 허용 안 됨:
    • plainaddress (도메인 없음)
    • @missing-user.com (아이디 없음)
    • user@.com (도메인 없음)
  • 비밀번호는 최소 6자이상이어야 합니다
  • amPm은 AM, PM 중 하나 string값을 작성해야 합니다.

 

이렇게 하면 오류가 떴을 때 프론트엔드 단에서도 유효성 검사 여부가 출력됩니다.

{"isSuccess":false,"code":"COMMON400","message":"유효성 검사 실패","result":{"email":"이메일은 '뭐시기@뭐시기.뭐시기' 형식이어야 합니다."}}