이전게시글에서는 HTML까지 다 만들었다.
이제 가장 중요한 Validation을 적용할 차례이다. 내가 검증할 사항은 다음과 같다.
- 이미 가입된 아이디로는 가입하지 못한다.
- 모든 필드는 필수입력이다.
- Email은 형식에 따라 작성한다.
크게는 이렇게 세가지인데, lombok이 제공하는 Bean Validation을 사용하여 아래와 같이 손 쉽게 검증이 가능하다.
package com.project.domain.signup;
import com.project.domain.user.SexType;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SignUpForm {
@NotBlank(message = "아이디는 필수입력 입니다.")
private String loginId;
@NotBlank(message = "사용자 이름을 입력해주세요.")
private String userName;
@NotBlank
@Pattern(regexp="^(?=.*[a-zA-Z])(?=.*\\d)(?=.*\\W).{8,20}$", message = "비밀번호는 영어와 숫자로 포함해서 8~20자리 이내로 입력해주세요.")
private String password;
@NotBlank
@Pattern(regexp="^(?=.*[a-zA-Z])(?=.*\\d)(?=.*\\W).{8,20}$", message = "비밀번호는 영어와 숫자로 포함해서 8~20자리 이내로 입력해주세요.")
private String passwordCheck;
@Email(message = "유효하지 않은 이메일입니다.")
@NotBlank(message = "이메일을 입력해주세요.")
private String email;
@NotBlank(message = "전화번호를 입력해 주세요.")
private String phone;
@NotBlank(message = "주소를 입력해 주세요.")
private String address;
@NotNull(message = "성별을 선택해주세요.")
@Enumerated(value = EnumType.STRING)
private SexType sex;
}
어노테이션에 대한 설명은 다음 블로그를 참조하도록.
https://hyeran-story.tistory.com/81
이제 Bean Validation에대한 준비는 끝났으니 Controller단에서의 소스를 추가해 보자.
1.회원가입에 대한 POST요청을 Mapping한다.
@PostMapping
public String addSignUp(@Validated @ModelAttribute SignUpForm signUpForm, BindingResult bindingResult) {
// Field에대한 에러가 있을시 메세지와 함께 회원가입창으로 보낸다.
if (bindingResult.hasErrors()) {
return "/login/signUp";
}
//이미 가입된 아이디 일시 메세지와 함께 회원가입창으로 보낸다.
if (signUpService.findUser(signUpForm.getLoginId())) {
bindingResult.addError(new FieldError("signUpForm", "loginId", "이미 존재하는 사용자 입니다."));
return "/login/signUp";
}
signUpService.signUp(signUpForm);
return "redirect:/";
}
사용법
- Spring Boot는 spring-boot-starter-validation 라이브러리를 추가하면 Bean Validator를 인식하고 Spring에 통합한다.
- 메소드의 파라미터로 @Validated를 추가하여 Bean Validation을 사용한다.
- 검증을 원하는 객체 (여기서는 SignUpForm)뒤에 BindingResult파라미터로 해당 객체에 대한 검증 결과를 받는다.
이외의 로직은 요구사항에 맞게 정의한다. 나같은 경우에는 아래 글을 참고하여 findBy~메소드를 사용하였다.
https://leonjk3.tistory.com/21
@Transactional
public boolean findUser(String loginId) {
Optional<User> findUser = userRepository.findByLoginId(loginId);
return findUser.isPresent();
}
- loginId로 값을 가져와 이미 사용된 아이디인지 판단하여 참/거짓값을 return한다.
2.서버를 기동하여 검증을 확인한다.
이외에도 e-Mail인증, 주소 API, 비밀번호 확인 Check에대한 Validation을 추가로 진행할 예정이다.
'프로젝트[종료]' 카테고리의 다른 글
14. Servlet Filter 적용하기 (0) | 2023.05.04 |
---|---|
13. 로그인 사용자 Session 처리하기 (0) | 2023.04.28 |
11.회원가입 기능 만들기(1) (0) | 2023.04.26 |
10. JpaRepository<T, Id>인터페이스 상속받기 (0) | 2023.04.26 |
9. JPA를 사용하여 SpringBoot와 MariaDB연동하기 (0) | 2023.04.20 |