본문으로 건너뛰기

KR Kakao 인증 이벤트 스토밍

1. 명령 → 도메인 이벤트 흐름

단계명령/이벤트설명주체
1InitiateKakaoAuthCommand사용자가 Kakao 로그인을 선택하면 실행된다.AuthController
2KakaoAuthSessionCreatedEventKakaoAuthSession Aggregate가 state/nonce를 생성하고 Redis에 저장 완료.InitiateKakaoAuthService
3CompleteKakaoAuthCommandKakao 콜백 URL에서 authorization code와 state를 전달한다.AuthCallbackController
4KakaoAuthCompletedEvent토큰 교환 성공, 사용자 연결 및 JWT 발급 완료.CompleteKakaoAuthService
5ExternalAuthLinkedEvent신규/기존 사용자 계정에 Kakao ID 연결.LinkKakaoIdentityPolicy
6ExternalAuthLinkedIntegrationEventNotification/Analytics 등 외부 도메인으로 전달.AuthEventPublisher
7KakaoRefreshTokenRotatedEvent만료 임박 시 토큰 갱신 성공.KakaoTokenRotationService
8KakaoAuthSessionExpiredEventTTL을 넘긴 state/nonce를 정리.만료 워커

2. 실패 시나리오 브랜치

  • CompleteKakaoAuthCommand 실행 도중 Kakao API 5xx → KakaoProviderUnavailableEvent 발행, Circuit Breaker trip, 사용자에게 재시도 안내.
  • state 불일치 → KakaoStateMismatchError 발생, 이벤트 발행 없음, 감사 로그 기록.
  • idempotency 키 충돌(재처리) → KakaoAuthDuplicateCallbackEvent 기록 후 흐름 종료.

3. 사용자 여정 (Given/When/Then)

  • Given 사용자가 로그인 화면에서 Kakao 로그인을 선택했고, state가 Redis에 저장되어 있다.
    When Kakao에서 authorization code와 일치하는 state를 콜백으로 전달한다.
    Then KakaoAuthCompletedEvent가 발행되고, JWT 액세스/리프레시 토큰이 TimeMachine 기반 만료 시간과 함께 발급된다.

  • Given 사용자가 이미 Kakao 계정과 연결되어 있다.
    When 동일한 Kakao ID로 다른 계정에 연결을 시도하면
    Then KakaoIdentityAlreadyLinkedError가 반환되고, 기존 연결을 해제하기 전까지 재시도가 차단된다.

4. 읽기 모델 및 프로젝션

  • KakaoAuthReadModel: 현재 인가 요청 상태, TTL, redirect URI 등을 담아 UI에서 폴백 안내를 보여준다.
  • ExternalAuthLinkProjection: 사용자별 연결된 외부 공급자 목록. 사용자 설정 화면에서 사용.
  • KakaoTokenLedger: 토큰 갱신/만료 이력을 저장해 감사 및 장애 분석에 활용.