[번개장터 클론코딩][Spring Boot] 회원가입 시 이메일 및 닉네임 중복 검사 구현

2025. 3. 18. 02:20· [LG 유플러스] 유레카/프로젝트
목차
  1. 1. MemberDao에 중복 검사 메서드 추가
  2. 2. MemberService에서 중복 검사 실행
  3. 3. MemberController에서 예외 처리
  4. 4. 프론트엔드에서 예외 메시지 처리

기존의 회원가입에서는 이메일 형식과 패스워드 유효성 검사는 했지만, 이메일 및 닉네임 중복 검사 기능이 없었음. 이메일이 프라이머리 키이고, 닉네임이 유니크한 필드로 설정되어 있는 점을 고려하여 중복 검사를 추가하게 됨

1. MemberDao에 중복 검사 메서드 추가

DB에서 이메일과 닉네임의 중복 여부를 확인하기 위해 MemberDao 인터페이스에 isEmailExists와 isNicknameExists 메서드를 추가

@Mapper
public interface MemberDao {
    public Member login(Member m) throws Exception;
    public void insertMember(Member m) throws Exception;
    public void updateMember(Member m) throws Exception;
    public void deleteMember(String email) throws Exception;
    
    boolean isEmailExists(String email);
    boolean isNicknameExists(String nickname);
}

2. MemberService에서 중복 검사 실행

MemberService에서 MemberDao에 접근하여 이메일과 닉네임 중복을 체크. 만약 이메일이나 닉네임이 중복되면 예외를 발생시켜 회원가입을 진행하지 않도록 함

public void insertMember(Member m) throws Exception {
    // 이메일 및 패스워드 유효성 검사
    String email = m.getEmail();
    if (!isValidEmail(email)) {
        throw new Exception("유효하지 않은 이메일 형식입니다.");
    }
    
    String pwd = m.getPwd();
    if (!isValidPassword(pwd)) {
        throw new Exception("패스워드는 8자리 이상이어야 하며, 특수문자와 숫자를 포함해야 합니다.");
    }

    // 이메일 및 닉네임 중복 검사
    boolean emailExists = memberDao.isEmailExists(email);
    String nickname = m.getNickname();
    boolean nicknameExists = memberDao.isNicknameExists(nickname);

    if (emailExists && nicknameExists) {
        throw new Exception("이메일이 이미 사용 중입니다. 닉네임이 이미 사용 중입니다.");
    } else if (emailExists) {
        throw new Exception("이메일이 이미 사용 중입니다.");
    } else if (nicknameExists) {
        throw new Exception("닉네임이 이미 사용 중입니다.");
    }

    // 패스워드 암호화 후 DB 저장
    String salt = UUID.randomUUID().toString();
    byte[] originalHash = OpenCrypt.getSHA256(pwd, salt);
    String pwdHash = OpenCrypt.byteArrayToHex(originalHash);
    m.setPwd(pwdHash);
    saltDao.insertSalt(new SaltInfo(email, salt));
    memberDao.insertMember(m);
}

3. MemberController에서 예외 처리

MemberController에서는 회원가입 시 예외가 발생하면, 해당 예외 메시지를 확인하여 적절한 리턴 메시지를 반환. 이메일 중복, 닉네임 중복, 그리고 기타 오류를 각각 처리.

 

@PostMapping("signup")
public String insertMember(@RequestBody Member m) {
    try {
        memberService.insertMember(m);
        return "회원 가입 성공";
    } catch (Exception e) {
        e.printStackTrace();
        if (e.getMessage().contains("이메일이 이미 사용 중입니다.") && e.getMessage().contains("닉네임이 이미 사용 중입니다.")) {
            return "이메일 중복, 닉네임 중복";
        } else if (e.getMessage().contains("이메일이 이미 사용 중입니다.")) {
            return "이메일 중복";
        } else if (e.getMessage().contains("닉네임이 이미 사용 중입니다.")) {
            return "닉네임 중복";
        } else {
            return "회원 가입 실패에 실패했습니다. 다시 시도해주세요.";
        }
    }
}

4. 프론트엔드에서 예외 메시지 처리

프론트엔드에서는 signup API 호출 후, 리턴된 메시지에 따라 사용자에게 적절한 피드백을 전달.

 

const response = await signup(emailInput.value, passwordInput.value, nicknameInput.value);
if (response.data === "회원 가입 성공") {
    welcomeMessage.style.display = "flex";
} else if(response.data === "이메일 중복, 닉네임 중복") {
    emailErrorMsg.innerHTML = `이미 가입된 이메일입니다.`;
    nicknameErrorMsg.innerHTML = `이미 사용중인 닉네임입니다.`;
} else if(response.data === "이메일 중복") {
    emailErrorMsg.innerHTML = `이미 가입된 이메일입니다.`;
} else if(response.data === "닉네임 중복") {
    nicknameErrorMsg.innerHTML = `이미 사용중인 닉네임입니다.`;
} else {
    alert("회원가입에 실패했습니다. 다시 시도해주세요.");
}

회원가입 시 이메일과 닉네임 중복 검사를 추가하여, 사용자가 이미 존재하는 이메일이나 닉네임으로 가입하지 않도록 방지할 수 있게 됨.

'[LG 유플러스] 유레카 > 프로젝트' 카테고리의 다른 글

[번개장터 클론코딩][Spring Boot] 이미지 저장 방식, 사용자 인증, 로그인 유효시간 및 토큰 관리  (0) 2025.03.19
[번개장터 클론코딩][JS] 기본 구조, 로그인, 회원가입 구현, SPA  (0) 2025.03.15
[번개장터 클론코딩][Spring Boot] 로그인, 회원가입 기능 구현  (0) 2025.03.14
  1. 1. MemberDao에 중복 검사 메서드 추가
  2. 2. MemberService에서 중복 검사 실행
  3. 3. MemberController에서 예외 처리
  4. 4. 프론트엔드에서 예외 메시지 처리
'[LG 유플러스] 유레카/프로젝트' 카테고리의 다른 글
  • [번개장터 클론코딩][Spring Boot] 이미지 저장 방식, 사용자 인증, 로그인 유효시간 및 토큰 관리
  • [번개장터 클론코딩][JS] 기본 구조, 로그인, 회원가입 구현, SPA
  • [번개장터 클론코딩][Spring Boot] 로그인, 회원가입 기능 구현
leeemingyu
leeemingyu
leeemingyu
ye
leeemingyu

블로그 메뉴

  • GitHub
  • Instagram
    전체
    오늘
    어제
    • 전체보기 (68)
      • GDSC (4)
        • 실시간 채팅 구현 (4)
      • [LG 유플러스] 유레카 (63)
        • Today I Learned (37)
        • 코딩테스트 (22)
        • 프로젝트 (4)

    공지사항

    인기 글

    최근 댓글

    최근 글

    hELLO · Designed By 정상우.v4.2.2
    leeemingyu
    [번개장터 클론코딩][Spring Boot] 회원가입 시 이메일 및 닉네임 중복 검사 구현
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.