Skip to content

KAU Notice Hub

한국항공대학교 곳곳에 흩어진 공지를 한곳에서 수집하고, 대상자별로 탐색하며, AI 챗봇으로 빠르게 찾아볼 수 있도록 만드는 공지 통합 플랫폼입니다.

Overview

KAU 주요 게시판 69개를 단일 스키마로 수집해 약 2,300건 규모의 JSON 스냅샷을 유지하고, 이를 SQLite DB로 atomic ingest해 FastAPI 백엔드, Next.js 프론트엔드, OpenAI 기반 RAG 챗봇으로 제공합니다. AWS Lightsail에 Docker Compose 기반으로 배포되며, 배포 환경에서는 내장 크롤러 스케줄러가 3시간마다 atomic publish로 데이터를 갱신합니다.

Project Map

영역 경로 설명
BackEnd BackEnd/ FastAPI API 서버, 내장 크롤러, SQLite ingest, RAG
FrontEnd FrontEnd/ Next.js 14 프론트엔드 (백엔드 API 프록시 BFF)
Crawler Crawler/ 독립 실행용 크롤러 패키지
Presentation Presentation/ 발표 자료 및 페이지별 구성 계획서

Architecture

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]
Loading

API는 SQLite를 우선 읽고, DB가 없거나 스키마가 다르면 JSON 스냅샷에서 자동 부트스트랩, 그래도 실패하면 JSON repository로 폴백합니다.

Tech Stack

  • 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 부하 테스트

Quick Start

# 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 .envRAG_ENABLED=trueOPENAI_API_KEY를 설정합니다(둘 중 하나라도 없으면 로컬 키워드 검색으로 폴백). 자세한 실행/배포 방법은 각 모듈의 README를 참고하세요.

Status

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 배포에서 활성화됩니다

Documentation

Goals

분산된 학교 공지를 단순히 모으는 데서 그치지 않고, 사용자 질문과 운영 데이터를 기반으로 점진 개선되는 공지 지식 시스템을 지향합니다. 재학생·대학원생·교육원 수강생·취업 준비생 모두 자신에게 필요한 공지를 한곳에서 놓치지 않고 확인할 수 있도록 만드는 것이 목표입니다.

Pinned Loading

  1. KAU-Notice-Hub-BackEnd KAU-Notice-Hub-BackEnd Public

    Python 1

Repositories

Showing 4 of 4 repositories

Top languages

Loading…

Most used topics

Loading…