안녕하세요! 그레이 해커 월횽입니다. 오늘은 Flask 애플리케이션 배포에 대해 알아보겠습니다. 배포란 개발한 애플리케이션을 인터넷에 올려 실제로 사용자가 접근할 수 있도록 만드는 과정입니다. Flask는 간단한 서버에서 실행할 수 있지만, 실제로 배포할 때는 웹 서버와 애플리케이션 서버를 조합하여 안전하고 효율적인 환경에서 실행하는 것이 중요합니다.
1. Flask 배포 준비
Flask는 로컬 개발 환경에서 내장 서버로 애플리케이션을 실행합니다. 하지만 이 서버는 실제 프로덕션 환경(실제 서비스 환경)에서는 안전하거나 효율적이지 않습니다. 따라서, Gunicorn 같은 WSGI(웹 서버 게이트웨이 인터페이스) 서버를 사용하여 Flask 애플리케이션을 실행합니다.
Gunicorn 설치
먼저 Gunicorn을 설치해야 합니다. 터미널에서 다음 명령어를 실행하세요.
pip install gunicorn
2. 배포할 환경 구성
Flask 애플리케이션을 배포할 때는 다음과 같은 환경을 구성해야 합니다.
· Gunicorn: 애플리케이션 서버로서 Flask 코드를 실행합니다.
· NGINX: HTTP 요청을 받아 Gunicorn으로 전달하고, 정적 파일을 제공하는 리버스 프록시 역할을 합니다.
· 클라우드 서버: AWS EC2, Heroku, 또는 DigitalOcean 같은 클라우드 서비스를 사용하여 서버를 설정할 수 있습니다.
3. Gunicorn으로 애플리케이션 실행
Flask 애플리케이션을 Gunicorn으로 실행하려면, 아래 명령어를 사용합니다. app.py 파일이 Flask 애플리케이션을 담고 있다고 가정합니다.
gunicorn -w 4 app:app
· -w 4는 4개의 워커(Worker) 프로세스를 실행하겠다는 의미입니다. 워커 프로세스는 동시에 여러 요청을 처리할 수 있게 도와줍니다.
· app은 app.py 파일에서 Flask 애플리케이션이 담긴 객체를 가리킵니다.
4. NGINX 설정하기
Gunicorn은 애플리케이션을 실행하지만, 웹 요청을 직접 처리하는 데는 적합하지 않으므로 NGINX와 같은 리버스 프록시 서버가 필요합니다. NGINX는 클라이언트 요청을 받아 Gunicorn에 전달하고, 정적 파일(CSS, 이미지 등)을 직접 제공합니다.
NGINX 설치 (Ubuntu 기준)
sudo apt update
sudo apt install nginx
NGINX 설정 파일 예시
/etc/nginx/sites-available/myproject에 NGINX 설정 파일을 작성합니다.
server {
listen 80;
server_name mydomain.com;
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;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static {
alias /path/to/static;
}
}
이 설정 파일은 80번 포트에서 요청을 수신한 후, 이를 Gunicorn이 실행 중인 127.0.0.1:8000으로 전달합니다. /static 경로는 정적 파일을 제공합니다.
5. 클라우드 서버에서 애플리케이션 배포
애플리케이션을 인터넷에 배포하기 위해 클라우드 서버를 사용합니다. 여기서는 AWS EC2를 예로 들어 설명하겠습니다.
AWS EC2 인스턴스 생성
· AWS 콘솔에서 EC2 인스턴스를 생성합니다.
· Ubuntu 또는 Amazon Linux 이미지를 선택합니다.
· 인스턴스 생성 후, SSH로 서버에 접속합니다.
Flask 애플리케이션 서버 준비
서버에 접속한 후 다음과 같은 환경을 설정합니다.
Python과 pip 설치
sudo apt update
sudo apt install python3-pip python3-dev
애플리케이션 코드 클론 또는 업로드
git clone <your-repo-url>
필요한 라이브러리 설치
pip install -r requirements.txt
Gunicorn 실행
gunicorn -w 4 app:app
6. 도메인 설정 및 SSL 인증서
애플리케이션을 배포한 후 도메인을 연결하고 HTTPS(SSL 인증서)를 설정하는 것이 중요합니다. SSL 인증서는 Let's Encrypt 같은 무료 인증서를 사용할 수 있습니다.
Certbot을 사용한 SSL 인증서 설치 (Ubuntu 기준)
NGINX를 설치한 후 Certbot을 설치
sudo apt install certbot python3-certbot-nginx
Certbot을 사용해 SSL 인증서 발급
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
SSL 인증서를 자동 갱신
sudo certbot renew --dry-run
7. Flask 애플리케이션 배포 정리
· Flask 애플리케이션을 배포할 때는 Gunicorn을 사용하여 애플리케이션 서버를 실행하고, NGINX를 통해 리버스 프록시를 구성합니다.
· AWS EC2, DigitalOcean, Heroku 등 다양한 클라우드 플랫폼에서 Flask 애플리케이션을 배포할 수 있습니다.
· SSL 인증서를 설치하여 HTTPS 연결을 통해 웹사이트의 보안을 강화할 수 있습니다.
다음 시간에는 Flask와 웹소켓(WebSockets)을 활용하여 실시간 기능을 구현하는 방법에 대해 알아보겠습니다!
- 이전 수업 목록
'프로그래밍 > Python' 카테고리의 다른 글
[Python 강의] 24강 - REST API 설계 및 구현 (0) | 2024.10.31 |
---|---|
[Python 강의] 23강 - Flask 웹소켓(WebSockets) (1) | 2024.10.30 |
[Python 강의] 21강 - 사용자 인증 및 권한 부여 (0) | 2024.10.28 |
[Python 강의] 20강 - Flask와 데이터베이스 연동 (0) | 2024.10.25 |
[Python 강의] 19강 - 웹 개발 기초 (0) | 2024.10.24 |