FastAPI 서버개발, docker compose 이미지 빌드

1. FastAPI란?

FastAPI는 Python으로 작성된 현대적인 웹 프레임워크입니다. 비동기 프로그래밍을 지원하며, 속도가 빠르고 코드 작성이 간단한 특징을 가지고 있습니다. FastAPI는 OpenAPI와 JSON Schema를 기반으로 하여, 자동으로 문서화된 API를 생성할 수 있습니다. 또한, 타입 힌팅(Type Hinting)을 활용하여 오류를 사전에 예방할 수 있는 장점이 있습니다.

2. Docker란?

Docker는 애플리케이션을 컨테이너라는 가벼운 격리된 환경에서 실행할 수 있게 해주는 플랫폼입니다. 개발자들은 의존성을 포함한 모든 패키지를 컨테이너에 포함시켜, ‘어디서나 일관된 환경에서 실행되도록’ 할 수 있습니다. Docker를 사용하면 생산성과 효율성을 크게 향상시킬 수 있습니다.

3. Docker Compose란?

Docker Compose는 여러 개의 Docker 컨테이너를 정의하고 관리할 수 있는 도구입니다. YAML 파일을 사용하여 애플리케이션의 서비스를 정의하고, 단일 명령으로 여러 컨테이너를 실행할 수 있습니다. Docker Compose를 사용하면 복잡한 애플리케이션의 관리가 훨씬 수월해집니다.

4. FastAPI 서버 만들기

이제 FastAPI로 간단한 웹 서버를 만들어 보겠습니다. 먼저 필요한 패키지를 설치합니다.

pip install fastapi uvicorn

다음으로, FastAPI 앱을 설정합니다. main.py라는 파일을 생성하고 아래 코드를 작성합니다.

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, "q": q}

위의 코드는 간단한 FastAPI 애플리케이션을 생성합니다. 루트 경로(“/”)는 “Hello World”를 반환하고, “/items/{item_id}” 경로는 요청한 item_id와 쿼리 매개변수 q를 반환합니다.

5. Dockerfile 생성하기

Docker를 사용하여 FastAPI 애플리케이션을 배포하기 위해 Dockerfile을 생성합니다. 프로젝트의 루트 디렉토리에 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에서는 Python 3.9 이미지를 기반으로 애플리케이션을 위한 작업 디렉토리 /app를 설정합니다. 필요한 패키지를 설치하고 애플리케이션 코드를 복사한 후, uvicorn을 실행하여 FastAPI 서버를 시작합니다.

6. requirements.txt 생성하기

FastAPI와 Uvicorn을 설치하기 위한 requirements.txt 파일을 생성합니다. 다음 내용을 requirements.txt에 추가합니다.

fastapi
uvicorn

7. Docker Compose 설정하기

여러 서비스를 쉽게 관리하기 위해 docker-compose.yml 파일을 생성합니다. 프로젝트의 루트 디렉토리에 아래와 같이 docker-compose.yml 파일을 작성합니다.

version: '3.8'

services:
  app:
    build: .
    ports:
      - "80:80"

이 구성 파일은 “app”이라는 서비스를 정의하고, 현재 디렉토리에서 이미지를 빌드합니다. 또한, 호스트의 80 포트를 컨테이너의 80 포트에 매핑합니다.

8. Docker Compose를 통해 서버 실행하기

이제 모든 설정이 완료되었습니다. 다음 명령어로 Docker Compose를 통해 FastAPI 서버를 실행할 수 있습니다.

docker-compose up --build

위 명령어를 실행하면 Docker가 이미지를 빌드하고 컨테이너를 실행합니다. 브라우저에서 http://localhost로 접근하면 “Hello World” 메시지를 볼 수 있습니다.

9. 요약 및 결론

이 글에서는 FastAPI 서버를 개발하고 Docker Compose를 사용하여 이미지를 빌드하는 방법을 살펴보았습니다. FastAPI는 경량이며 비동기 처리를 지원하는 프레임워크로, Docker는 환경 구성을 통합하여 배포를 수월하게 만들어 줍니다. 이러한 도구들은 특히 복잡한 애플리케이션을 구축할 때 효과적입니다.

이제 여러분은 FastAPI와 Docker Compose를 활용하여 자신의 프로젝트에 맞게 서버를 구축하고 배포할 수 있는 능력을 갖추게 되었습니다.

추가적으로, 다양한 FastAPI의 기능 및 Docker의 고급 사용법을 탐구해보시기 바랍니다.