Flask는 파이썬 웹 프레임워크로, 가벼우면서도 유연한 웹 애플리케이션 개발을 위해 많이 사용됩니다. 그러나 단순히 개발환경에서만 동작하는 것이 아니라, 실제 서비스로 배포하기 위한 설정과 웹 서버와의 연동도 필요합니다. 이번 글에서는 Flask 애플리케이션의 배포와 웹 서버 설정에 대해 알아보겠습니다.
1. 가상 환경 설정
Flask 애플리케이션을 배포하기 전에, 가상 환경을 활용하여 의존성을 격리하는 것이 좋습니다. 가상 환경을 설정하기 위해서는 venv
모듈을 사용할 수 있습니다. 아래는 가상 환경을 생성하는 명령어입니다.
python3 -m venv myenv
2. 애플리케이션 구조
Flask 애플리케이션을 배포하기 위해선, 애플리케이션의 구조를 잘 설계해야 합니다. 일반적으로 아래와 같은 구조로 설계됩니다.
myapp/
app/
__init__.py
routes.py
myapp.py
myapp/
디렉토리는 프로젝트의 루트 디렉토리입니다.app/
디렉토리는 Flask 애플리케이션의 뼈대를 담고 있습니다.__init__.py
파일은 애플리케이션을 초기화하고 설정을 정의하는 부분입니다.routes.py
파일은 URL 루트와 컨트롤러 메소드를 정의하는 부분입니다.myapp.py
파일은 애플리케이션을 실행하는 스크립트 파일입니다.
3. 웹 서버 설정
Flask 애플리케이션을 배포하기 위해서는 웹 서버와의 연동이 필요합니다. 가장 많이 사용되는 웹 서버는 Nginx와 Gunicorn입니다.
- Nginx: 정적 파일 서빙과 리버스 프록시 기능을 제공하는 웹 서버로, 도메인과 HTTPS 설정, 로드 밸런싱 등에 사용됩니다.
- Gunicorn: WSGI(웹 서버 게이트웨이 인터페이스) 기반의 HTTP 서버로, Flask 애플리케이션과 연동하여 동시에 여러 클라이언트 요청을 처리할 수 있도록 도와줍니다.
아래는 Flask 애플리케이션을 Nginx와 Gunicorn으로 연동하는 설정 파일의 예시입니다.
server {
listen 80;
server_name example.com www.example.com;
location / {
include proxy_params;
proxy_pass http://unix:/path/to/myapp.sock;
}
}
4. 배포 스크립트
마지막으로, Flask 애플리케이션을 실제로 배포하기 위한 스크립트를 작성해야 합니다. 배포 스크립트는 가상 환경 설정, 애플리케이션 실행, 웹 서버 설정 등을 자동으로 수행할 수 있도록 구성됩니다.
아래는 배포 스크립트의 예시입니다.
#!/bin/bash
# 가상 환경 설정
source myenv/bin/activate
# 애플리케이션 실행
gunicorn -w 4 myapp:app -b 0.0.0.0:5000
# 웹 서버 설정
sudo cp myapp.conf /etc/nginx/conf.d/
sudo service nginx restart
위 스크립트는 가상 환경을 활성화한 후, Gunicorn으로 애플리케이션을 실행하고, Nginx 설정 파일을 복사하고 서비스를 재시작합니다.
이제 Flask 애플리케이션을 배포하고 웹 서버와의 연동을 설정하는 방법에 대해 알아보았습니다. 정확한 설정은 실제 상황과 요구사항에 따라 다르게 적용될 수 있으니, 참고용으로 활용해 주세요.