Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NEIS School Meal Proxy Server (급식식단 프록시 서버)

이 프로젝트는 나이스(NEIS) 교육정보 개방 포털에서 제공하는 급식식단정보를 가져와 로컬 캐시에 저장하고, 동일한 로컬 네트워크(LAN) 상의 다른 PC나 장치(IoT, 스마트 월패드 등)로 빠르게 전송할 수 있는 캐싱 프록시 서버입니다.

주요 기능

  • 로컬 SQLite 캐싱: 한 번 조회한 식단 정보는 로컬 데이터베이스(cache.db)에 즉시 저장됩니다. 동일 요청 발생 시 NEIS API를 호출하지 않고 캐시에서 즉시 응답하므로 대기 시간이 300ms에서 3ms 수준으로 단축되며 트래픽 쿼터를 아낄 수 있습니다.
  • 원본 중계 API (/hub/mealServiceDietInfo): NEIS 공식 API 문서에 명시된 모든 쿼리 파라미터와 응답 스키마를 그대로 보존 및 중계합니다.
  • 정제된 가공 API (/meal): 알레르기 유발 물질 정보 및 불필요한 <br/> 태그 등을 제거한 깔끔한 음식 목록 배열(["보리밥", "쇠고기미역국", ...]) 및 원산지, 영양 성분을 가공하여 사용하기 편리한 JSON 구조로 변환하여 제공합니다.
  • 인터랙티브 웹 대시보드: 서버 상태 모니터링, 방화벽 개방 명령어 복사, 실시간 식단 조회 테스트 및 캐시 데이터를 관리할 수 있는 수려한 웹 대시보드(기본 http://localhost:8000)를 탑재하고 있습니다.

설치 및 실행 방법

1. 사전 준비

  • PC에 Python 3.10 이상 버전이 설치되어 있어야 합니다.

2. 패키지 설치

로컬 폴더에서 터미널(Command Prompt 또는 PowerShell)을 열고 필요한 라이브러리를 설치합니다:

py -3 -m pip install -r requirements.txt

3. 환경 설정 (.env)

  1. 로컬 폴더에 있는 .env.example 파일을 복사하여 .env 파일을 생성합니다.
  2. .env 파일을 텍스트 편집기(메모장 등)로 열어 필요한 설정을 입력합니다:
    # (선택) NEIS Open API 인증키 입력. 발급받지 않았다면 비워둘 수 있습니다.
    NEIS_API_KEY=your_key_here
    
    # 서버 포트
    PORT=8000
    
    # 서버 호스트 (0.0.0.0으로 두어야 외부 PC에서 접속 가능)
    HOST=0.0.0.0

    인증키가 필요하신가요? 나이스 교육정보 개방 포털에 접속 후 구글/네이버 등으로 간편 로그인한 뒤 1분 만에 무료로 인증키를 발급받을 수 있습니다.

4. 서버 실행

아래 명령어를 사용하여 프록시 서버를 가동합니다:

py -3 main.py

실행이 완료되면 브라우저에서 **http://localhost:8000**에 접속하여 대시보드를 확인합니다.


다른 PC에서 이 프록시 서버에 접속하는 방법

동일한 공유기(Wi-Fi 또는 LAN)에 연결된 다른 PC나 기기에서 해당 프록시 서버에 데이터를 요청할 수 있습니다.

1. 호스트 PC의 방화벽 포트 개방

Windows 방화벽이 외부 접속을 기본 차단하므로, 포트(기본 8000)를 수신 허용해 주어야 합니다.

  1. Windows 시작 버튼 우클릭 후 '터미널(관리자)' 또는 **'PowerShell(관리자)'**을 실행합니다.
  2. 아래 명령어를 복사하여 붙여넣고 실행합니다:
    New-NetFirewallRule -DisplayName "NEIS Proxy Server" -Direction Inbound -LocalPort 8000 -Protocol TCP -Action Allow

2. 다른 PC에서 호출

웹 브라우저 혹은 코드에서 아래 주소를 사용하여 급식 정보를 가져옵니다. 호스트 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 배포 시 주의사항 (개발자용)

이 프로젝트를 개인 GitHub 리포지토리에 올리실 때, 발급받은 인증키 정보가 노출되지 않도록 조치해 두었습니다.

  • .env 파일은 인증키 값을 보관하므로 절대 GitHub에 올리시면 안 됩니다.
  • 현재 프로젝트에는 .gitignore 설정이 되어 있어 .env 파일과 로컬 캐시 데이터베이스인 cache.db는 Git 업로드 대상에서 자동 제외됩니다.
  • 다른 사용자는 GitHub에서 소스를 클론받은 뒤 .env.example 파일을 이용해 본인의 .env 파일을 수동으로 만들어 실행하게 됩니다.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages