이 프로젝트는 나이스(NEIS) 교육정보 개방 포털에서 제공하는 급식식단정보를 가져와 로컬 캐시에 저장하고, 동일한 로컬 네트워크(LAN) 상의 다른 PC나 장치(IoT, 스마트 월패드 등)로 빠르게 전송할 수 있는 캐싱 프록시 서버입니다.
- 로컬 SQLite 캐싱: 한 번 조회한 식단 정보는 로컬 데이터베이스(
cache.db)에 즉시 저장됩니다. 동일 요청 발생 시 NEIS API를 호출하지 않고 캐시에서 즉시 응답하므로 대기 시간이 300ms에서 3ms 수준으로 단축되며 트래픽 쿼터를 아낄 수 있습니다. - 원본 중계 API (
/hub/mealServiceDietInfo): NEIS 공식 API 문서에 명시된 모든 쿼리 파라미터와 응답 스키마를 그대로 보존 및 중계합니다. - 정제된 가공 API (
/meal): 알레르기 유발 물질 정보 및 불필요한<br/>태그 등을 제거한 깔끔한 음식 목록 배열(["보리밥", "쇠고기미역국", ...]) 및 원산지, 영양 성분을 가공하여 사용하기 편리한 JSON 구조로 변환하여 제공합니다. - 인터랙티브 웹 대시보드: 서버 상태 모니터링, 방화벽 개방 명령어 복사, 실시간 식단 조회 테스트 및 캐시 데이터를 관리할 수 있는 수려한 웹 대시보드(기본
http://localhost:8000)를 탑재하고 있습니다.
- PC에 Python 3.10 이상 버전이 설치되어 있어야 합니다.
로컬 폴더에서 터미널(Command Prompt 또는 PowerShell)을 열고 필요한 라이브러리를 설치합니다:
py -3 -m pip install -r requirements.txt- 로컬 폴더에 있는
.env.example파일을 복사하여.env파일을 생성합니다. .env파일을 텍스트 편집기(메모장 등)로 열어 필요한 설정을 입력합니다:# (선택) NEIS Open API 인증키 입력. 발급받지 않았다면 비워둘 수 있습니다. NEIS_API_KEY=your_key_here # 서버 포트 PORT=8000 # 서버 호스트 (0.0.0.0으로 두어야 외부 PC에서 접속 가능) HOST=0.0.0.0
인증키가 필요하신가요? 나이스 교육정보 개방 포털에 접속 후 구글/네이버 등으로 간편 로그인한 뒤 1분 만에 무료로 인증키를 발급받을 수 있습니다.
아래 명령어를 사용하여 프록시 서버를 가동합니다:
py -3 main.py실행이 완료되면 브라우저에서 **http://localhost:8000**에 접속하여 대시보드를 확인합니다.
동일한 공유기(Wi-Fi 또는 LAN)에 연결된 다른 PC나 기기에서 해당 프록시 서버에 데이터를 요청할 수 있습니다.
Windows 방화벽이 외부 접속을 기본 차단하므로, 포트(기본 8000)를 수신 허용해 주어야 합니다.
- Windows 시작 버튼 우클릭 후 '터미널(관리자)' 또는 **'PowerShell(관리자)'**을 실행합니다.
- 아래 명령어를 복사하여 붙여넣고 실행합니다:
New-NetFirewallRule -DisplayName "NEIS Proxy Server" -Direction Inbound -LocalPort 8000 -Protocol TCP -Action Allow
웹 브라우저 혹은 코드에서 아래 주소를 사용하여 급식 정보를 가져옵니다. 호스트 PC의 IP 주소는 대시보드 화면의 **'LAN URL'**에서 편리하게 확인하고 복사할 수 있습니다.
- 원본 중계 API 호출 예시:
GET http://[호스트_IP]:8000/hub/mealServiceDietInfo?ATPT_OFCDC_SC_CODE=B10&SD_SCHUL_CODE=7010057&MLSV_YMD=20260714
- 가공 API 호출 예시 (강력 추천):
GET http://[호스트_IP]:8000/meal?edu_code=B10&school_code=7010057&date=20260714
이 프로젝트를 개인 GitHub 리포지토리에 올리실 때, 발급받은 인증키 정보가 노출되지 않도록 조치해 두었습니다.
.env파일은 인증키 값을 보관하므로 절대 GitHub에 올리시면 안 됩니다.- 현재 프로젝트에는
.gitignore설정이 되어 있어.env파일과 로컬 캐시 데이터베이스인cache.db는 Git 업로드 대상에서 자동 제외됩니다. - 다른 사용자는 GitHub에서 소스를 클론받은 뒤
.env.example파일을 이용해 본인의.env파일을 수동으로 만들어 실행하게 됩니다.