-/-

이메일 인증받기

106. 2026. 8. 3. 15:25

01 - 1. 프로젝트에 추가될 구성

더보기

join.jsp 또는 join.html
├─ 이메일 입력창
├─ 인증번호 받기 버튼
├─ 인증번호 입력창
└─ 인증번호 확인 버튼

member.js
├─ 인증번호 발송 API 호출
└─ 인증번호 확인 API 호출

MemberController
├─ POST /member/email-verification/send
├─ POST /member/email-verification/verify
└─ POST /member/join에서 인증 완료 여부 재검사

EmailService
├─ 인증번호 생성
└─ 인증 메일 발송

HttpSession
├─ 인증 대상 이메일
├─ 인증번호
├─ 만료시간
└─ 인증 완료 여부

01 - 2. 전체 구조

더보기

EmailVerificationService
├─ 인증번호 생성
├─ 이메일 발송
├─ 세션에 인증정보 저장
├─ 인증번호 비교
├─ 만료시간 검사
├─ 실패 횟수 검사
└─ 인증정보 제거

MemberController
├─ 회원가입 인증번호 발송
├─ 회원가입 인증번호 확인
├─ 회원가입 처리
├─ 비밀번호 찾기 인증번호 발송
├─ 비밀번호 찾기 인증번호 확인
└─ 비밀번호 변경

MemberMapper
└─ 인증 성공 후 비밀번호 변경 SQL

02. 반드시 넣어야 하는 보안 조건

더보기

• 인증번호 유효시간 5분
• 인증번호는 SecureRandom으로 생성
• 이메일 변경 시 인증 완료 상태 초기화
• 가입 처리 시 서버에서 인증 여부 재확인
• 가입 완료 후 인증정보 삭제
• 이미 가입된 이메일에는 인증번호를 보내지 않음
• 인증번호 재발송 시간 제한
• 인증번호 입력 실패 횟수 제한

03. 회원가입 인증 흐름

더보기

이메일 입력
   ↓
인증번호 발송
   ↓
인증정보를 세션에 5분간 저장
   ↓
사용자가 인증번호 입력
   ↓
인증 성공 여부를 세션에 기록
   ↓
회원가입 요청
   ↓
세션의 인증 이메일과 가입 이메일 비교
   ↓
가입 성공 후 세션 인증정보 제거

04. 세션을 이용하여 비밀번호 찾기

더보기

가입된 이메일 입력
   ↓
인증번호 발송
   ↓
인증번호를 세션에 저장
   ↓
인증번호 확인
   ↓
인증에 성공하면 비밀번호 변경 권한 부여
   ↓
새 비밀번호 입력
   ↓
암호화한 후 DB의 비밀번호 변경
   ↓
세션 인증정보 제거

05. 세션  방식의 장점과 단점

더보기


장점

DB테이블을 만들지 않아도 됨

DB에 불필요한 임시 데이터가 쌓이지 않음

구현 속도가 빠름

인증 조회를 위해 DB를 호출하지 않아도 됨

브라우저별로 인증 과정이 분리가 됨

비밀번호 찾기에도 재사용할 수 있음

인증번호가 DB에 남지 않음

 

단점

• 인증번호를 요청한 브라우저에서 계속 진행해야 함
• 서버를 재시작하면 인증정보가 사라질 수 있음
• 서버가 여러 대라면 세션 공유가 필요함
• 사용자가 쿠키를 삭제하면 인증 상태도 사라짐