Bean Validation을 사용하기 위해 spring-boot-starter-validation을 build.gradle에 추가해 주었다.
@PostMapping public String register_post(@Validated @ModelAttribute User user, BindingResult bindingResult) { log.info("{}", user.getName()); log.info("{}", user.getBirth()); if (bindingResult.hasErrors()) { return "/register"; } userService.join(user); return "login"; }
회원가입 버튼을 누르면 실행되는 메서드이다. 검증을 위해 @Validated 어노테이션을 넣고 User user 다음에 BindingResult를 넣어줌으로서 user의 필드에 잘못된 값이 들어가게 되면 Field Error를 bindingResult에 추가하게 된다. 에러가 추가되면 userService.join(user)가 실행되지 않고(회원가입이 되지 않고) 다시 회원가입창으로 가게된다.
user객체에 모든 필드가 정상적으로 입력되면 userService.join(user)가 실행되는데, 이 메서드를 통해 userRepository.save(user)가 실행된다. userRepository.save(User user)메서드는 결국 em.persist(user)로 영속성 컨텍스트에 user를 추가해주고 트랜잭션이 끝나면 커밋이 되어 데이터베이스에 저장된다.
function sendingAuthenticationMail() { let email = document.getElementById('email').value; $.ajax({ type: "get", url: "/register/sendingAuthenticationMail?email=" + email }).done((res)=>{ alert("이메일이 보내졌습니다. 확인해주세요"); verificationNumber = res; document.getElementById('verificationCodeContainer').style.display = 'block'; // 'none' 대신 'block'으로 설정하여 보이게 함 }).fail(); }
이메일 인증번호 발송 버튼을 누르면 sendingAuthenticationMail메서드가 실행되는데, 이 메서드의 내부에서 ajax통신을 통해 아래 메서드가 호출된다.
@GetMapping("sendingAuthenticationMail") @ResponseBody public ResponseEntity<String> register_sendingAuthenticationMail (@RequestParam String email, Model model) { log.info("이메일 인증 실행...{}", email); mailService.sendingAuthenticationMail(email, model); return new ResponseEntity<String>((String) model.getAttribute("randomNumber"),HttpStatus.OK); }
mailService.sendingAuthenticationMail(email,model)메서드를 통해 메일을 보내는데, 눈여겨 봐야할 점은 model이 같이 넘어간다는 것이다. 이 메서드내부에서 만들어진 인증번호가 model.addAttribute("randomNumber",randomNumber)를 통해 모델에 저장되고 return newResponseEntity<String>((String) model.getAttribute("randomNumber"),HttpStatus.OK);
를 통해 랜덤값이 스트링형식으로 리턴되는데, 이 값은 인증번호 확인시 사용자가 입력한 값과 대조할 때에 쓰인다.
댓글 영역