4b86b2a660
- server-dev start/stop/deploy 및 Gitea push 자동 배포 - local-dev 로컬 개발 환경 Co-authored-by: Cursor <cursoragent@cursor.com>
4.0 KiB
4.0 KiB
chatbotApp — 카카오 인앱·브라우저 단독 챗봇 UI (Next.js + SSE)
chatbotAdmin의 챗봇 테스트 화면과 별개인, 고속도로 이용객 대상 단독 웹 챗봇입니다.
| 구분 | 경로 | 기술 |
|---|---|---|
| chatbotApp (기존) | /chatbot/app/ |
Next.js 14 · 카카오톡 스타일 · SSE |
| chatbotApp (AI 모드) | /chatbot/ai/ |
Next.js 14 · 정부24 AI 스타일 · SSE |
| chatbotApp (배너) | /chatbot/banner/ |
검색창 + 드롭다운 · iframe/embed.js 임베드 |
| chatbotApp (샘플) | /chatbot/sample/ |
국민참여로 UI + banner iframe 데모 |
| chatbotAdmin ChatPage | /chatbot/admin/ |
Admin RAG 디버그 |
운영 URL
https://chatbot.exdev.co.kr/chatbot/app/ ← 기존 UI
https://chatbot.exdev.co.kr/chatbot/ai/ ← AI 모드 UI
https://chatbot.exdev.co.kr/chatbot/banner/ ← 배너 검색 (임베드)
https://chatbot.exdev.co.kr/chatbot/sample/ ← 국민참여로 샘플
아키텍처
flowchart TD
APP[브라우저/카카오 인앱] -->|/chatbot/ask/stream SSE, /chatbot/ask JSON| SK[kakaoChatbotSkill /web/ask +/stream]
SK --> RAG[RAG :28012 /agent/chat]
RAG --> OUT([answer + 카드 + faqUrls])
- 웹 입력 전용 경로: chatbotApp 질의는 kakaoChatbotSkill의
/web/ask또는/web/ask/stream을 거쳐 RAG Agent(/agent/chat)로 전달됩니다. - 속도: SSE는 kakao-skill에서 전체 답변 완료 후
done이벤트로 전달 (카카오 callback과 유사). - 안정성: JSON API도 유지해 스트림 실패 시 일반 응답을 받을 수 있습니다.
- FAQ/세션:
/chatbot/faq/*,/chatbot/session/*는 웹 UI 보조 API입니다.
botId · 세션 정책 (현재)
- 웹앱은
sessionStorage에 저장한 랜덤botId(web-...,src/lib/session.ts)를 사용하며, 대화마다 새 botId로 시작하는 무상태 정책입니다. - 카카오톡과 세션을 연계하지 않으며, 웹 진입 시 과거 대화를 화면에 복원하지 않습니다(
useChatSession은 빈 상태로 시작,/web/ask만 호출). - 서버(MongoDB
chat_history)에는 botId별 이력이 남지만, botId가 매번 새로 발급되므로 사실상 새 세션입니다. 정책 배경·향후 세션 연계(서명 토큰) 옵션:../SYSTEM_ARCHITECTURE.md,../IMPROVEMENTS.md.
로컬 단독 실행 (nginx :8089)
포트:
8089= chatbotApp 전용. Caddy HTTP는9089(CADDY_HTTP_PORT).
GoldenChart 로그인이 보이면docker stop ex-chatbot-caddy후./start.sh재실행.
cd chatbotApp
./start.sh
# → http://localhost:8089/chatbot/app/
RAG API(:28012)가 기동되어 있어야 질의·SSE가 동작합니다.
로컬 UI + 원격 API(기본): ./start.sh — nginx가 /chatbot/*를 https://chatbot.exdev.co.kr로 프록시합니다. 로컬 LLM/RAG는 필요 없습니다.
로컬 RAG로 테스트하려면:
CHATBOT_API_UPSTREAM=http://host.docker.internal:28012/chatbot/ \
CHATBOT_API_HOST=host.docker.internal \
./start.sh
개발
cd chatbotApp/web
npm install
npm run dev # http://localhost:3000 — /chatbot/* 는 exdev.co.kr 로 프록시 (next.config rewrites)
배포 빌드
cd chatbotApp
chmod +x build.sh
./build.sh # → public/ (VERSION 3.0.0)
프로젝트 루트에서 RAG 반영:
./scripts/reload-chatbot-app.sh
# 또는
./remote-start-chatbot.sh
API
| Method | Path | 설명 |
|---|---|---|
| POST | /chatbot/ask/stream |
SSE 스트리밍 질의 (웹앱 기본) |
| POST | /chatbot/ask |
JSON 응답 |
| GET | /chatbot/faq/popular |
FAQ |
| POST | /chatbot/session/start |
세션 추적 |
파일 구조
chatbotApp/
├── web/ # Next.js 소스
│ ├── src/
│ └── scripts/export-public.mjs
├── public/ # 빌드 산출물 (배포)
├── build.sh
├── nginx/
└── docker-compose.yml