0) 목표와 전제
목표
- *분산 환경(ECS 2대 이상)**에서도 인증/인가가 일관되게 동작
- 단일 세션 강제: 새 로그인 시 기존 세션을 “즉시” 끊는다
- 유휴(Idle) 자동 로그아웃: 일정 시간 요청 없으면 자동 로그아웃(서버 기준)
- Refresh 탈취 대응: rotation + reuse detection + 즉시 차단(필요시)
- *실시간(WebSocket/SSE)**에서도 인증이 안전하게 동작(즉시성 포함)
- 보안 이벤트를 Kafka/Mongo로 확장 가능(감사/탐지/알림)
전제(결정사항)
- 모듈: 2모듈 고수
app-api: 보안/REST/WS/SSE/Outbox 기록
app-batch: 배치/Outbox 발행/Consumer/Purge
- 토큰:
- Access: Authorization 헤더(Bearer)
- Refresh: HttpOnly Secure 쿠키
- 정책:
- 단일 세션 강제(기존 로그인 있으면 강제 로그아웃)
- Idle 자동 로그아웃
- B안 채택: token_version + access jti 블랙리스트로 “즉시 차단”
- Redis 사용:
- 단일 세션 상태(Refresh)
- Idle TTL
- Access jti 블랙리스트
- (선택) token_version 캐시
1) 2모듈 원칙에 맞춘 책임 분리
1-1) app-api 모듈(메인 API) — 보안 핵심
- SecurityFilterChain + JWT Filter
- OAuth2 로그인 + SuccessHandler
- 토큰 발급/검증(Access/Refresh)
- 단일 세션 강제(기존 세션 즉시 종료)