Python Flask

Flask 애플리케이션 배포 - Gunicorn 및 Nginx를 활용한 배포 방법

PyExplorer 2025. 2. 9. 10:47

Flask 애플리케이션 배포 - Gunicorn 및 Nginx를 활용한 배포 방법

Flask는 가볍고 사용하기 쉬운 웹 프레임워크로, 빠르게 프로토타입을 개발하거나 소규모 애플리케이션을 제작하는 데 적합합니다. 하지만 Flask의 기본 개발 서버는 프로덕션 환경에서 사용하기에는 부적합합니다. 오늘은 Gunicorn과 Nginx를 이용해 Flask 애플리케이션을 안전하고 효율적으로 배포하는 방법을 단계별로 살펴보겠습니다.


준비 사항

  1. Flask 애플리케이션
  2. Python(3.7 이상)
  3. Linux 서버(Ubuntu 20.04 기준으로 설명)
  4. Nginx 설치

1. Flask 애플리케이션 준비

먼저 Flask 애플리케이션이 준비되어 있어야 합니다. 예제로 사용할 간단한 Flask 애플리케이션은 아래와 같습니다:

# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "Hello, Flask with Gunicorn and Nginx!"

if __name__ == "__main__":
    app.run()

위 코드는 루트 경로('/')에 요청이 들어오면 간단한 메시지를 반환하는 애플리케이션입니다.


2. Gunicorn 설치 및 설정

Gunicorn 설치

Gunicorn은 Python WSGI HTTP 서버로, Flask 애플리케이션을 효율적으로 실행할 수 있도록 도와줍니다. 다음 명령어로 Gunicorn을 설치합니다:

pip install gunicorn

Gunicorn 실행

설치가 완료되면 Flask 애플리케이션을 Gunicorn으로 실행해봅니다:

gunicorn -w 4 -b 127.0.0.1:8000 app:app
  • -w 4: 워커(worker) 프로세스 수를 지정합니다. CPU 코어 수에 따라 조정 가능합니다.
  • -b 127.0.0.1:8000: 애플리케이션이 바인딩될 주소와 포트를 설정합니다.
  • app:app: app.py 파일의 Flask 애플리케이션 객체를 지정합니다.

브라우저에서 http://127.0.0.1:8000으로 접속하면 "Hello, Flask with Gunicorn and Nginx!" 메시지를 확인할 수 있습니다.


3. Nginx 설치 및 설정

Nginx 설치

Ubuntu에서는 다음 명령어로 Nginx를 설치할 수 있습니다:

sudo apt update
sudo apt install nginx

Nginx 설정 파일 수정

/etc/nginx/sites-available/ 디렉터리에서 새로운 설정 파일을 작성합니다. 여기서는 flask_project라는 이름으로 설정 파일을 작성합니다:

sudo nano /etc/nginx/sites-available/flask_project

아래 내용을 추가합니다:

server {
    listen 80;
    server_name your_server_ip_or_domain;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

your_server_ip_or_domain 부분을 실제 서버 IP 또는 도메인으로 변경합니다.

Nginx 활성화 및 재시작

작성한 설정 파일을 활성화하려면 심볼릭 링크를 생성해야 합니다:

sudo ln -s /etc/nginx/sites-available/flask_project /etc/nginx/sites-enabled/

Nginx를 다시 시작합니다:

sudo systemctl restart nginx

4. 애플리케이션 배포 테스트

브라우저에서 서버 IP 또는 도메인으로 접속하면 Nginx를 통해 Gunicorn이 실행하는 Flask 애플리케이션에 접근할 수 있습니다. 정상적으로 "Hello, Flask with Gunicorn and Nginx!" 메시지가 출력된다면 배포가 성공적으로 완료된 것입니다.


5. Supervisor로 Gunicorn 관리하기

Gunicorn 프로세스를 수동으로 실행하면 서버 재부팅 시 자동으로 시작되지 않기 때문에 Supervisor를 이용해 이를 관리합니다.

Supervisor 설치

sudo apt install supervisor

Supervisor 설정

Supervisor 설정 파일을 작성합니다:

sudo nano /etc/supervisor/conf.d/flask_project.conf

아래 내용을 추가합니다:

[program:flask_project]
command=/usr/local/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
directory=/path/to/your/flask/project
autostart=true
autorestart=true
stderr_logfile=/var/log/flask_project.err.log
stdout_logfile=/var/log/flask_project.out.log

/path/to/your/flask/project를 Flask 애플리케이션 경로로 변경합니다.

Supervisor 설정 반영 및 시작

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start flask_project

결론

이제 Flask 애플리케이션이 Gunicorn과 Nginx를 통해 안정적으로 배포되었습니다. 추가적으로 Supervisor를 사용해 Gunicorn 프로세스를 관리하여 서버 재부팅 시에도 애플리케이션이 자동으로 실행되도록 설정했습니다. 이 글을 참고하여 Flask 애플리케이션을 배포해 보세요!