ERD 설계
- 서비스 요구사항 분석 및 테이블 구조 설계
- 6개 테이블 정의:
schools, departments, users, notices, chat_sessions, chat_messages
- 학교·학과 기반 멀티테넌트 구조 설계 (school_id · dept_id FK 연결)
notice.dept_id = NULL → 학교 전체 공지 / dept_id = 값 → 학과 공지 구분 설계
notice.embedding VECTOR(1024) 컬럼 설계 (pgvector RAG 대비)
- PostgreSQL + pgvector DDL 작성 및 seed 데이터 구성 (울산과학대학교 학과 27개)
인증 시스템 구축
- JWT HttpOnly 쿠키 기반 인증 구현 (XSS 방어 · SameSite=Lax CSRF 방어)
- bcrypt 비밀번호 해싱 적용
- 회원가입 검증 로직 구현
- 이메일 정규식 검증
- 비밀번호 복잡성 검증 (영문 + 숫자 + 특수문자 8자 이상)
- 학생 이름: 한글·영문만 허용, SQL 인젝션 패턴 차단
- 학번: 숫자 6~12자리만 허용
- 이메일 중복 가입 방지 (409 반환)
- 인증 미들웨어 구현 (
get_current_user · get_current_user_optional)
- 로그인 상태 리다이렉트 처리 (로그인 시
/chat, 비로그인 시 /login)
- 전역 예외 핸들러 구현 (401 →
/login, 404 → /, 500 → error.html)
- 로그아웃: form POST 방식으로 쿠키 삭제 후 홈 302 리다이렉트
모델 / 스키마 / CRUD 작성
- SQLAlchemy ORM 모델 6개 작성 (school · department · user · notice · chat_session · chat_message)
- Pydantic v2 스키마 작성
UserLogin · UserCreate · UserOut
SchoolOut · DepartmentOut
NoticeOut (content 제외) · NoticeDetail (content 포함)
ChatRequest · ChatResponse · ChatSessionOut
- CRUD 함수 작성
user_crud: 사용자 생성 · 조회 · 인증
school_crud: 학교 목록 · 단건 조회
notice_crud: 공지 목록 · 상세 · 벡터 검색 · 집계 · 최신 조회
chat_crud: 세션 · 메시지 생성 · 조회 · 삭제 (FK 순서 준수)
- DB 세션 관리 (
session.py) 및 모델 통합 관리 (base.py) 구성