User 서비스 내부 시퀀스 다이어그램 개선

- 회원가입: 사업자번호 암호화 위치 명시, 성능 지표 추가, 에러 코드 표준화 (USER_001, USER_002)
- 로그인: 비동기 처리 설명 추가, Rate Limiting 보안 강화, 성능 목표 추가, 에러 코드 표준화 (AUTH_001)
- 프로필수정: 트랜잭션 범위 명확화, Optimistic Locking 추가, 동시성 제어, 에러 코드 표준화 (USER_003~005)
- 로그아웃: API Gateway 연계 시나리오, 로그아웃 이벤트 발행, 성능 목표 추가, 에러 코드 표준화 (AUTH_002)
- .gitignore 추가: .npm-global 및 기타 임시 파일 제외

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
박세원
2025-10-22 14:37:25 +09:00
parent d876763477
commit f7f16e2d18
5 changed files with 196 additions and 47 deletions
@@ -36,7 +36,7 @@ deactivate JwtProvider
alt JWT 토큰 무효
AuthService --> Controller: throw InvalidTokenException\n("유효하지 않은 토큰입니다")
Controller --> Client: 401 Unauthorized\n{"error": "유효하지 않은 토큰입니다"}
Controller --> Client: 401 Unauthorized\n{"code": "AUTH_002",\n"error": "유효하지 않은 토큰입니다"}
deactivate AuthService
deactivate Controller
@@ -70,6 +70,14 @@ else JWT 토큰 유효
- 만료되지 않은 JWT 토큰을 강제로 무효화
- Redis에 토큰을 Blacklist에 추가 (TTL: 남은 만료 시간)
- API Gateway에서 Blacklist 확인
**API Gateway 연계 시나리오**
1. 로그아웃: AuthService가 Blacklist에 토큰 추가
2. 후속 API 요청: API Gateway가 Blacklist 확인
- Redis GET jwt:blacklist:{token}
- 존재하면: 401 Unauthorized 즉시 반환
- 존재하지 않으면: 백엔드 서비스로 라우팅
3. 만료 시간 도달: Redis TTL 만료로 자동 삭제
end note
AuthService -> JwtProvider: getRemainingExpiration(token)
@@ -85,9 +93,26 @@ else JWT 토큰 유효
deactivate Redis
end
== 4단계: 응답 반환 ==
== 4단계: 로그아웃 이벤트 발행 (선택적) ==
AuthService -> AuthService: 로그아웃 성공 로그 기록\n(userId, timestamp)
note right of AuthService
**로그아웃 로깅 및 이벤트**
- 감사 로그 기록: userId, timestamp, IP
- 이벤트 발행: LOGOUT_SUCCESS
- 분석 데이터 수집: 세션 지속 시간, 활동 통계
end note
AuthService -> AuthService: 로그아웃 성공 로그 기록\n(userId, timestamp, sessionDuration)
AuthService ->> AuthService: publishEvent(LOGOUT_SUCCESS)
note right of AuthService
**이벤트 활용**
- 비동기 이벤트 처리
- 분석 시스템 연동
- 감사 로그 저장소 전송
end note
== 5단계: 응답 반환 ==
AuthService --> Controller: LogoutResponse\n(success: true)
deactivate AuthService
@@ -101,14 +126,30 @@ note over Controller, Redis
- JWT 토큰 Blacklist: 만료 전 토큰 강제 무효화
- 멱등성 보장: 중복 로그아웃 요청에 안전
- 세션 완전 삭제: Redis에서 세션 정보 제거
- 감사 로그: userId, timestamp, IP, sessionDuration 기록
**API Gateway 연계**
- Blacklist 확인: GET jwt:blacklist:{token}
- 존재 시: 401 Unauthorized 즉시 반환
- TTL 자동 관리: 만료 시간 도달 시 자동 삭제
**클라이언트 측 처리**
- 프론트엔드: LocalStorage 또는 Cookie에서 JWT 토큰 삭제
- 로그인 화면으로 리다이렉트
- 모든 인증 헤더 제거
**성능 최적화**
**성능 목표**
- Redis 삭제 연산: O(1) 시간 복잡도
- 응답 시간: 0.1초 이내
- 평균 응답 시간: 0.1초 이내
- P95 응답 시간: 0.2초 이내
**이벤트 처리**
- LOGOUT_SUCCESS 이벤트 발행 (비동기)
- 감사 로그 저장소 전송
- 분석 데이터 수집
**에러 코드**
- AUTH_002: JWT 토큰 무효
end note
@enduml