Skip to content

[REFACTOR] 인증 Redis 전환 및 토큰 처리 안정성 강화 #154

@Yoonjongho1122

Description

@Yoonjongho1122

📊 작업 우선순위

해당하는 우선순위에 체크해 주세요.

  • P0 : 서비스 핵심 동작
  • P1 : 운영 및 확장 기능
  • P2 : 부가적인 고도화 기능

♻️ 리팩토링 목적 및 대상

어떤 코드를 왜 개선하는지 설명해 주세요.

  • 연관 이슈 번호 : #이슈 번호
  • 연관 도메인 : Identity, Payment
  • As-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 계약 변경 사항이 없습니다.

추가 작업

  • 인증번호를 평문 대신 SHA-256 해시로 저장했습니다.
  • 리프레시 토큰과 인증 토큰을 해시 기반 Redis 키로 관리합니다.
  • TTL, 예약 시간, 일일 제한 및 재시도 횟수를 application.yaml 설정으로 분리했습니다.
  • 프로파일 미설정 시 PgClient 빈이 누락되는 기동 오류를 수정했습니다.
  • 운영 환경에서 Mock PG가 사용되지 않도록 prod 프로파일을 분리했습니다.

🚨 검증 및 사이드 이펙트 확인 (TestCode)

리팩토링 전후의 회귀 여부를 검증했습니다.

  • 기존 정상 동작 테스트 케이스 통과 확인
  • 예외(Exception) 처리 로직 유지 및 예외 검증 통과 확인
  • 변경된 구조에 맞춘 새로운 단위 테스트 작성

검증 항목

  • 인증번호 평문 미저장
  • Redis Lua 원자 처리
  • PROCESSING 예약 만료 및 복구
  • DB 롤백 시 예약 해제
  • DB 커밋 후 Redis 완료 재시도
  • Redis Cluster 키 구성 및 동적 키 접근 방지
  • 설정된 비밀번호 초기화 일일 제한 적용
  • 기본 및 운영 프로파일 ApplicationContext 기동 확인

전체 테스트 122개 중 119개가 통과했습니다. 기존 NoticeCreatePolicyTest 3개는 AdminValidationPort 주입 누락으로 실패하며 이번 변경과는 무관합니다.

⚠️ 확인 사항

다른 도메인 및 프론트엔드 연동 영향을 확인했습니다.

  • API 응답값(response DTO) 형태의 변경이 있나요? (No)
  • 만약 변경되었다면, 프론트엔드 개발자에게 공유되었나요? (해당 없음)

운영 환경에는 아직 실제 PG 구현체가 없습니다. prod 프로파일에서는 서버가 정상 기동되지만 결제 승인 요청은 명시적으로 실패합니다.

Metadata

Metadata

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions