
안녕하세요. 오늘은 이메밀 중복방지를 어떻게 하는지 간단하게 알아볼게요.
이메일 중복방지는 보통 회원가입시 동일한 이메일 주소를 사용하지 않게 방지하는 방법이에요.
1. User 엔티티 유니크 설정
@Column(unique = true)
private String email;
2. UserRepository 내 쿼리 메서드 생성
// 이메일 존재 여부 확인 쿼리 네임드 메서드 설계
Optional<User> findByEmail(String email);
3. UserService 회원가입 로직 내 조건문 추가
// 1-1 이메일 중복 체크
if (userRepository.findByEmail(joinDTO.getEmail()).isPresent()) {
throw new Exception400("이미 등록된 이메일 주소 입니다.");
}
4. 오류 메세지를 데이터 반환으로 변경 처리 - 권장
수정 전 - 예제
@ExceptionHandler(Exception400.class)
public String ex400(Exception400 e, HttpServletRequest request) {
log.warn("=== 400 에러 발생 ===");
log.warn("요청 URL : {}", request.getRequestURL());
log.warn("에러 메세지 : {}", e.getMessage());
log.warn("예외 클래스 : {}", e.getClass().getSimpleName());
request.setAttribute("msg", e.getMessage());
return "err/400";
}
🎯 기존: /templates/err/400.html 같은 에러 페이지로 이동 - 서버 렌더링 방식 (SSR)
수정 전 코드의 불편한 점은
1. API 요청(Ajax, fetch, axios)에서는 HTML 페이지가 내려옴
2. SPA / Ajax 환경에서는 사용하기 불편
3. “알림창 + 뒤로가기” 같은 즉각적인 UX 처리 불가
수정 후
@ExceptionHandler(Exception400.class)
@ResponseBody // 데이터 반환으로 변경 처리
public ResponseEntity<String> ex400(Exception400 e, HttpServletRequest request) {
log.warn("=== 400 에러 발생 ===");
log.warn("요청 URL : {}", request.getRequestURL());
log.warn("에러 메세지 : {}", e.getMessage());
log.warn("예외 클래스 : {}", e.getClass().getSimpleName());
// 방어적 코드 추가
String message = e.getMessage() != null ? e.getMessage() : "잘못된 요청 입니다.";
String script = "<script>" +
"alert('" + message +"');" +
"history.back();" +
"</script>";
return ResponseEntity
.status(HttpStatus.UNAUTHORIZED)
.contentType(MediaType.TEXT_HTML)
.body(script);
}
기능 점검 - 기능 구현 확인



수정 후 코드의 장점


여기 까지 이메일 중복 방지에 대해 알아봤는데요.
이메일 중복 방지로 같은 이메일로 여러 계정이 생기는 걸
의도적으로 차단함으로써 “나중 문제를 미리 막는 설계”를 배운 것 같아요.
'Backend > Java' 카테고리의 다른 글
| Spring - PersistRepository (0) | 2026.01.06 |
|---|---|
| 결제 시스템 구축 - 핵심 개념 정리 (0) | 2026.01.02 |
| 회원가입 이메일 인증 기능 (Google smtp 활용) (0) | 2025.12.29 |
| Spring - security crypto (0) | 2025.12.25 |
| Spring - RestTemplate (0) | 2025.12.23 |