
@RestController
@RequestMapping("/api/user")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
// 이메일 중복 확인
@GetMapping("/check-email-duplicate")
public ResponseEntity<ApiResponse<Boolean>> checkEmail(@RequestParam String email){
boolean exists = userService.checkEmailDuplicate(email);
return ResponseEntity.ok(ApiResponse.success("이메일 중복 확인 완료", exists));
}
// 회원가입
@PostMapping("/register")
public ResponseEntity<ApiResponse<Void>> register(@Valid @RequestBody UserRegisterRequest request){
userService.register(request);
return ResponseEntity.status(201).body(ApiResponse.success("회원가입이 완료되었습니다.", null));
}
}
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
public void register(UserRegisterRequest request){
if (userRepository.existsByEmail(request.getEmail())){
throw new IllegalArgumentException("이미 사용 중인 이메일입니다.");
}
if (!request.getPassword().equals(request.getConfirmPassword())){
throw new IllegalArgumentException("비밀번호가 일치하지 않습니다.");
}
User user = User.builder()
.name(request.getName())
.email(request.getEmail())
.password(passwordEncoder.encode(request.getPassword()))
.build();
userRepository.save(user);
}
public boolean checkEmailDuplicate(String email){
return userRepository.existsByEmail(email);
}
}
결과

결과

결과

3번의 요청을 다시 보내면
결과

예상대로 에러를 잘 뱉어낸다.
데이터베이스를 확인해보면

회원가입된 사용자가 데이터베이스에 잘 들어간 것을 확인할 수 있다.