한국항공대학교 곳곳에 흩어진 공지를 한곳에서 수집하고, 대상자별로 탐색하며, AI 챗봇으로 빠르게 찾아볼 수 있도록 만드는 공지 통합 플랫폼입니다.
KAU 주요 게시판 69개를 단일 스키마로 수집해 약 2,300건 규모의 JSON 스냅샷을 유지하고, 이를 SQLite DB로 atomic ingest해 FastAPI 백엔드, Next.js 프론트엔드, OpenAI 기반 RAG 챗봇으로 제공합니다. AWS Lightsail에 Docker Compose 기반으로 배포되며, 배포 환경에서는 내장 크롤러 스케줄러가 3시간마다 atomic publish로 데이터를 갱신합니다.
| 영역 | 경로 | 설명 |
|---|---|---|
| BackEnd | BackEnd/ |
FastAPI API 서버, 내장 크롤러, SQLite ingest, RAG |
| FrontEnd | FrontEnd/ |
Next.js 14 프론트엔드 (백엔드 API 프록시 BFF) |
| Crawler | Crawler/ |
독립 실행용 크롤러 패키지 |
| Presentation | Presentation/ |
발표 자료 및 페이지별 구성 계획서 |
flowchart LR
A[KAU Notice Boards] --> B[Crawler]
B --> C[Atomic JSON Snapshot]
C --> D[SQLite Ingest]
D --> E[FastAPI Backend]
E --> F[Next.js Frontend]
E --> G[Chat API + SSE Stream]
G --> H[OpenAI Responses API]
API는 SQLite를 우선 읽고, DB가 없거나 스키마가 다르면 JSON 스냅샷에서 자동 부트스트랩, 그래도 실패하면 JSON repository로 폴백합니다.
- Crawling: Python, requests, BeautifulSoup, unhwp (HWP/HWPX 파싱, MIT)
- Backend: FastAPI, Pydantic, SQLite(atomic ingest) + JSON 스냅샷 fallback
- Frontend: Next.js 14 App Router, TypeScript, Tailwind CSS, Markdown renderer
- AI / RAG: OpenAI Responses API (기본 모델
gpt-4.1-mini), 키워드 추출 + multi-turn history, SSE 단계 스트리밍 - Infra: Docker Compose, Caddy, AWS Lightsail, GitHub Actions 자동 배포
- Quality: pytest, retrieval eval, k6 부하 테스트
# 1. BackEnd
cd BackEnd
python3 -m pip install -e '.[dev]'
uvicorn app.main:app --reload --port 8000
# 2. Frontend
cd FrontEnd
yarn install && yarn dev브라우저에서 http://localhost:3000으로 접속합니다. RAG 챗봇을 켜려면 BackEnd .env에 RAG_ENABLED=true와 OPENAI_API_KEY를 설정합니다(둘 중 하나라도 없으면 로컬 키워드 검색으로 폴백). 자세한 실행/배포 방법은 각 모듈의 README를 참고하세요.
MVP가 AWS Lightsail에 실제 배포되어 운영 중입니다.
- 69개 공지 게시판 수집, 증분 크롤링으로 약 1분 30초에 갱신 (초기 전체 수집 대비 약 96% 단축)
- SQLite 기반 공지 목록·상세·검색, 대상자/중분류/세부 홈페이지 필터 제공
- RAG 챗봇: 키워드 추출 → SQLite 검색 → OpenAI 답변, multi-turn
history와 SSE 스트리밍(POST /api/chat/stream) 지원 - 공지
content는 Markdown으로 저장·렌더링 main브랜치 push 시 GitHub Actions가 Lightsail에 자동 배포- 내장 크롤러 스케줄러는 opt-in이며(
CRAWLER_SCHEDULER_ENABLED=true), Docker Compose 배포에서 활성화됩니다
- BackEnd README · Project Structure · API Spec · Deployment · RAG · ERD
- FrontEnd README · Classification · Chatbot
- Crawler README · Crawler Docs
- Presentation Plan
분산된 학교 공지를 단순히 모으는 데서 그치지 않고, 사용자 질문과 운영 데이터를 기반으로 점진 개선되는 공지 지식 시스템을 지향합니다. 재학생·대학원생·교육원 수강생·취업 준비생 모두 자신에게 필요한 공지를 한곳에서 놓치지 않고 확인할 수 있도록 만드는 것이 목표입니다.