
배포
EC2 (Amazon Elastic Compute Cloud) — 서버 컴퓨터
- AWS에서 제공하는 가상 서버(VM), 쉽게 말해 “AWS에 있는 내 컴퓨터(서버)”
- FastAPI, DB, Nginx 등을 설치하고 실행할 실제 운영 환경(Production) 이 됨
| 항목 | 설명 |
|---|
| OS | Ubuntu, Amazon Linux, Debian 등 원하는 서버 OS 선택 |
| 접근 | SSH로 터미널에서 접속 (ssh -i key.pem ubuntu@공인IP) |
| 역할 | FastAPI 서버 실행(Uvicorn), Nginx 설정, 로그 관리, 배포 자동화 등 |
| 보안 | 보안 그룹(Security Group)으로 포트(22, 80, 443, 8000 등) 열기 |
ssh -i mykey.pem ubuntu@3.34.xxx.xxx
cd /home/ubuntu/fastapi_mini_project
uvicorn app.main:app --host 0.0.0.0 --port 8000
# 이렇게 하면 EC2의 8000번 포트에서 FastAPI 서버가 돌아감
## 하지만, 이 상태로는 직접 접근은 어렵고, 나중에 Nginx가 필요
Uvicorn — FastAPI를 실행하는 ASGI 서버
- FastAPI는 ASGI 기반 프레임워크이기 때문에,
- Uvicorn이 실제 요청을 받아 FastAPI 애플리케이션을 실행
- 즉, Uvicorn 은 “FastAPI 앱을 실제로 작동시키는 엔진”
| 항목 | 설명 |
|---|
| 역할 | FastAPI 코드를 실행하고 클라이언트 요청/응답 처리 |
| 포트 | 기본적으로 8000 (--port 8000) |
| 실행 | uvicorn main:app --host 0.0.0.0 --port 8000 |
| 비동기 처리 | asyncio 기반이므로 매우 빠르고 효율적 |
| 프로덕션에서는 | --reload 옵션은 개발용만 (운영환경에서는 제거) |
uvicorn app.main:app --host 0.0.0.0 --port 8000
- 직접 http://<EC2_IP>:8000 으로 접근하기보단,
- 보통 Nginx가 80번 포트로 들어오는 요청을 8000으로 전달(proxy)
Nginx — 리버스 프록시 & 웹서버
- Nginx는 리버스 프록시(Reverse Proxy) 역할을 하는 고성능 웹 서버
- 즉, 외부 요청(HTTP/HTTPS)을 받아 내부의 Uvicorn 서버로 전달
리버스 프록시(Reverse Proxy)
[사용자 브라우저] → [Nginx :80] → [Uvicorn :8000] → [FastAPI 앱]
- Nginx가 앞단에서 요청을 받아 뒤에 있는 FastAPI 서버로 넘겨주는 구조를 “리버스 프록시”
| 항목 | 설명 |
|---|
| 포트 | 보통 80(HTTP), 443(HTTPS) 사용 |
| 역할 | 요청 분배(Load Balancing), SSL(HTTPS) 인증서 적용, 정적 파일 서비스 |
| FastAPI와 연결 | proxy_pass http://127.0.0.1:8000; 설정 |
| 장점 | Uvicorn이 직접 외부 요청을 처리하지 않게 해줘서 안정적, 보안 강화 가능 |
예시
server {
listen 80;
server_name 3.34.xxx.xxx;
location / {
proxy_pass http://127.0.0.1:8000; # Uvicorn이 실행 중인 포트
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# Nginx가 80포트(HTTP 요청)를 받고, 내부 8000(Uvicorn)으로 전달
전체 흐름
💻 Client (브라우저)
↓ HTTP 요청
🌐 Nginx (80/443)
↓ proxy_pass
⚙️ Uvicorn (8000)
↓ ASGI 요청
🐍 FastAPI 앱
↓ DB 연결/응답 처리
💻 Client로 결과 전송
예시(전체 배포 흐름)
- EC2에 FastAPI 코드 업로드 → scp 또는 git clone 사용
- Python 환경 설정
sudo apt update
sudo apt install python3-pip
pip install fastapi uvicorn
nohup uvicorn app.main:app --host 0.0.0.0 --port 8000 &
sudo apt install nginx
sudo nano /etc/nginx/sites-available/fastapi.conf
# 위의 설정 추가 후
sudo ln -s /etc/nginx/sites-available/fastapi.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx
실전 투입