FastAPI 서버개발, Docker 설치

현대적인 웹 애플리케이션 개발에 있어 FastAPI는 빠르고, 직관적이며, 현대적인 프레임워크로 많은 개발자들에게 사랑받고 있습니다. 본 문서에서는 FastAPI로 백엔드 서버를 개발하는 과정과 이를 Docker를 통해 컨테이너화하는 방법에 대해 자세히 설명하겠습니다. FastAPI의 장점을 살리고, Docker를 활용하여 개발 환경을 표준화하고 배포의 용이성을 극대화할 수 있습니다.

목차

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를 기준으로 설명합니다:

  1. Docker의 공식 GPG 키를 추가합니다:
  2. 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"
  3. Docker를 설치합니다:
  4. sudo apt-get update
    sudo apt-get install docker-ce
  5. Docker가 정상적으로 설치되었는지 확인합니다:
  6. 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를 활용한 개발에 대한 더 많은 예제와 정보는 공식 문서를 참고하시기 바랍니다. 이제 여러분의 애플리케이션을 더 잘 관리하고 배포할 준비가 되셨기를 바랍니다!