현대적인 웹 애플리케이션 개발에 있어 FastAPI는 빠르고, 직관적이며, 현대적인 프레임워크로 많은 개발자들에게 사랑받고 있습니다. 본 문서에서는 FastAPI로 백엔드 서버를 개발하는 과정과 이를 Docker를 통해 컨테이너화하는 방법에 대해 자세히 설명하겠습니다. FastAPI의 장점을 살리고, Docker를 활용하여 개발 환경을 표준화하고 배포의 용이성을 극대화할 수 있습니다.
목차
- 1. FastAPI 소개
- 2. FastAPI 설치
- 3. FastAPI 기본 예제
- 4. Docker 소개
- 5. Docker 설치
- 6. Docker로 FastAPI 애플리케이션 배포
- 7. 결론
1. FastAPI 소개
FastAPI는 Pydantic과 Starlette를 기반으로 하는 Python web framework으로, RESTful API를 쉽게 구축할 수 있도록 설계되었습니다. 모델 정의, 자동화된 API 문서화, 비동기 처리를 지원하며, 높은 성능과 직관적인 문법으로 인기를 얻고 있습니다. FastAPI는 다음과 같은 주요 기능을 제공합니다:
- 자동 문서화: OpenAPI와 JSON Schema를 기반으로 하는 자동화된 문서화 기능.
- 비동기 프로그래밍: Python의
async/await
를 활용하여 높은 성능을 지원. - 타입 힌트: Pydantic을 통해 데이터 검증 및 변환 지원.
- 미들웨어 및 의존성 주입: 다양한 미들웨어와 의존성 관리 기능으로 효율적인 코드 작성.
2. FastAPI 설치
FastAPI와 Uvicorn을 설치하기 위해 Python이 설치되어 있어야 합니다. Python 3.6 이상이 필요하며, 다음과 같이 FastAPI와 Uvicorn을 설치할 수 있습니다:
pip install fastapi uvicorn
설치가 완료되면, 필요한 경우 Pydantic과 같은 추가 라이브러리도 설치할 수 있습니다.
3. FastAPI 기본 예제
FastAPI로 간단한 RESTful API 서버를 만들어 보겠습니다. 아래의 코드는 기본적으로 사용자 정보를 추가하고 조회하는 API를 구현합니다:
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
class User(BaseModel):
id: int
name: str
age: int
users = []
@app.post("/users/", response_model=User)
async def create_user(user: User):
users.append(user)
return user
@app.get("/users/", response_model=List[User])
async def get_users():
return users
이 코드는 POST 요청을 통해 사용자를 생성하고, GET 요청을 통해 사용자 목록을 조회하는 API를 제공합니다. 서버를 실행하려면 다음과 같은 커맨드를 사용합니다:
uvicorn main:app --reload
이제 http://127.0.0.1:8000/docs
에 접속하면 Swagger UI를 통해 API 문서를 확인하고 테스트할 수 있습니다.
4. Docker 소개
Docker는 애플리케이션을 독립적인 컨테이너에서 실행할 수 있도록 도와주는 플랫폼입니다. 컨테이너는 빠르고 경량화된 실행 환경을 제공하여 다양한 환경에서 실행할 수 있는 애플리케이션을 쉽게 배포할 수 있습니다. Docker를 사용하면 다음과 같은 이점을 얻을 수 있습니다:
- 일관된 환경: 개발 환경과 프로덕션 환경 간의 차이를 줄입니다.
- 빠른 배포: 컨테이너를 사용하면 복잡한 설치 과정 없이 빠르게 배포할 수 있습니다.
- 확장성: 쉽게 확장하고, 여러 개의 컨테이너를 동시에 관리할 수 있습니다.
5. Docker 설치
Docker를 설치하는 과정은 운영 체제에 따라 다르지만, 대체로 다음과 같은 단계를 따릅니다. 여기서는 Ubuntu를 기준으로 설명합니다:
- Docker의 공식 GPG 키를 추가합니다:
- Docker를 설치합니다:
- Docker가 정상적으로 설치되었는지 확인합니다:
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
sudo docker --version
이제 Docker를 사용할 준비가 완료되었습니다.
6. Docker로 FastAPI 애플리케이션 배포
FastAPI 애플리케이션을 Docker에서 실행하기 위해서는 Dockerfile
을 작성해야 합니다. 다음은 FastAPI 애플리케이션을 위한 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", "80"]
위의 Dockerfile에서 requirements.txt
에는 FastAPI와 Uvicorn을 포함시킵니다:
fastapi
uvicorn
이제 Docker 이미지를 빌드할 수 있습니다:
sudo docker build -t fastapi-app .
그리고 다음 명령어로 Docker 컨테이너를 실행합니다:
sudo docker run -d -p 80:80 fastapi-app
이제 http://localhost/docs
에 접속하여 FastAPI 애플리케이션을 확인할 수 있습니다.
7. 결론
이 글에서는 FastAPI로 RESTful API 서버를 구축하고, Docker를 통해 이를 컨테이너화하는 방법에 대해 설명했습니다. FastAPI는 빠르고 효율적인 웹 개발을 지원하며, Docker는 복잡한 배포 과정을 단순화하여 개발자들이 더 나은 경험을 할 수 있도록 도와줍니다. 이러한 도구들을 활용하여 개발 환경을 표준화하고, 효율적인 배포를 이루는 것이 가능합니다.
FastAPI와 Docker를 활용한 개발에 대한 더 많은 예제와 정보는 공식 문서를 참고하시기 바랍니다. 이제 여러분의 애플리케이션을 더 잘 관리하고 배포할 준비가 되셨기를 바랍니다!