Backend/Java

이메일 중복방지

개발자의 첫 걸음 2025. 12. 31. 12:00

안녕하세요. 오늘은 이메밀 중복방지를 어떻게 하는지 간단하게 알아볼게요.

 

이메일 중복방지는 보통 회원가입시 동일한 이메일 주소를 사용하지 않게 방지하는 방법이에요.

 

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