Skip to content

Conversation

@HyunwooYi
Copy link
Collaborator

-closes #115

구현 내용❗️

  • 이메일 인증 로직을 Redis 기반으로 리팩토링

  • CQRS 패턴을 적용하여 인증번호 발송과 인증 검증 로직 분리

    • EmailCommandService : 인증번호 생성 및 이메일 발송
    • EmailQueryService : Redis에서 인증번호 검증
    • EmailVerificationService : 인증번호 저장 및 TTL 관리
    • EmailCodeGenerator : 인증번호 생성 유틸
  • UserController의 이메일 인증 API 수정

    • /users/me/info/identity-verification
    • /users/me/info/certification
  • UserCommandService의 인증번호 검증 로직 제거 → 컨트롤러에서 인증 후 서비스 호출

  • FindController의 인증번호 검증도 Redis 기반으로 변경

  • 기존 EmailService 클래스 제거

요구사항 분석 ❗️

작업 내용 1

  • 인증번호를 서버에서 관리하던 기존 방식(EmailService.ePw) 제거
  • Redis를 활용하여 인증번호를 이메일별로 저장하고 TTL(5분)을 적용

작업 내용 2

  • CQRS 적용으로 서비스 책임을 명확히 분리
    • 명령(Command): 이메일 발송 및 인증번호 저장
    • 조회(Query): 인증번호 검증
  • 컨트롤러에서 인증 검증 후 UserCommandService 호출하도록 구조 변경

구현 고민사항 ❗️

고민사항 1

상세설명

고민사항 2

상세설명

...

@HyunwooYi HyunwooYi self-assigned this Aug 1, 2025
@HyunwooYi HyunwooYi added ♻️ refac 코드 리팩토링 🐞 fix 버그 고침 labels Aug 1, 2025
@HyunwooYi HyunwooYi linked an issue Aug 1, 2025 that may be closed by this pull request
2 tasks
@HyunwooYi
Copy link
Collaborator Author

(1) FindInfoService - checkEmail
[변경 이유]
기존에는 EmailService.ePw를 통한 정적 인증번호 검증 방식을 사용하고 있었으나 다중 사용자 환경에서 인증번호 충돌 가능성이 있어 Redis 기반 인증으로 전환했습니다.

[변경 내용]

  • emailCommandService.sendVerificationCode(email) 메서드 호출 → 인증번호 생성 및 Redis 저장
  • 메서드에서 인증번호 발송 후 serialId 반환 로직 유지
  • 인증번호 발송 실패 시 UserErrorCode.SEND_CERTIFICATION_NUMBER 반환

(2) LoginController - join
[변경 이유]
회원가입 시 EmailService.ePw를 통한 정적 인증 검증 방식을 제거하고 Redis 기반 인증 검증을 적용했습니다.

[변경 내용]

  • emailQueryService.verifyCode(email, certificationNumber) 호출을 통해 인증번호 검증 수행
  • 인증 성공 시 loginService.join 호출
  • 인증 실패 시 UserErrorCode.CERTIFICATION_NUMBER_MISMATCH 반환

(3) LoginController - identity-verification && certificationNumber
[변경 이유]
기존의 EmailService.ePw 제거 후 이메일 인증 및 인증번호 확인 로직을 Redis 기반으로 재구현했습니다.

[변경 내용]

  • identityVerification: emailCommandService.sendVerificationEmail 호출로 인증번호 발송
  • certificationNumber: emailQueryService.verifyCode 호출로 Redis에서 인증번호 검증
  • 인증 성공 시 CommonSuccessCode.OK 반환, 실패 시 UserErrorCode.CERTIFICATION_NUMBER_MISMATCH 반환

=> 로그인 회원가입 테스트 완료

@HyunwooYi HyunwooYi changed the title Feat/#115 Feat/#115 이메일 인증 로직 Redis 기반으로 리펙토링 Aug 1, 2025
@HyunwooYi HyunwooYi merged commit 67173a4 into develop Aug 1, 2025
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🐞 fix 버그 고침 ♻️ refac 코드 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[fix] 메일 인증번호 저장 방식을 Redis 기반으로 수정

2 participants