2. 도커(Docker)와 함께하는 FastAPI CRUD 구축: FASTAPI 기초

data_jeong·2023년 11월 13일
0
post-thumbnail

Docker 커맨드: 기본적인 컨테이너 관리

  1. 컨테이너 조회: 실행 중인 모든 컨테이너를 확인하려면 docker ps 명령어를 사용합니다.
  2. 컨테이너 정지: 특정 컨테이너를 정지하고 싶을 때는 docker stop [컨테이너 이름 또는 ID] 명령어를 사용합니다. 예를 들어, docker stop myfastapimyfastapi라는 이름의 컨테이너를 정지합니다.
  3. 컨테이너 시작: 정지된 컨테이너를 다시 시작하려면 docker start [컨테이너 이름 또는 ID] 명령어를 사용합니다.
  4. 컨테이너 제거: 사용하지 않는 컨테이너를 제거하고 싶을 때는 docker rm [컨테이너 이름 또는 ID] 명령어를 사용합니다. 컨테이너를 제거하기 전에 컨테이너가 정지되어 있어야 합니다.

안녕하세요! 우리는 오늘 Docker와 FastAPI를 사용해 간단한 CRUD 애플리케이션을 만들어 볼 거예요. 이 과정을 통해, 데이터를 생성, 읽기, 업데이트, 삭제하는 기본적인 웹 애플리케이션을 구축하는 방법을 배워보겠습니다.

1. FastAPI 애플리케이션 만들기

주요 목표

간단한 CRUD 로직을 가진 FastAPI 애플리케이션을 만듭니다.

main.py - FastAPI 애플리케이션 코드

from fastapi import FastAPI, HTTPException
import logging

app = FastAPI()

# 로깅 설정
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# 간단한 데이터 저장소
items = {}

@app.post("/items/{item_id}")
def create_item(item_id: int, item: str):
    if item_id in items:
        raise HTTPException(status_code=400, detail="Item already exists")
    items[item_id] = item
    logger.info(f"Item created: {item_id} = {item}")
    return items[item_id]

@app.get("/items/{item_id}")
def read_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return items[item_id]

@app.put("/items/{item_id}")
def update_item(item_id: int, item: str):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    items[item_id] = item
    logger.info(f"Item updated: {item_id} = {item}")
    return items[item_id]

@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    del items[item_id]
    logger.info(f"Item deleted: {item_id}")
    return {"detail": "Item deleted"}

requirements.txt - 필요한 패키지 목록

fastapi
uvicorn

2. Pydantic 모델 사용하기

Pydantic을 사용하여 데이터 유효성 검사를 수행합니다.

models.py - Pydantic 모델 파일


from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    in_stock: bool = True

main.py 수정 - Pydantic 모델 적용


from models import Item

@app.post("/items/{item_id}", response_model=Item)
def create_item(item_id: int, item: Item):
    # 나머지 함수 내용은 이전과 동일

3. Dockerfile 작성하기

Dockerfile을 작성하여 FastAPI 애플리케이션을 실행합니다.

Dockerfile

FROM python:3.8

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . /app

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

4. Docker 이미지 빌드 및 컨테이너 실행

Docker 명령어

  • docker build -t myfastapi .: 현재 디렉토리에 있는 Dockerfile을 사용하여 myfastapi라는 이름의 이미지를 빌드합니다.
  • docker run -d --name myfastapi -p 80:80 myfastapi: myfastapi 이미지로부터 독립된 컨테이너를 생성하고 실행합니다.

실행 명령어

docker build -t myfastapi .
docker run -d --name myfastapi -p 80:80 myfastapi

이제 Docker와 FastAPI를 사용하여 간단한 CRUD 애플리케이션을 만들고, 이 애플리케이션의 로그를 확인하는 방법과 기본적인 Docker 커맨드를 알아보았습니다. 이 지식을 통해 애플리케이션의 동작을 더 잘 이해하고 관리할 수 있게 되었길 바랍니다.

profile
데이터를 주력으로 하는 잡부입니다!

0개의 댓글