E2E 시나리오/화면 흐름
이 문서로 해결할 질문
- 사용자가 앱에 진입해 레시피·챗봇·보관함을 이용하는 흐름은 무엇인가요?
- OAuth 로그인은 어디서 시작하고 어디로 복귀하나요?
- 보호 라우트(로그인 필수)는 어디인가요?
앱 구조 (하단 탭)
| 탭 | 대표 URL | 렌더링 |
|---|---|---|
| 레시피 | /recipe | ISR + CSR(개인화 추천) |
| 챗봇 | /chatbot/list | CSR (보호 라우트) |
| 보관함 | /inventory/ingredients/owned | CSR (보호 라우트) |
| 마이페이지 | /mypage | CSR |
루트 /는 /recipe로 리다이렉트합니다.
화면 전환 맵
시나리오 1: OAuth 로그인
- 실패 시 Producer가
/oauth/error로 302 리다이렉트합니다. next경로 안전 검증은 백엔드가 담당합니다(resolveSafeNextPath).- 상세: 인증, 인증/인가
시나리오 2: 레시피 탐색 → 상세
/recipe에서는 공개 섹션(ISR)과 로그인 시 개인화 추천 섹션(CSR)을 제공합니다./recipe/search에서는 검색어 기반 SSR 결과를 표시합니다./recipe/[id]는 온디맨드 ISR 상세이며, 조회 시recipe.view이벤트를 발행합니다.- 관심 추가 시
recipe.favorites_add가 발행되어 추천 점수가 갱신됩니다.
→ 추천 시스템
시나리오 3: 보관함 재료 관리
/inventory/ingredients/owned에서 보유 재료 CRUD를 수행합니다./ingredient/filter?type=owned에서 재료 추가 UI를 제공합니다.- 변경 시 Producer API가 Kafka
user-events를 발행하고, Consumer가 Inventory·추천·캐시 무효화를 처리합니다.
Proxy는 /chatbot, /inventory, /mypage/*(루트 /mypage 제외)에서 refreshToken 쿠키 존재 여부를 검사합니다.
시나리오 4: 챗봇 대화
/chatbot/list에서 대화 목록을 표시합니다./chatbot/[id]에서 메시지를 전송하고 Producer SSE를 구독합니다.- Producer가 Kafka
chatbot-requests를 발행하면 Consumer가 GPT를 처리하고, Redis 스트림을 거쳐 SSE로 전달합니다. - 턴 완료 시 크레딧이 멱등하게 차감됩니다.
→ 챗봇 UI/스트리밍, 챗봇/SSE, 챗봇 처리
렌더링 전략 요약
| 전략 | 페이지 예 |
|---|---|
| ISR | /recipe, /recipe/filter, /ingredient/filter |
| 온디맨드 ISR | /recipe/[id] |
| SSR | /recipe/search |
| CSR | 챗봇, 보관함, 마이페이지, 인증 |