로그인 에러 분석
카카오 로그인/로그아웃 이슈 종합 리포트
핵심 원인 요약
카카오 로그인 세션(24시간)이 만료된 상태에서 다양한 이유로 앱을 이탈 후 재로그인 시도 시 문제가 발생합니다.
- 앱 이탈 원인: 일반적인 로그아웃, 서버 배포 중 세션 유실, 프론트 에러 처리 등
- 발생 증상: 카카오 세션이 없는 상태에서 '카카오 빠른 로그인(노란 버튼)' 흐름이 깨지며 정상 작동하지 않음.
이슈 상세 및 분석
1. 카카오 세션 만료 시 빠른 로그인 실패
- 상황: 카카오 로그인 세션(24시간) 만료 후 재로그인 시도
- 증상: 카카오 빠른 로그인(노란 버튼) 미작동 (만료된 세션으로 인증 시도하여 실패)
2. IKEA vs 시대생 세션 만료 처리 비교
시대생 앱은 외부 브라우저를 사용하여 IKEA와 같은 '카카오톡 앱 경유 세션 복구' 흐름을 사용할 수 없습니다.
| 구분 | 선택지 | 동작 방식 | 비고 |
| IKEA | 머무르기 | 앱 내 페이지에서 세션 없이 새롭게 ID/PW 기반 로그인 시도 | ㅤ |
| ㅤ | 나가기 | 카카오톡 앱을 잠깐 실행(~0.3초) → 세션 정보 획득 → 앱 복귀 후 정상 로그인 | 시대생 적용 불가 |
3. WebView vs 외부 브라우저 문제 (중요)
두 앱 모두 WebView를 사용하지만, 로그인 페이지가 열리는 위치가 다릅니다.
- IKEA (앱 내 WebView): 카카오톡 2FA(2단계 인증) 시 앱 복귀 후에도 인증 상태가 유지됨.
- 시대생 (외부 브라우저): 2FA 처리 후 앱으로 돌아오면 기존 인증 시도 기록 자체가 캔슬됨.
💡 Action Item: 프론트엔드에서 카카오 로그인 페이지가 앱 내 WebView에서 열리도록 수정 필요.
4. (핵심?)카카오 세션 완전 종료
현재 시대생은 로그아웃 시 Keycloak + Redis 세션만 종료하며, 카카오 세션은 만료 시점까지 남아있습니다.
| 분류 | API / 방식 | 처리 주체 | 목적 및 효과 |
| 토큰 폐기 | POST /v1/user/logout | Backend | Access/Refresh 토큰 폐기 (브라우저 쿠키는 유지됨) |
| 세션 종료 | GET kauth.../oauth/logout | Frontend | 브라우저 로그아웃 리다이렉트 (브라우저 쿠키 삭제) |
💻 Backend (서버)
로그아웃 시 카카오 토큰 폐기 (POST /v1/user/logout) 연동 [코드 리뷰 대기]
Keycloak federated identity 조회 → 카카오 userId 추출 [코드 리뷰 대기]
멀티 세션 캐싱 문제 원인 파악 및 수정 [진행 중]
📱 Frontend (클라이언트)
[High] 카카오 로그인 페이지를 앱 내 WebView에서 열리도록 수정 (2FA 로그인 캔슬 방지)
[Mid] 로그아웃 시 카카오 브라우저 로그아웃 리다이렉트 처리 (kauth.kakao.com/oauth/logout)
[Low] OAuth URL 파라미터 (특히 prompt) IKEA 방식과 비교 검토
📚 Reference A: 카카오 OAuth 리다이렉트 흐름
📚 Reference B: 세션 & 토큰 생성 시점 및 구조
인증 흐름도 (Keycloak 브로커 기준)
⚠️ 카카오 세션 vs 토큰 분리 정책 (중요)
결론: 토큰을 폐기(백엔드)해도 브라우저 쿠키(프론트엔드)는 남고, 브라우저 쿠키를 지워도 토큰은 남습니다. 완전한 로그아웃을 위해서는 프론트와 백엔드의 처리가 결합되어야 합니다.
시나리오 분석 (로그아웃 처리 방식에 따른 결과)
현재 백엔드와 프론트엔드에서 각각 로그아웃 처리를 누락했을 때 발생하는 현상을 분석한 결과입니다.
시나리오 1: 백엔드(O) + 프론트엔드(X)
[현재 구현 상태] 서버에서 토큰 폐기는 호출하지만, 프론트에서 브라우저 로그아웃 리다이렉트를 하지 않는 경우
1. 로그아웃 실행 후 상태
| 항목 | 처리 상태 | 상세 설명 |
| Keycloak 세션 | ✅ | 정상 종료됨 |
| Redis 세션 | ✅ | 정상 종료됨 |
| 카카오 토큰 | ✅ | Access 및 Refresh 토큰 폐기 완료 |
| 브라우저 쿠키 | ❌ | 카카오 세션 쿠키가 기기에 그대로 남아있음 (24시간 유지) |
2. 재로그인 흐름 및 결과
- 💡 결론: 만료된 브로커 토큰(broker token)으로 인해 발생하는 로그인 장애는 해결되지만, 계정 전환 불가 문제와 세션 만료 시 로그인 실패 문제는 그대로 남습니다.
시나리오 2: 백엔드(X) + 프론트엔드(O)
[브라우저 로그아웃만 적용] 프론트에서 리다이렉트는 하지만, 서버에서 카카오 토큰 폐기를 하지 않는 경우
1. 로그아웃 실행 후 상태
| 항목 | 처리 상태 | 상세 설명 |
| Keycloak 세션 | ✅ | 정상 종료됨 |
| Redis 세션 | ✅ | 정상 종료됨 |
| 브라우저 쿠키 | ✅ | 카카오 세션 쿠키 정상 삭제됨 |
| 카카오 토큰 | ❌ | Access 및 Refresh 토큰이 서버(Keycloak)에 살아있음 |
2. 재로그인 흐름 및 결과
- 💡 결론: 클라이언트 측에서는 ID/PW를 새로 입력할 수 있어 계정 전환이 가능해진 것처럼 보이지만, 백엔드에 이전 사용자의 토큰이 남아있어 치명적인 데이터 권한/꼬임 문제를 유발할 수 있습니다.
결국 두 시나리오 모두 반쪽짜리 해결책이며, 백엔드의 토큰 폐기 + 프론트엔드의 브라우저 쿠키 삭제가 동시에 이루어져야 완벽한 로그아웃이 보장된다는 것을 명확히 보여줍니다.