Django와 Bootstrap을 이용한 학교 체육관 대관 공지사항 관리 시스템입니다.
-
공지사항 관리
- 학교별 체육관 대관 공지사항 등록
- 공지사항 제목, 내용, 접수 기간, 대관 기간 등 관리
- PDF 파일 첨부 및 미리보기 기능
-
학교 관리
- 서울시 공립학교 975개 자동 등록 (초/중/고)
- 학교 이름, 지역, 학교 종류, 홈페이지 주소 관리
- 학교별 공지사항 조회
-
자동 수집 시스템
- 메인 화면의 공지 섹션에서 키워드 기반 자동 저장(onclick 링크 지원)
- APScheduler 스케줄:
- 09:05, 15:05 메인 공지 키워드 스캔 실행
- 수동 명령어로 초기화/저장/홈페이지 갱신 지원
- LLM(Ollama) 기반 날짜 추출 및 파싱
- PDF/HWP 첨부 파일에서 접수 기간과 대관 기간 자동 추출
- 자세한 내용은 README_LLM_SEARCH.md 참조
-
사용자 인터페이스
- Bootstrap 5를 이용한 반응형 디자인
- 다양한 뷰 모드 지원:
- 카드형: 공지사항을 카드 레이아웃으로 보기 편하게 표시
- 리스트형: 테이블 형태로 정보를 한눈에 비교
- 캘린더: 접수 기간과 대관 기간을 달력으로 시각화
- 강력한 필터링 및 검색 기능
- 지역별, 학교 종류별, 기간별 필터링
- 상세 페이지에서 PDF 미리보기 및 다운로드
- 공지사항 수정 기능
source venv/bin/activatepip install -r requirements.txtpython manage.py makemigrations
python manage.py migratepython load_schools_from_csv.pypython manage.py createsuperuser# (신규) 특정 학교 메인 공지에서 키워드 저장
python manage.py fetch_keyword_notices --school-name 가락고 --limit 1
# (신규) 모든 학교의 메인 공지 섹션 감지 후 crawl_config 초기화
python manage.py init_school_crawl_config --limit 50
# (신규) 네이버 검색으로 홈페이지 갱신(비어있는 학교만)
python manage.py update_school_homepages --only-empty --sleep 1.0python manage.py runserver서버가 시작되면 http://127.0.0.1:8000/ 에서 웹사이트를 확인할 수 있습니다.
name: 학교 이름region: 지역school_type: 학교 종류 (초등학교/중학교/고등학교)homepage: 홈페이지 주소phone_number: 행정실 전화번호crawl_config: 크롤링 설정(JSON, 메인 공지 selector, onclick 함수 등)created_at: 생성일updated_at: 수정일
school: 학교 (외래키)title: 공지사항 제목link_url: 링크 주소content: 공지사항 내용attached_file: 첨부파일 (레거시, 하위 호환용)registration_start: 접수 시작일registration_end: 접수 마감일rental_start: 대관 시작일rental_end: 대관 종료일is_registration_completed: 접수 완료 여부created_at: 생성일updated_at: 수정일
notice: 공지사항 (외래키)file: 첨부 파일 (PDF, HWP 등)original_filename: 원본 파일명file_size: 파일 크기 (bytes)uploaded_at: 업로드 일시
-
공지사항 목록 (
/notices/)- 3가지 뷰 모드: 카드형, 리스트형, 캘린더
- 학교 이름, 접수 기간, 대관 기간 표시
- 지역별, 학교 종류별, 기간별 필터링
- 키워드 검색 기능
-
학교 목록 (
/schools/)- 서울시 모든 공립학교 목록
- 학교별 공지사항 개수 표시
- 지역별, 학교 종류별 필터링
- 홈페이지 링크 제공
-
공지사항 상세 (
/notices/<공지사항ID>/)- 공지사항 전체 정보 표시
- PDF 미리보기 및 다운로드
- 원본 링크 연결
-
공지사항 수정 (
/notices/<공지사항ID>/edit/)- 모든 필드 수정 가능
- PDF 파일 교체 가능
-
관리자 페이지 (
/admin/)- Django admin을 통한 데이터 관리
- 서버 시작 시 스케줄러 실행
- 매일 09:05, 15:05: 메인 화면 공지 섹션 스캔 후 키워드 매칭 저장
- 사이트별 JS onclick 링크도 실제 URL로 변환하여 저장
# 특정 학교(메인 공지)에서 키워드 저장
python manage.py fetch_keyword_notices --school-name 가락고 --limit 2
# 메인 공지 섹션 selector/onclick 자동 추출하여 crawl_config 저장
python manage.py init_school_crawl_config
# 네이버 검색으로 홈페이지 자동 갱신
python manage.py update_school_homepages --only-empty- 시설, 대관, 체육관, 대여, 장기, 임대, 학교시설, 허가, 장기사용, 허가신청, 개방
필요 시 fetch_keyword_notices --keyword "대관"처럼 개별 키워드로도 실행할 수 있습니다.
- Backend: Django 5.2.7
- Frontend: Bootstrap 5.3.0
- Database: SQLite (개발용)
- Crawler: Requests + BeautifulSoup4
- Scheduler: APScheduler 3.11.0
- LLM: Ollama (qwen2.5:7b-instruct)
- Python: 3.13
- 알림 기능 (새로운 공지사항 발견 시 이메일/SMS 알림)
- 크롤링 성능 개선 (비동기 처리)
- 더 정교한 키워드 필터링
- LLM 기반 공지사항 요약 및 중요 정보 추출 개선
- 사용자 맞춤형 공지사항 추천
| PC | Mobile |
|---|---|
| PC | Mobile |
|---|---|
| PC | Mobile |
|---|---|
| PC | Mobile |
|---|---|

