☁️ FastAPI 클라우드 배포 가이드 – AWS를 활용한 실전 배포 전략

🕒 약 2분 읽는 데 소요됩니다

이전 글 보기(FastAPI 온프레미스 배포 가이드 – linux 기준)

FastAPI 애플리케이션을 개발하고 로컬 환경이나 온프레미스 서버에서 테스트까지 완료했다면, 이제 진짜 무대인 클라우드로 올릴 차례다. 이번 글에서는 클라우드 플랫폼 중 가장 대표적인 AWS(Amazon Web Services)를 활용해 FastAPI를 배포하는 과정을 안내하겠다. 구체적으로 EC2 인스턴스에 Uvicorn + Gunicorn 조합, 그리고 Docker를 활용한 방식 두 가지를 다루며 실전에서 바로 활용 가능한 내용을 중심으로 구성해보자.


❗ AWS 배포 전략을 세우기 전에

클라우드 배포는 단순히 서버를 올리는 것을 넘어서, 네트워크 설정, 보안, 확장성까지 함께 고려해야 한다. 따라서 먼저 전체 흐름을 정리해보자.

이번 포스팅은 이미 AWS에 대한 기초적인 이해 및 EC2 인스턴스 생성 경험을 전제로 작성하였기에 아래의 AWS EC2 인스턴스 생성 및 보안그룹 설정 등에 대한 내용은 상세하게 다루지 않고 있습니다.

  1. AWS EC2 인스턴스 생성 (Linux Ubuntu 서버)
  2. 보안 그룹 설정 (포트 열기)
  3. SSH를 통해 서버 접속
  4. FastAPI 앱 준비 (Git clone 또는 직접 복사)
  5. Uvicorn + Gunicorn으로 실행 또는 Docker로 배포
  6. 도메인 연결 및 HTTPS 설정 (선택 사항)

🖥 EC2 인스턴스 생성과 기본 설정

EC2 인스턴스 생성

  1. AWS 콘솔 접속 후 EC2 서비스로 이동
  2. “인스턴스 시작” 클릭
  3. Ubuntu 22.04 LTS 선택
  4. t2.micro 또는 사용 목적에 맞는 사양 선택
  5. 키 페어 생성 및 다운로드 (pem 파일)
  6. 보안 그룹 설정 – 22, 80, 443, 8000 포트 허용
  7. 인스턴스 시작

SSH로 EC2 접속

ssh -i "my-key.pem" ubuntu@<EC2-PUBLIC-IP>

퍼블릭 IP는 EC2 콘솔에서 확인 가능하다.


🔧 배포 방식 1 – Uvicorn + Gunicorn 수동 배포

1. 서버에 필요한 도구 설치

sudo apt update
sudo apt install python3 python3-pip git -y
python3 -m pip install --upgrade pip

2. 애플리케이션 가져오기

git clone https://github.com/your-repo/fastapi-app.git
cd fastapi-app

또는 로컬에서 scp로 직접 복사해도 된다.

3. 가상환경 설정 및 의존성 설치

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

4. Gunicorn 실행

gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000

5. Nginx 설치 및 리버스 프록시 설정 (선택)

sudo apt install nginx -y
server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
sudo ln -s /etc/nginx/sites-available/fastapi /etc/nginx/sites-enabled/
sudo systemctl restart nginx

6. HTTPS 설정 (Let’s Encrypt)

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com

이제 HTTPS로도 안전하게 접근할 수 있다.


🐳 배포 방식 2 – Docker를 이용한 FastAPI 배포

1. Docker 설치

sudo apt install docker.io -y
sudo systemctl enable --now docker

2. Dockerfile 작성 예시

FROM python:3.11-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY ./app ./app

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

3. Docker 이미지 빌드 및 실행

docker build -t fastapi-app .
docker run -d -p 8000:8000 --name fastapi-container fastapi-app

이제 http://<EC2-IP>:8000으로 FastAPI에 접근할 수 있다.

4. Nginx 리버스 프록시 (Docker와 연동)

Nginx를 설치하고 Docker 컨테이너로 프록시를 연결한다. 구성은 앞선 수동 배포와 동일하다. 도커 내부 포트(8000)로 프록시가 연결되도록 설정하면 된다.


🔐 도메인 연결 및 HTTPS 설정

도메인 구입처(예: 가비아, GoDaddy 등)에서 Route53이나 A레코드로 EC2 퍼블릭 IP를 연결한 후, Nginx와 certbot을 이용해 HTTPS 인증서를 설정하면 클라우드 환경에서 완성도 높은 프로덕션 서비스가 가능하다.


🛡 배포 후 고려사항

  1. 자동 시작 설정
    서버 재부팅 후 앱 자동 실행을 위해 Supervisor 또는 systemd를 사용하는 것을 추천한다.
  2. 로그 관리
    Gunicorn과 Uvicorn의 로그를 파일로 남기거나 CloudWatch에 연동해 모니터링 체계를 구성하자.
  3. 보안 설정 강화
    EC2 보안 그룹에서 불필요한 포트를 닫고, SSH 포트를 변경하거나 키 인증만 허용하도록 설정하자.

📦 결론

AWS를 활용한 FastAPI 배포는 처음에는 생소할 수 있지만, 구조만 이해하면 유연하고 확장성 높은 운영 환경을 구성할 수 있다. EC2와 Nginx, Docker는 모두 매우 강력하고 커스터마이징 가능한 도구이며, 이들을 잘 조합하면 다양한 트래픽과 복잡한 요구 사항도 충분히 감당할 수 있다.

이번 글에서는 AWS EC2를 중심으로 설명했지만, 이후에는 ECS, Fargate, Lambda 등 더 고도화된 배포 전략도 고려할 수 있다. 기본을 다져 놓는다면 어떤 클라우드 환경에서도 흔들리지 않는 백엔드 시스템을 구축할 수 있을 것이다.

FastAPI 공식 문서 : https://fastapi.tiangolo.com/ko/

fastapi-logo,fastapi-개발-환경-설정, fastapi-앱-만들기, fastapi-라우팅, fastapi-request-response, fastapi-예외-처리, fastapi-mysql-연동, fastapi-배포