본문 바로가기
서버구축 (WEB,DB)

Nginx, Gunicorn(WSGI), Django 동작 원리

by 날으는물고기 2023. 8. 23.

Nginx, Gunicorn(WSGI), Django 동작 원리

WSGI(Web Server Gateway Interface)와 관련하여, 웹 애플리케이션 서버의 동작 방식과 역할에 대한 설명을 요약 및 정리해보겠습니다.

WSGI의 등장 배경

  • 초기에는 웹 서버만 있었으며, 정적인 파일만 처리 가능했음.
  • 동적인 요청에 대한 처리 필요성 증가.
  • CGI(Common Gateway Interface) 등장: 파이썬 어플리케이션 서버의 동작 방식 정의.
  • CGI는 요청마다 파이썬 스크립트를 처음부터 실행하여 처리하는 방식이어서 성능 이슈 발생.

WSGI의 등장과 WSGI 서버(Gunicorn, uWSGI)

  • WSGI(Web Server Gateway Interface) 등장: 웹 서버와 파이썬 어플리케이션 간의 통신 규약.
  • WSGI 서버 필요: 클라이언트의 요청을 받아 WSGI application 실행.
  • Gunicorn과 uWSGI는 WSGI 서버의 역할 수행.
  • Gunicorn: WSGI middleware로 웹 서버의 역할 수행.
  • Nginx는 reverse proxy server, load balancer 등을 담당.

WSGI의 동작 과정

  • WSGI application은 environ과 start_response 콜백함수를 받음.
  • environ: HTTP 요청 정보를 담은 dictionary.
  • start_response: HTTP 응답 헤더와 상태 코드를 설정하는 콜백함수.
  • WSGI 서버는 클라이언트 요청마다 application을 호출하여 응답 생성.

Framework의 WSGI application

  • Django와 Flask는 WSGI application을 내장.
  • Django: wsgi.py에서 application 객체를 생성.
  • Flask: app 객체를 생성하고 WSGI application으로 사용.
  • 프레임워크에서 제공하는 서버는 개발용으로만 사용 권장, 배포용에는 Gunicorn 등을 사용.

정리

  • Gunicorn을 사용하여 WSGI middleware로 웹 서버 역할 수행 가능.
  • Nginx를 사용하여 reverse proxy나 load balancing 가능.
  • Django와 Flask는 프레임워크 내에서 WSGI application 제공.
  • Gunicorn, uWSGI를 사용하지 않고 Nginx만 사용하는 것도 가능하지만 제한적.

 

요약하자면, 웹 애플리케이션을 배포할 때는 보통 Nginx와 Gunicorn (또는 uWSGI)를 조합하여 사용합니다. Nginx는 웹 서버의 역할로 reverse proxy, load balancing 등을 수행하며, Gunicorn은 WSGI application을 실행하는 데 사용되는 WSGI 서버의 역할을 수행합니다. 이를 통해 웹 애플리케이션을 안정적이고 효율적으로 배포할 수 있습니다.

Flask 애플리케이션을 uWSGI를 사용하여 서비스하는 방법에 대한 간단한 예제를 제공하겠습니다.

먼저, Flask 애플리케이션을 작성한 다음, uWSGI를 사용하여 해당 애플리케이션을 서비스하는 과정을 설명하겠습니다.

  1. Flask 애플리케이션 작성
    app.py 파일에 간단한 Flask 애플리케이션을 작성합니다.
    # app.py
    
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def hello():
        return 'Hello, Flask and uWSGI!'
  2. 가상환경 설정 및 Flask 설치
    가상환경을 생성하고 Flask를 설치합니다.
    python -m venv venv
    source venv/bin/activate  # Linux/MacOS
    # 또는
    # .\venv\Scripts\activate  # Windows
    pip install flask
  3. uWSGI 설치
    pip install uwsgi
  4. uWSGI 설정 파일 작성
    uwsgi.ini 파일을 생성하여 uWSGI의 설정을 정의합니다.
    # uwsgi.ini
    
    [uwsgi]
    module = app:app
    master = true
    processes = 4
    socket = 0.0.0.0:5000
    protocol = http
    여기서 module은 Flask 애플리케이션의 모듈을 가리키며, socket은 uWSGI가 리스닝할 주소 및 포트를 지정합니다.
  5. uWSGI로 애플리케이션 실행
    다음 명령을 사용하여 uWSGI로 Flask 애플리케이션을 실행합니다.
    uwsgi --ini uwsgi.ini
    이제 http://127.0.0.1:5000에서 Flask 애플리케이션이 실행됩니다.

uWSGI는 애플리케이션을 관리하고 여러 프로세스에서 동시에 처리할 수 있도록 도와줍니다. 이제 이 예제를 참고하여 실제 프로젝트에 적용할 수 있습니다. 필요에 따라 uWSGI 설정을 조정하고 확장하여 복잡한 환경에 맞게 사용할 수 있습니다.

728x90

댓글