배포 환경: 개발 서버 (Flask dev, Uvicorn dev)와 운영 서버 (WSGI/ASGI)

calico·2025년 10월 20일

Computer Science

목록 보기
40/51

1. 개발 서버 vs 운영 서버


구분개발 서버 (Flask dev, Uvicorn dev)운영 서버 (WSGI/ASGI)
목적빠른 테스트, 디버깅안정적 서비스 제공
성능단일 스레드, 요청 처리 제한멀티 프로세스/스레드 지원
보안기본 설정, 보안 기능 부족HTTPS, 방화벽, 로깅 등 적용 가능
장애 대응장애 시 자동 복구 없음프로세스 관리 도구(systemd, supervisor)로 자동 재시작
확장성부하 분산 불가로드밸런서, 리버스 프록시와 연계 가능



2. WSGI / ASGI 서버


  • 운영 환경에서는 WSGI(Flask) 또는 ASGI(FastAPI) 서버를 사용합니다.

WSGI 서버 예시


  • gunicorn: 리눅스에서 많이 사용, 멀티 프로세스 지원

  • waitress: Windows에서도 안정적으로 동작, 멀티 스레드 지원

Flask + waitress 예시

from waitress import serve
from my_flask_app import app  # Flask 인스턴스

if __name__ == "__main__":
    serve(app, host="0.0.0.0", port=8000)



ASGI 서버 예시


  • uvicorn: FastAPI 기본 ASGI 서버, 운영 모드로 실행 가능

  • hypercorn: uvicorn 대안, HTTP/2 지원

FastAPI + uvicorn 운영 모드 예시

uvicorn my_fastapi_app:app --host 0.0.0.0 --port 8001 --workers 4
  • --workers 4 : 멀티 프로세스로 동시 요청 처리 성능 향상



3. 리버스 프록시 (Reverse Proxy)


  • 운영 환경에서는 NginxApache를 앞단에 두고, 실제 API 서버(gunicorn, uvicorn)는 뒤에서 동작하게 합니다.

리버스 프록시 역할


  • HTTPS 처리: SSL 인증서 적용

  • 로드밸런싱: 여러 API 서버로 요청 분산

  • 정적 파일 제공: 이미지, JS, CSS 등 빠르게 제공

  • 보안 강화: 포트 숨김, 방화벽 규칙 적용



Nginx 예시 설정


server {
    listen 443 ssl;
    server_name api.example.com;

    ssl_certificate /etc/ssl/certs/example.crt;
    ssl_certificate_key /etc/ssl/private/example.key;

    location /flask {
        proxy_pass http://127.0.0.1:8000;
    }

    location /fastapi {
        proxy_pass http://127.0.0.1:8001;
    }
}
  • /flask 요청은 Flask 서버로, /fastapi 요청은 FastAPI 서버로 전달

  • HTTPS 적용으로 보안 강화



4. 운영 환경 구성 예시


[클라이언트] → [Nginx Reverse Proxy] → [Gunicorn(Flask)]  
                                     → [Uvicorn(FastAPI)]
  • Nginx가 SSL 처리 및 요청 분배

  • Flask는 WSGI 서버(gunicorn/waitress)로 실행

  • FastAPI는 ASGI 서버(uvicorn/hypercorn)로 실행

  • 필요 시 Docker로 각각 컨테이너화하여 관리



5. 정리


  • Windows 개발 → Linux 운영: 운영 서버는 Linux(Ubuntu, CentOS)에서 Nginx+Gunicorn/Uvicorn 조합이 표준

  • Docker 사용: 배포 환경을 컨테이너로 만들면 의존성 문제 최소화

  • 모니터링: Prometheus, Grafana로 API 상태 모니터링

  • 자동 재시작: systemd, supervisor로 서버 프로세스 관리



profile
All views expressed here are solely my own and do not represent those of any affiliated organization.

0개의 댓글