FastAPI는 현대적인 웹 애플리케이션을 구축하는 데 있어 매우 인기 있는 Python 웹 프레임워크입니다. 이 강좌에서는 FastAPI를 사용하여 간단한 RESTful API를 만들고 이를 Docker를 사용해 배포하는 방법에 대해 설명하겠습니다. FastAPI는 탁월한 성능과 쉬운 사용성을 제공하며, Swagger UI, 자동 문서화 등 다양한 기능을 내장하고 있어 개발자에게 많은 이점을 제공합니다.
목차
- 1. FastAPI란 무엇인가?
- 2. FastAPI 설치 및 환경 설정
- 3. FastAPI 애플리케이션 개발
- 4. Docker 이해하기
- 5. Dockerfile 작성 및 이미지 빌드
- 6. Docker 컨테이너 실행
- 7. 결론 및 다음 단계
1. FastAPI란 무엇인가?
FastAPI는 비동기 프로그래밍을 지원하는 Python 기반의 웹 프레임워크입니다. RESTful API를 쉽고 빠르게 개발할 수 있도록 설계되었습니다. FastAPI의 주요 특징은 다음과 같습니다:
- 자동 API 문서화: Swagger UI를 통한 자동화된 문서화 지원
- 높은 성능: Starlette 및 Pydantic을 기반으로 하여 높은 성능을 자랑
- 비동기 처리 지원: async/await 구문을 이용해 비동기 코드를 쉽게 작성 가능
- 데이터 검증: Pydantic을 통한 강력한 데이터 검증 기능
2. FastAPI 설치 및 환경 설정
FastAPI를 설치하기 위해서는 Python이 필요합니다. 터미널에서 다음 명령어를 입력하여 FastAPI와 Uvicorn을 설치합니다:
pip install fastapi uvicorn
설치가 완료되면, FastAPI 애플리케이션을 작성할 수 있는 기본 구조를 만듭니다.
mkdir fastapi_docker && cd fastapi_docker
touch main.py
이제 main.py
파일을 열고 기본적인 FastAPI 서버를 작성해 보겠습니다.
FastAPI 기본 서버 예제
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
위 코드는 간단한 FastAPI 서버를 정의합니다. /
경로에 GET 요청을 보내면 “Hello, World”라는 JSON 응답을 받고, /items/{item_id}
경로에 GET 요청을 보내면 해당 item_id
과 쿼리 매개변수를 포함한 JSON 응답을 반환합니다.
3. FastAPI 애플리케이션 개발
FastAPI 애플리케이션을 좀 더 발전시켜 보겠습니다. 여기서는 간단한 Todo 애플리케이션을 구현해 보겠습니다. 아래는 Todo 애플리케이션의 기본 구조입니다.
Todo 모델 정의
from typing import List, Optional
from pydantic import BaseModel
class TodoItem(BaseModel):
id: int
title: str
completed: bool = False
todos = []
Todo API 엔드포인트 구현
@app.post("/todos/", response_model=TodoItem)
async def create_todo(todo: TodoItem):
todos.append(todo)
return todo
@app.get("/todos/", response_model=List[TodoItem])
async def read_todos():
return todos
@app.delete("/todos/{todo_id}")
async def delete_todo(todo_id: int):
global todos
todos = [todo for todo in todos if todo.id != todo_id]
return {"message": "Todo item deleted"}
위의 코드에서는 Todo 항목을 생성, 조회 및 삭제할 수 있는 기본적인 REST API 엔드포인트를 제공합니다.
4. Docker 이해하기
Docker는 애플리케이션을 컨테이너로 패키징하고 배포할 수 있는 플랫폼입니다. 컨테이너는 애플리케이션과 그 의존성을 함께 묶어서 어디서든 동일하게 실행될 수 있도록 합니다. Docker를 사용하면 개발, 테스트, 배포 환경을 통일할 수 있으며, 이를 통해 일관성을 유지하고 배포를 용이하게 할 수 있습니다.
5. Dockerfile 작성 및 이미지 빌드
이제 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", "8000"]
requirements.txt
파일에는 FastAPI와 Uvicorn이 포함되어 있어야 합니다.
fastapi
uvicorn
도커 이미지 빌드
이제 도커 이미지를 빌드합니다. 다음 명령어를 터미널에 입력합니다:
docker build -t fastapi-todo .
6. Docker 컨테이너 실행
도커 이미지가 성공적으로 빌드되었다면, 이를 기반으로 컨테이너를 실행할 수 있습니다. 다음 명령어를 입력하여 FastAPI 애플리케이션을 실행합니다:
docker run -d --name fastapi-todo -p 8000:8000 fastapi-todo
이제 웹 브라우저에서 http://localhost:8000/docs에 접속하여 Swagger UI를 통해 API를 테스트할 수 있습니다.
7. 결론 및 다음 단계
이번 강좌에서는 FastAPI를 사용하여 간단한 RESTful API를 개발하고, 이를 도커를 사용해 배포하는 방법에 대해 알아보았습니다. FastAPI는 성능이 뛰어나며 비동기 처리를 쉽게 만들 수 있기 때문에, 더욱 복잡한 애플리케이션 개발에도 적합합니다.
다음 단계로는 인증 및 권한 부여, 데이터베이스 통합 등의 기능을 추가하여 좀 더 발전된 RESTful API를 만들어 볼 수 있습니다. 이러한 추가 기능들은 FastAPI의 강력한 기능들을 활용하여 쉽게 구현할 수 있습니다.
FastAPI 공식 문서