Flask 애플리케이션 배포 - Gunicorn 및 Nginx를 활용한 배포 방법
Flask는 가볍고 사용하기 쉬운 웹 프레임워크로, 빠르게 프로토타입을 개발하거나 소규모 애플리케이션을 제작하는 데 적합합니다. 하지만 Flask의 기본 개발 서버는 프로덕션 환경에서 사용하기에는 부적합합니다. 오늘은 Gunicorn과 Nginx를 이용해 Flask 애플리케이션을 안전하고 효율적으로 배포하는 방법을 단계별로 살펴보겠습니다.
준비 사항
- Flask 애플리케이션
- Python(3.7 이상)
- Linux 서버(Ubuntu 20.04 기준으로 설명)
- 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 애플리케이션을 배포해 보세요!
'Python Flask' 카테고리의 다른 글
Flask Blueprint로 애플리케이션 구조화하기 (0) | 2025.02.11 |
---|---|
Flask 애플리케이션 Docker로 배포하기 (0) | 2025.02.10 |
Flask 배포 가이드[ 개발 환경과 배포 환경 설정 ] (0) | 2025.02.08 |
Flask Caching으로 애플리케이션 성능 최적화하기 (0) | 2025.02.07 |
Flask Mail을 사용하여 이메일 전송하기 (0) | 2025.02.06 |