회원 정보의 내용으로 회원 가입을 위한 필수 입력 항목들은 아래와 같다.
- 이름
- 아이디
- 비밀번호
- 이메일주소
- 전화번호
위 항목들을 포함하여 회원가입을 위한 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);
}
필수 입력 항목들의 유효성 검사를 위해 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)
2021.04.29 - [programming/javascript & jquery] - [REGEX] 회원가입 정규식(2)
[ERROR] 스프링부트 테스트 IllegalStateException (0) | 2021.04.29 |
---|---|
[JPA] 회원가입시 아이디 중복검사 (0) | 2021.04.20 |
[SPRING SECURITY] CSRF (0) | 2021.04.16 |
[SPRING SECURITY] 커스텀 클래스와 로그인 (0) | 2021.04.16 |
[ERROR] JPAQueryFactory 의존성 문제 (0) | 2021.04.15 |
댓글 영역