달레 스터디 커뮤니티를 위한 AI 챗봇 서비스입니다.
dalestudy-chatbot/
├── frontend/ # React + TypeScript + Vite
├── backend/ # Cloudflare Worker (API + 프론트엔드 정적 파일 서빙)
├── data/ # JSON 데이터 파일
├── PLAN.md # 프로젝트 계획서
└── README.md # 이 파일
- Node.js 22+
- AI Gateway 토큰 (
backend/.dev.vars에AI_GATEWAY_TOKEN=...)
cd backend
npm install
npm run devwrangler dev가 프론트엔드를 빌드한 뒤 http://localhost:8787 에서 API와 화면을 함께 서빙합니다.
cd frontend
npm install
npm run devhttp://localhost:3000 에서 실행되고, /api 요청은 8787 포트의 Worker로 프록시됩니다.
src/components/ChatInterface.tsx- 메인 채팅 인터페이스src/components/MessageList.tsx- 메시지 리스트 컴포넌트src/components/ChatInput.tsx- 메시지 입력 컴포넌트src/api/index.ts- API 호출 함수들src/types/index.ts- TypeScript 타입 정의
src/index.ts- Worker 진입점 (/health,/api/chat,/api/search)src/chat.ts- 채팅 처리 (질문 분류 → 검색 → 답변 생성)src/services/llmService.ts- AI Gateway 경유 OpenAI 호출src/services/searchService.ts- Fuse.js 검색 서비스src/utils/dataLoader.ts- JSON 데이터 로더src/types/index.ts- TypeScript 타입 정의
data/study-projects.json- 스터디 프로젝트 및 FAQ 데이터
npm run dev # 로컬 Worker 실행 (wrangler dev)
npm run deploy # Cloudflare에 배포 (wrangler deploy)
npm run typecheck # 타입 체크
npm run lint # ESLint 실행npm run dev # 개발 서버 실행
npm run build # 프로덕션 빌드
npm run preview # 빌드된 파일 미리보기
npm run lint # ESLint 실행사용자 메시지를 처리하고 AI 응답을 반환합니다.
Request:
{
"message": "달레 스터디에 어떻게 참여하나요?"
}Response:
{
"message": "웹사이트에서 관심 있는 스터디를 선택하고...",
"sources": [...]
}키워드로 스터디 정보를 검색합니다.
Request:
GET /api/search?q=React 스터디
Response:
{
"query": "React 스터디",
"category": "study",
"results": [...]
}chat.dalestudy.com은 Cloudflare dalestudy 계정의 Worker chat으로 배포됩니다. main에 push하면 GitHub Actions가 프론트엔드 빌드와 함께 배포합니다. OpenAI 호출은 AI Gateway를 거치며, Worker secret AI_GATEWAY_TOKEN은 같은 이름의 org secret에서 배포할 때 넣습니다.
MIT License