FastAPI - MiniProject - 4

김기훈·2025년 10월 29일

부트캠프 프로젝트

목록 보기
6/39

배포

EC2 (Amazon Elastic Compute Cloud) — 서버 컴퓨터

  • AWS에서 제공하는 가상 서버(VM), 쉽게 말해 “AWS에 있는 내 컴퓨터(서버)”
    • FastAPI, DB, Nginx 등을 설치하고 실행할 실제 운영 환경(Production) 이 됨
항목설명
OSUbuntu, 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
  • Uvicorn 실행 (백그라운드)
nohup uvicorn app.main:app --host 0.0.0.0 --port 8000 &
  • Nginx 설치 및 설정
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


실전 투입

profile
안녕하세요.

0개의 댓글