📊 작업 우선순위
해당하는 우선순위에 체크해 주세요.
♻️ 리팩토링 목적 및 대상
어떤 코드를 왜 개선하는지 설명해 주세요.
연관 이슈 번호 : #이슈 번호
연관 도메인 : Identity, Payment
As-Is (변경 전) : 이메일 인증 및 리프레시 토큰을 RDB에 저장하고 스케줄러로 만료 데이터를 정리했습니다. 토큰 소비와 DB 트랜잭션 간 원자성 및 Redis Cluster 대응이 없었습니다.
To-Be (변경 후) : 임시 인증 데이터를 Redis TTL 기반으로 관리합니다. Lua 원자 처리, 인증번호 해시 저장, 토큰 예약·복구, 커밋 후 재시도 및 Redis Cluster 대응을 적용했습니다.
💻 상세 작업 내용
클린 아키텍처 구조에 맞춰 변경된 계층과 내용을 작성합니다.
추가 작업
- 인증번호를 평문 대신 SHA-256 해시로 저장했습니다.
- 리프레시 토큰과 인증 토큰을 해시 기반 Redis 키로 관리합니다.
- TTL, 예약 시간, 일일 제한 및 재시도 횟수를
application.yaml 설정으로 분리했습니다.
- 프로파일 미설정 시
PgClient 빈이 누락되는 기동 오류를 수정했습니다.
- 운영 환경에서 Mock PG가 사용되지 않도록
prod 프로파일을 분리했습니다.
🚨 검증 및 사이드 이펙트 확인 (TestCode)
리팩토링 전후의 회귀 여부를 검증했습니다.
검증 항목
- 인증번호 평문 미저장
- Redis Lua 원자 처리
- PROCESSING 예약 만료 및 복구
- DB 롤백 시 예약 해제
- DB 커밋 후 Redis 완료 재시도
- Redis Cluster 키 구성 및 동적 키 접근 방지
- 설정된 비밀번호 초기화 일일 제한 적용
- 기본 및 운영 프로파일 ApplicationContext 기동 확인
전체 테스트 122개 중 119개가 통과했습니다. 기존 NoticeCreatePolicyTest 3개는 AdminValidationPort 주입 누락으로 실패하며 이번 변경과는 무관합니다.
⚠️ 확인 사항
다른 도메인 및 프론트엔드 연동 영향을 확인했습니다.
- API 응답값(
response DTO) 형태의 변경이 있나요? (No)
- 만약 변경되었다면, 프론트엔드 개발자에게 공유되었나요? (
해당 없음)
운영 환경에는 아직 실제 PG 구현체가 없습니다. prod 프로파일에서는 서버가 정상 기동되지만 결제 승인 요청은 명시적으로 실패합니다.
📊 작업 우선순위
P0: 서비스 핵심 동작P1: 운영 및 확장 기능P2: 부가적인 고도화 기능♻️ 리팩토링 목적 및 대상
연관 이슈 번호: #이슈 번호연관 도메인: Identity, PaymentAs-Is (변경 전): 이메일 인증 및 리프레시 토큰을 RDB에 저장하고 스케줄러로 만료 데이터를 정리했습니다. 토큰 소비와 DB 트랜잭션 간 원자성 및 Redis Cluster 대응이 없었습니다.To-Be (변경 후): 임시 인증 데이터를 Redis TTL 기반으로 관리합니다. Lua 원자 처리, 인증번호 해시 저장, 토큰 예약·복구, 커밋 후 재시도 및 Redis Cluster 대응을 적용했습니다.💻 상세 작업 내용
Model/Policy: 인증번호 SHA-256 해시 검증 및PROCESSING상태를 추가했습니다.UseCase/Command: 외부 요청 및 명령 객체 변경은 없습니다.Service: 회원가입과 비밀번호 변경 시 인증 토큰을 예약하고 DB 커밋 결과에 따라 완료 또는 복구하도록 변경했습니다.Port/Adapter: 이메일 인증 및 리프레시 토큰 Redis Adapter를 추가했습니다. Lua 원자 처리와 Redis Cluster hash tag를 적용했습니다.Repository: JPA 인증 저장소를 Redis 저장소로 교체하고 예약, 완료, 복구 및 발송 제한 기능을 추가했습니다.Controller: 변경 사항이 없습니다.response/request: DTO 및 API 계약 변경 사항이 없습니다.추가 작업
application.yaml설정으로 분리했습니다.PgClient빈이 누락되는 기동 오류를 수정했습니다.prod프로파일을 분리했습니다.🚨 검증 및 사이드 이펙트 확인 (TestCode)
검증 항목
전체 테스트 122개 중 119개가 통과했습니다. 기존
NoticeCreatePolicyTest3개는AdminValidationPort주입 누락으로 실패하며 이번 변경과는 무관합니다.responseDTO) 형태의 변경이 있나요? (No)해당 없음)운영 환경에는 아직 실제 PG 구현체가 없습니다.
prod프로파일에서는 서버가 정상 기동되지만 결제 승인 요청은 명시적으로 실패합니다.