본 강좌에서는 FastAPI를 사용하여 백엔드 서버를 개발하고, 도커를 이용하여 이 서버를 패키징 및 배포하며, 데이터베이스를 포함한 전체적인 배포 과정에 대해 상세히 설명하겠습니다. FastAPI는 빠르고 현대적인 웹 프레임워크로, 비동기 API를 쉽게 개발할 수 있도록 돕습니다. 이와 더불어 도커는 애플리케이션을 컨테이너화하여 어디서든 실행할 수 있도록 해주는 도구입니다. 마지막으로 데이터베이스 배포에 대해 논의할 것입니다.
1. FastAPI 소개
FastAPI는 Python으로 작성된 웹 프레임워크이며, RESTful API를 작성하는 데 유용한 도구입니다. FastAPI의 주요 특징은 다음과 같습니다:
- 고속: Starlette를 기반으로 하여 비동기 처리를 지원해 빠른 성능을 제공합니다.
- 자동화된 문서화: OpenAPI를 기반으로 자동으로 생성된 API 문서를 제공합니다.
- 데이터 유효성 검사: Pydantic을 통해 데이터 모델과 유효성 검사를 자동으로 수행합니다.
1.1 FastAPI 설치
pip install fastapi uvicorn
위 명령어를 통해 FastAPI와 Uvicorn(ASGI 서버)를 설치할 수 있습니다.
2. FastAPI 서버 개발
이제 FastAPI를 사용하여 간단한 API 서버를 만들어 보겠습니다. 예를 들어, 사용자의 정보를 관리하는 API를 구축한다고 가정하겠습니다.
2.1 기본 구조
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
# Pydantic 모델 정의
class User(BaseModel):
id: int
name: str
age: int
# In-memory 데이터 저장소
users = []
@app.post("/users/")
def create_user(user: User):
users.append(user)
return user
@app.get("/users/{user_id}")
def read_user(user_id: int):
return users[user_id]
@app.get("/users/")
def list_users():
return users
위 코드는 간단한 사용자 API를 구현한 예제입니다. POST 요청을 통해 사용자를 추가하고, GET 요청을 통해 사용자 정보를 조회할 수 있습니다.
2.2 실행
uvicorn main:app --reload
서버를 실행하려면 위 명령어를 입력하시면 됩니다. 브라우저에서 http://127.0.0.1:8000/docs
에 접속하면 자동 생성된 API 문서를 확인할 수 있습니다.
3. 도커를 이용한 배포
이제 FastAPI 애플리케이션을 도커를 사용하여 패키징하고 배포하는 과정을 알아보겠습니다.
3.1 Dockerfile 작성
프로젝트 루트 디렉토리에 Dockerfile
을 생성합니다.
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
Dockerfile의 구성은 다음과 같습니다:
FROM
WORKDIR
COPY
RUN
CMD
: Python 이미지를 기반으로 합니다.
: 작업 디렉토리를 설정합니다.
: 현재 디렉토리의 파일을 도커 이미지로 복사합니다.
: 필요한 패키지를 설치합니다.
: 컨테이너가 시작될 때 실행될 명령어를 지정합니다.
3.2 도커 이미지 빌드
docker build -t fastapi-app .
위 명령어를 통해 도커 이미지를 빌드합니다.
3.3 도커 컨테이너 실행
docker run -d -p 80:80 fastapi-app
컨테이너를 백그라운드에서 실행합니다. 이 후 http://localhost
에서 API에 접근할 수 있습니다.
4. 데이터베이스 배포
FastAPI와 도커를 사용한 기본 API 서버 구축이 완료되었습니다. 이제 데이터베이스를 추가하여 데이터를 지속적으로 저장할 수 있는 기능을 구현해보겠습니다. 여기서는 SQLite를 사용하겠습니다.
4.1 SQLAlchemy 및 데이터베이스 설정
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
class UserModel(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
age = Column(Integer)
Base.metadata.create_all(bind=engine)
위 코드는 SQLAlchemy를 사용하여 SQLite 데이터베이스를 설정하는 방법입니다. UserModel
클래스가 데이터베이스의 사용자 테이블을 정의합니다.
4.2 FastAPI에 통합
from fastapi import Depends
from sqlalchemy.orm import Session
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.post("/users/", response_model=User)
def create_user(user: User, db: Session = Depends(get_db)):
db_user = UserModel(**user.dict())
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
@app.get("/users/{user_id}", response_model=User)
def read_user(user_id: int, db: Session = Depends(get_db)):
return db.query(UserModel).filter(UserModel.id == user_id).first()
@app.get("/users/", response_model=List[User])
def list_users(db: Session = Depends(get_db)):
return db.query(UserModel).all()
위 코드는 FastAPI에서 SQLAlchemy를 사용하여 데이터베이스와의 상호작용을 추가하는 방법을 보여줍니다. 이제 사용자를 데이터베이스에 추가하고 조회할 수 있습니다.
5. 도커에 데이터베이스 배포
도커를 사용하여 데이터베이스와 함께 FastAPI 애플리케이션을 배포하는 방법에 대해 알아보겠습니다. 이를 위해 PostgreSQL 데이터베이스를 사용할 것입니다.
5.1 Docker Compose 설정
다음으로 docker-compose.yml
파일을 생성하여 FastAPI와 PostgreSQL을 함께 실행 할 수 있도록 설정합니다.
version: '3.8'
services:
web:
build: .
ports:
- "80:80"
depends_on:
- db
environment:
- DATABASE_URL=postgresql://user:password@db/dbname
db:
image: postgres:latest
environment:
POSTGRES_DB: dbname
POSTGRES_USER: user
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
위 구성에서는 FastAPI 웹 애플리케이션이 PostgreSQL 데이터베이스에 의존하고 있음을 보여줍니다. 데이터베이스 컨테이너가 실행되면 FastAPI 애플리케이션이 이를 사용할 수 있습니다.
5.2 컨테이너 실행
docker-compose up --build
위 명령어를 사용하여 모든 서비스를 한 번에 실행합니다. FastAPI는 PostgreSQL과 연결되고, API를 통해 사용자를 관리할 수 있습니다.
결론
이번 강좌에서는 FastAPI를 사용하여 간단한 백엔드 API를 개발하고, 도커를 통해 이 API를 패키징 및 배포하며, 데이터베이스를 설정하는 방법에 대해 설명하였습니다. FastAPI와 도커를 활용하면 효율적으로 애플리케이션을 개발하고 배포할 수 있습니다. 이를 통해 현대적인 웹 애플리케이션을 손쉽게 구축할 수 있는 기초를 다질 수 있습니다.