지난번 프로젝트에서는 내가 FastAPI 코드를 작성하고 Docker 환경을 구축하는 작업을 맡았었다.
하지만 나는 서버에 직접 배포하는 단계 이전까지 수행했고, 실제로 EC2에 올려 서비스를 운영하는 부분은 다른 백엔드 파트 동료가 담당해주셨다.
이번에 인턴을 하면서 다시 FastAPI와 Docker 코드를 다뤄야 하는 상황이 생겼는데, 이번에는 단순히 코드 작성에서 그치지 않고 전체적인 흐름을 명확히 이해하고 싶다는 생각이 들었다.
그래서 이번 글에서는 FastAPI, Docker, 그리고 EC2가 각각 어떤 역할을 맡는지를 정리하고, 이 세 가지가 어떻게 이어져 하나의 서비스로 완성되는지를 살펴보고, 다음 글에 이어서 FastAPI와 Docker를 각각 조금 더 깊게 파고들어 정리해보려고 한다.

FastAPI — 빠른 API 서버 만들기
FastAPI는 파이썬 기반의 웹 프레임워크다. 이름 그대로 빠른 개발, 빠른 실행을 목표로 한다.
- 하는 일: REST API 작성, 요청/응답 처리, 자동 문서화(Swagger, ReDoc).
- 특징: Python 타입 힌트를 활용해서 코드만 짜도 문서가 자동 생성된다.
- 개발 단계 위치: 서비스의 기능(비즈니스 로직)을 구현하는 레이어.
예를 들어 간단한 “Hello API”는 이렇게 만든다
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello World"}
uvicorn main:app --reload로 실행하면 바로 동작한다.
즉, FastAPI는 앱 자체이다.
Docker — 실행 환경을 포장하기
FastAPI 코드가 잘 돌아간다고 해서, 다른 서버에서도 똑같이 잘 돌아간다는 보장은 없다. 파이썬 버전이 다르거나, 패키지 충돌이 있을 수 있기 때문이다.
여기서 Docker가 해결사로 등장한다.
- 하는 일: 애플리케이션과 실행 환경(라이브러리, OS)을 한 덩어리로 묶음.
- 특징: 한 번 빌드한 이미지는 어디서 실행해도 동일하게 동작.
- 개발 단계 위치: 앱을 배포 가능한 포장물(이미지)로 만드는 레이어.
예시 Dockerfile은 다음과 같다
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
즉, Docker는 FastAPI 앱을 어디서든 똑같이 실행할 수 있는 형태로 포장하는 도구이다.
EC2 — 배포의 단계
이제 앱은 Docker로 잘 포장됐다. 하지만 여전히 “내 노트북” 안에만 갇혀 있다. 다른 사람이 접속하려면 외부에서 접근 가능한 서버가 필요하다.
여기서 사용하는 게 AWS EC2이다.
- 하는 일: AWS에서 제공하는 가상 서버 (일종의 원격 컴퓨터).
- 특징: 클라우드에서 내 서버처럼 접근 가능, 언제든 켜고 끌 수 있음.
- 배포 단계 위치: 포장된 앱(Docker 이미지)을 외부에 노출하는 실행 환경.
흐름은 간단하다:
- EC2 인스턴스 생성
- Docker 설치
- 로컬에서 만든 이미지 *ECR(이미지 저장소*에 올리거나 서버에서 직접 빌드
- docker run -d -p 80:8000 fastapi-app 실행
- 도메인 연결 + HTTPS 적용
이제 다른 사람이 http://my-service.com 같은 주소로 접속할 수 있다.
즉, EC2는 FastAPI 앱이 들어 있는 Docker 컨테이너를 실제로 인터넷에 노출하는 무대이다.
📌 전체 흐름
[FastAPI] → [Docker] → [EC2(배포)] 앱 코드 실행 환경 포장 외부에 공개

- FastAPI: 앱을 만든다
- Docker: 앱을 어디서든 실행 가능하게 포장한다
- EC2: 그 포장된 앱을 세상 밖으로 꺼낸다
지난번 프로젝트에서 나는 딥러닝 파트 담당으로 FastAPI와 Docker까지는 했고, EC2 단계는 백엔드 파트분이 맡아주셨다.
즉, 나는 개발과 컨테이너라이징까지만 경험했고, 이번에 다시 정리하면서 배포(EC2)까지 포함한 전체 흐름을 간단하게 알아보았다. 이렇게 한 단계씩 정리하다 보면, 단순히 개발 환경을 구축하는 것을 넘어 실제 서비스 운영까지 연결되는 흐름을 그릴 수 있을 것이라고 기대한다.. ㅎㅎ
다음 글에서는 이 흐름을 이어서 FastAPI와 Docker를 각각 조금 더 깊게 파고들어, 실제 코드 예제와 함께 어떻게 동작하는지를 자세히 정리할 예정이다. 즉, 이번 글이 전체 개요를 잡는 글이라면, 다음 글은 각 기술을 실전적으로 다루려고한다!
'Development environment' 카테고리의 다른 글
| [Docker] streamlit+ milvus로 구성한 RAG 서비스 docker로 배포하기 (0) | 2025.10.16 |
|---|---|
| [Docker] Docker 기본 개념 및 명령어 정리 (0) | 2025.10.16 |
| [Git] Git 정리: 개념, 필수 명령어, 협업 흐름, 트러블슈팅 총정리 (1) | 2025.09.19 |
| [Poetry] poetry 개발 환경 셋팅하기 : 설치부터 가상환경 구축까지 (1) | 2025.08.22 |
| [FastAPI] FastAPI 제대로 이해하기 : 코드와 개념으로 (0) | 2025.08.20 |