서론
애플리케이션 개발에 있어서는 단일 서비스로 모든 요구 사항을 충족하는 것이 점점 더 어려워지고 있습니다. 또한, 다양한 기술 스택이 공존하고 있으며, 이는 이를 운영할 수 있는 복잡성을 증가시킵니다. 이러한 환경에서 FastAPI와 Docker Compose를 활용하여 간단하고 효과적으로 다중 서비스를 배포하는 방법을 알아보겠습니다.
FastAPI란?
FastAPI는 Python으로 작성된 현대적인 웹 프레임워크로, 빠르고 쉽게 RESTful API를 구축할 수 있게 도와줍니다. FastAPI는 다음과 같은 주요 기능을 가지고 있습니다:
- 자동 생성되는 API 문서: Swagger UI와 ReDoc을 사용하여 간편하게 API 문서를 생성합니다.
- 높은 성능: asyncio 기반으로 설계되어 비동기 요청을 처리할 수 있습니다.
- 유효성 검사: Pydantic 모델을 활용하여 데이터 유효성 검사를 자동으로 수행합니다.
Docker Compose란?
Docker Compose는 여러 Docker 컨테이너를 정의하고 실행할 수 있는 도구입니다. 이를 사용하면 여러 서비스가 서로 어떻게 연결되는지를 정의할 수 있는 docker-compose.yml
파일을 작성하게 됩니다. 이러한 기능은 마이크로서비스 아키텍처를 구현하는 데 유용합니다.
프로젝트 구조 설정
FastAPI와 Docker를 사용한 예제를 위해, 다음과 같은 폴더 구조를 설정하겠습니다:
my_fastapi_project/ ├── app/ │ ├── main.py │ └── requirements.txt ├── docker-compose.yml ├── .env └── Dockerfile
1. FastAPI 애플리케이션 구현
먼저 app/main.py
파일에 FastAPI 애플리케이션을 구현하겠습니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
이 코드는 기본적인 FastAPI 애플리케이션을 구현하고 있으며, 두 개의 경로를 제공합니다:
/
: “Hello, World” 메시지를 반환합니다./items/{item_id}
: 지정된 아이템 ID와 쿼리 매개변수를 반환합니다.
2. 의존성 설정
FastAPI를 실행하기 위해 필요한 패키지들을 requirements.txt
파일에 정의합니다.
fastapi
uvicorn[standard]
3. Dockerfile 작성
Dockerfile을 통해 FastAPI 애플리케이션을 Docker 이미지로 설정합니다. Dockerfile
을 생성하고 다음 내용을 추가하세요:
FROM python:3.9
WORKDIR /app
COPY ./app /app
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
위의 Dockerfile은 다음 단계를 수행합니다:
python:3.9
이미지를 사용합니다.- 작업 디렉토리를 설정합니다.
- 애플리케이션 코드를 컨테이너에 복사합니다.
- 의존성을 설치합니다.
- 8000 포트를 열고, Uvicorn 서버를 실행합니다.
4. Docker Compose 파일 작성
이제 Docker Compose 파일을 작성합니다. docker-compose.yml
을 생성하고 다음 내용을 추가하세요:
version: '3.8'
services:
fastapi:
build: .
ports:
- "8000:8000"
이 Docker Compose 파일은 FastAPI 서비스를 설정하고, 외부에서 8000 포트로 접근할 수 있도록 합니다.
5. 환경 변수 관리
추가적으로 .env
파일을 생성하여 환경 변수를 관리할 수 있습니다. 다음과 같이 작성합니다:
FASTAPI_ENV=production
6. Docker Compose 실행
모든 설정이 완료되었다면 Docker Compose를 실행하여 FastAPI 애플리케이션을 시작할 수 있습니다. 다음 명령어를 사용합니다:
docker-compose up --build
브라우저에서 http://localhost:8000
에 접근하여 FastAPI 애플리케이션이 정상적으로 실행되는지 확인합니다. Swagger UI로 접속하려면 http://localhost:8000/docs
를 입력하면 됩니다.
7. 결론
FastAPI와 Docker Compose를 사용하면 다중 서비스를 간편하게 배포할 수 있다는 점을 살펴보았습니다. 이제 여러분은 FastAPI와 Docker를 기반으로 한 강력한 개발 환경을 구축하고, 다양한 마이크로서비스 아키텍처를 구현할 준비가 되었습니다. 이러한 도구들을 활용하여 더 복잡한 시스템을 설계하고 배포해봅시다.
8. 다음 단계
다음 단계로는 FastAPI의 다양한 기능을 이용해 더 복잡한 API를 구성하고, OAuth2와 같은 인증 방식을 도입하는 방법에 대해 학습할 수 있습니다. 또한, PostgreSQL과 같은 데이터베이스와의 연동도 이어질 주요 주제입니다.