상세 컨텐츠

본문 제목

[JPA] 회원가입과 유효성 체크

JAVA/SPRING

by ranlan 2021. 4. 20. 01:35

본문

728x90

 

도메인 설계

회원 정보의 내용으로 회원 가입을 위한 필수 입력 항목들은 아래와 같다.

- 이름

- 아이디

- 비밀번호

- 이메일주소

- 전화번호

 

위 항목들을 포함하여 회원가입을 위한 Request 객체 를 따로 만들어 주었다.

 

SignupRequest

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class SignupRequest {

    @NotBlank(message = "아이디를 입력해 주세요.")
    private String memberId;

    @NotBlank(message = "비밀번호를 입력해 주세요.")
    private String memberPw;

    @NotBlank(message = "이름을 입력해 주세요.")
    private String memberNm;

    @NotBlank(message = "전화번호를 입력해 주세요.")
    private String memberTell;

    @NotBlank
    @Email(message = "이메일 형식에 맞지 않습니다.")
    private String memberEmail;

}

 

 

로직 구현

MemberService

@Transactional
public void signUpMember(SignupRequest signupRequest) {

    Member member = new Member();
    LocalDateTime now = LocalDateTime.now();

    member.setMemberPw(passwordEncoder.encode(signupRequest.getMemberPw()));

    member.setMemberId(signupRequest.getMemberId());
    member.setMemberNm(signupRequest.getMemberNm());
    member.setMemberEmail(signupRequest.getMemberEmail());
    member.setMemberTell(signupRequest.getMemberTell());
    member.setMemberRole(Role.ROLE_MEMBER);
    member.setRegDate(now);
    member.setUpdateDate(now);

    memberRepository.save(member);
}

요청받은 SignUpRequest의 정보들을 담아 새로운 Member객체로 만들어 주었고 그 객체를 저장하였다.

 

MemberApiController

@PostMapping("/signup")
public ResponseEntity<?> signUp(@Valid @RequestBody SignupRequest signupRequest) throws Exception {

    memberService.signUpMember(signupRequest);
    ApiResponse apiResponse = new ApiResponse(true, "회원가입 완료");

    return ResponseEntity.ok(apiResponse);
}

 

 

Request 유효성 검사

필수 입력 항목들의 유효성 검사를 위해 springboot가 제공하는 validation을 사용하였다.

 

1. 라이브러리 추가

build.gradle

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

스프링 부트 2.3버전 이상부터는 validation이 스프링 부트 스타터 자체에 포함되어있지 않아 별도로 추가해주어야 한다.

 

2. 어노테이션

SignupRequest에 유효성 검사를 위한 어노테이션을 추가해 주었다.

 

@NotNull  The annotated element must not be null. Accepts any types.
 null 허용하지 않음
@NotBlank
 The annotated element must not be null nor empty. Supported types are:
  - CharSequence (length of character sequence is evaluated) 
  - Collection (collection size is evaluated)
  - Map (map size is evaluated)
  - Array (array length is evaluated)

 null과 "", " "(공백 문자열)을 허용하지 않음
@NotEmpty  The annotated element must not be null nor empty. Supported types are:
  - CharSequence (length of character sequence is evaluated)
  - Collection (collection size is evaluated)
  - Map (map size is evaluated)
  - Array (array length is evaluated)

 null과 ""을 허용하지 않음

 

이렇게 대표적으로 3가지가 있고 검사할 속성에 따라 더 다양한 어노테이션들이 있다.

내가 사용한 @Email 의 경우 @가 포함된 이메일주소의 형식이 맞는 지 확인하는 어노테이션이며 그 외에도 @Size, @Min, @Max, @Pattern 등이 있다.

 

3. @Valid

컨트롤러에서 RequestBody를 받을 때 위의 어노테이션으로 정의한 유효성들을 체크해 준다.

이렇게 유효성 검사를 하여 필수로 입력해야 하는 값에 아무 값도 입력하지 않거나 빈칸이 들어갔을 때 회원가입이 안되는 것을 확인할 수 있다.

 

4. 프론트

유효성 검사는 백단과 프론트단 둘 다에서 하는 것이 좋다고 한다.

javascript에서 정규식을 이용하여 입력 칸의 공백과 이메일, 전화번호,  비밀번호 조건등을 체크하도록 하였다.

 

2021.04.23 - [programming/javascript & jquery] - [REGEX] 회원가입 정규식(1)

 

[REGEX] 회원가입 정규식(1)

공백 체크 function checkBlank(value) { var blank_pattern = /[\s]/g; return blank_pattern.test(value); } 전화번호 입력 시 숫자 체크, 하이픈(-) 자동 추가 function autoHyphen(str) { str = str.replace(/..

juran-devblog.tistory.com

2021.04.29 - [programming/javascript & jquery] - [REGEX] 회원가입 정규식(2)

 

[REGEX] 회원가입 정규식(2) 비밀번호

8자 이상 문자와 숫자 포함 /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/ 8자 이상 문자와 숫자, 특수 문자 포함 /^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$/ 8자 이상 대문자, 소문자 포..

juran-devblog.tistory.com

 

728x90

관련글 더보기

댓글 영역