ROI · P8 · 보안축(성능 트랙 밖) — 임팩트 높음(보안) / 노력 M
탈퇴 후 잔여 토큰 접근 보안 창. 성능 순위와 별개로 위험도 최상 — 우선 처리 권장.
왜
WithdrawalService 가 (1) DB cascade 커밋 → (2) Redis refresh/withdrawn 토큰 무효화 순으로 실행한다. (1) 커밋 후 (2)가 예외를 던지면 요청은 500 이지만 DB 상 이미 탈퇴 완료라, refresh/access 토큰이 무효화되지 않은 채 남는다. 남은 access token 수명 동안 탈퇴 회원이 접근 가능한 보안 창이 열린다.
무엇을
- 순서 재배치("토큰 무효화 → DB cascade") 또는 markWithdrawn 실패를 warn 로그 + 보정 경로로 관측 가능하게.
- 현재 S3(
:50)만 runCatching best-effort 이고 토큰 무효화는 아님 — 이 비대칭 정리.
- 위치:
WithdrawalService.kt:34-45.
출처: 토너먼트·user 도메인 성능·안정성 전수조사
왜
WithdrawalService가 (1) DB cascade 커밋 → (2) Redis refresh/withdrawn 토큰 무효화 순으로 실행한다. (1) 커밋 후 (2)가 예외를 던지면 요청은 500 이지만 DB 상 이미 탈퇴 완료라, refresh/access 토큰이 무효화되지 않은 채 남는다. 남은 access token 수명 동안 탈퇴 회원이 접근 가능한 보안 창이 열린다.무엇을
:50)만runCatchingbest-effort 이고 토큰 무효화는 아님 — 이 비대칭 정리.WithdrawalService.kt:34-45.출처: 토너먼트·user 도메인 성능·안정성 전수조사