| 프로젝트 초기 설정 |
프로젝트 구조 생성 |
디렉토리 구조 및 기본 파일 생성 |
✅ |
|
패키지 설치 |
requirements.txt 기반 의존성 설치 |
✅ |
|
환경변수 설정 |
.env 파일 및 config.py 작성 |
✅ |
|
DB 연결 설정 |
session.py · base_class.py 작성 |
✅ |
| 모델 (Model) |
School 모델 |
schools 테이블 모델 정의 |
✅ |
|
Department 모델 |
departments 테이블 모델 정의 |
✅ |
|
User 모델 |
users 테이블 모델 정의 |
✅ |
|
Notice 모델 |
notices 테이블 모델 정의 (embedding VECTOR(1024) 포함) |
✅ |
|
ChatSession 모델 |
chat_sessions 테이블 모델 정의 |
✅ |
|
ChatMessage 모델 |
chat_messages 테이블 모델 정의 |
✅ |
| 스키마 (Schema) |
User 스키마 |
UserLogin · UserCreate · UserOut 작성 |
✅ |
|
School 스키마 |
SchoolOut 작성 |
✅ |
|
Department 스키마 |
DepartmentOut 작성 |
✅ |
|
Notice 스키마 |
NoticeOut · NoticeDetail 작성 |
✅ |
|
Chat 스키마 |
ChatRequest · ChatResponse · ChatSessionOut 작성 |
✅ |
| CRUD |
User CRUD |
사용자 생성·조회·인증 |
✅ |
|
School CRUD |
학교 목록·단건 조회 |
✅ |
|
Department CRUD |
학과 목록·단건 조회 |
✅ |
|
Notice CRUD |
공지 목록·상세 조회·벡터 유사도 검색·집계·최신 조회 |
✅ |
|
Chat CRUD |
세션·메시지 생성·조회·삭제 |
✅ |
| API 엔드포인트 |
인증 API |
회원가입·로그인·로그아웃·내 정보 조회 |
✅ |
|
학교 API |
학교 목록·학과 목록 조회 |
✅ |
|
공지 API |
공지 목록·상세 조회 (타학교 403 차단) |
✅ |
|
챗봇 API |
질문 전송·세션 목록·세션 상세 조회·세션 삭제 |
✅ |
| 화면 (Template) |
메인 페이지 |
랜딩 페이지 렌더링 |
✅ |
|
로그인 페이지 |
로그인 화면 렌더링 |
✅ |
|
회원가입 페이지 |
회원가입 화면 렌더링 |
✅ |
|
공지 목록 페이지 |
공지 목록 화면 렌더링 |
✅ |
|
채팅 페이지 |
채팅 UI 렌더링 |
✅ |
|
에러 페이지 |
터미널 스타일 에러 화면 렌더링 |
✅ |
| CSS |
common.css |
전체 공통 스타일 작성 |
✅ |
|
home.css |
메인 페이지 전용 스타일 작성 |
✅ |
|
login.css |
로그인 페이지 전용 스타일 작성 |
✅ |
|
register.css |
회원가입 페이지 전용 스타일 작성 |
✅ |
|
chat.css |
채팅 페이지 전용 스타일 작성 |
✅ |
|
notices.css |
공지 목록 페이지 전용 스타일 작성 |
✅ |
|
error.css |
에러 페이지 전용 스타일 작성 |
✅ |
| JavaScript |
apiClient.js |
공통 API 요청 · 401/422 에러 처리 |
✅ |
|
home.js |
학교·학과 셀렉트박스 동적 로딩 |
✅ |
|
login.js |
로그인 폼 처리 · 에러 알림 |
✅ |
|
register.js |
회원가입 폼 처리 · 비밀번호 확인 |
✅ |
|
chat.js |
세션 CRUD · 로딩 버블 · 예시 버튼 |
✅ |
|
notices.js |
필터 · 검색 · 모달 · 페이지네이션 |
✅ |
| RAG 파이프라인 |
질문 의도 분류 |
count · recent · list · search 4가지 분류 후 라우팅 |
✅ |
|
공지 현황 컨텍스트 주입 |
매 요청마다 학교/학과/전체 공지 개수 컨텍스트 포함 |
✅ |
|
임베딩 생성 |
BGE-M3 임베딩 서버 연동 |
✅ |
|
벡터 검색 |
pgvector cosine 유사도 검색 구현 (top-5) |
✅ |
|
LLM 답변 생성 |
LLM 서버 연동 및 답변 생성 |
✅ |
|
TEI 서버 전환 |
LM Studio → TEI 임베딩 서버 교체 |
❌ |
|
vLLM 전환 |
LM Studio → vLLM (Llama 3.1 70B) 교체 |
❌ |
| 공지 수집 |
n8n 워크플로우 |
학교·학과 공지 크롤링 스케줄 구성 (30분 주기) |
✅ |
|
공지 저장 |
크롤링 결과 notices 테이블 저장 |
✅ |
|
중복 방지 |
source_url 기준 중복 공지 필터링 |
✅ |
|
AI 자동 요약 |
크롤링된 공지 LLM 요약 후 summary 컬럼 저장 |
❌ |
| 보안 |
JWT 발급·검증 |
python-jose 기반 토큰 처리 |
✅ |
|
비밀번호 해싱 |
bcrypt 기반 암호화 |
✅ |
|
접근 제어 |
비로그인 사용자 라우터 접근 차단 |
✅ |
|
타학과·타학교 공지 차단 |
school_id + dept_id DB 레벨 필터 (403 반환) |
✅ |
|
세션 소유권 검증 |
user_id 비교 검증 (403 반환) |
✅ |
|
XSS 방어 |
innerHTML 전면 제거 → DOM API만 사용 |
✅ |
|
SQL 인젝션 방어 |
ORM + 바인딩 파라미터 + 이름 필드 패턴 차단 |
✅ |
| 예외 처리 |
전역 예외 핸들러 |
exception_handler 기반 공통 에러 응답 |
✅ |
|
HTTP 상태코드별 처리 |
401→/login, 404→/, 500→error.html 렌더링 |
✅ |
|
500 에러 내용 숨김 |
스택트레이스 미노출, 일반 메시지만 반환 |
✅ |
| 배포 |
Docker Compose 구성 |
FastAPI · PostgreSQL · TEI · vLLM · n8n 컨테이너 구성 |
❌ |
|
배포 보안 설정 |
secure=True · docs_url=None · redoc_url=None 적용 |
❌ |
|
OpenStack 배포 |
VM 인스턴스 배포 및 서비스 실행 |
❌ |