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에 남지 않음
단점
• 인증번호를 요청한 브라우저에서 계속 진행해야 함
• 서버를 재시작하면 인증정보가 사라질 수 있음
• 서버가 여러 대라면 세션 공유가 필요함
• 사용자가 쿠키를 삭제하면 인증 상태도 사라짐
'- > -' 카테고리의 다른 글
| [프로그래밍 패러다임] 절차지향과 객체지향은 무엇이 다를까? (0) | 2026.08.25 |
|---|---|
| [프로그래밍 패러다임] 객체란 무엇이고, 왜 Java는 객체지향 언어일까? (0) | 2026.08.25 |
| [CSS] Text Module: white-space, word-break, overflow-wrap (0) | 2026.08.07 |
| get post (0) | 2026.07.31 |
| 이것저것 (4) | 2026.06.26 |