5.2 FastAPI에서 CRUD API 만들기

약 7분

본문 듣기
읽기 설정

글자 크기

줄 간격

글꼴

5.2 FastAPI에서 CRUD API 만들기

이번 장에서는 FastAPI를 사용하여 CRUD (Create, Read, Update, Delete) API를 구현하는 방법을 배워보겠습니다. 실습을 통해 API의 기본 동작을 이해하고, 이를 기반으로 데이터베이스와 연계하여 사용하도록 하겠습니다. FastAPI는 Python으로 간편하게 웹 API를 구축할 수 있게 해줍니다. 또한, 비동기 프로그래밍 지원과 함께 높은 성능을 제공합니다. 이번 실습을 통해 SQLite와 MySQL 두 가지 데이터베이스를 예제로 다룰 예정입니다.

준비 사항

  1. FastAPI 및 필요한 라이브러리 설치
  2. SQLite 및 MySQL 데이터베이스 설정
  3. SQLAlchemy 설치 및 설정
pip install fastapi uvicorn sqlalchemy databases aiomysql

FastAPI 기본 설정

FastAPI 프로젝트를 시작하기 위해 먼저 main.py 파일을 생성하고 기본적인 API 구조를 설정합니다. 다음은 FastAPI 애플리케이션을 설정하는 방법입니다.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"message": "Welcome to the CRUD API!"}

이제 기본 라우트가 설정되었습니다. / 경로에 GET 요청을 보내면 환영 메시지를 받을 수 있습니다.

CRUD 작업 구현

CRUD의 각 작업을 위한 엔드포인트를 구현해보겠습니다. 먼저, 필요한 데이터 모델을 정의합니다. 여기서는 사용할 데이터베이스 모델의 예로 Item을 만듭니다.

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Item(Base):
    __tablename__ = "items"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    description = Column(String)

데이터베이스 연결

다음으로 SQLite 데이터베이스와 연결하는 방법입니다. databases 라이브러리를 사용하여 비동기 연결을 설정합니다.

import databases

DATABASE_URL = "sqlite:///./test.db"
database = databases.Database(DATABASE_URL)

API 엔드포인트 추가

각 CRUD 작업을 위한 엔드포인트를 추가하겠습니다. 다음은 CREATE와 READ 작업을 위한 예시입니다.

from fastapi import HTTPException, Depends
from pydantic import BaseModel

class ItemCreate(BaseModel):
    name: str
    description: str = None

@app.post("/items/")
async def create_item(item: ItemCreate):
    query = items.insert().values(name=item.name, description=item.description)
    last_record_id = await database.execute(query)
    return {"id": last_record_id, "name": item.name, "description": item.description}

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    query = items.select().where(items.c.id == item_id)
    item = await database.fetch_one(query)
    if item is None:
        raise HTTPException(status_code=404, detail="Item not found")
    return item

주의사항

실습을 완료한 후, FastAPI 서버를 실행하여 API를 테스트합니다. 서버 실행은 아래 명령어로 가능합니다.

uvicorn main:app --reload

실습 과제 및 퀴즈

이번 장의 실습 과제로 CRUD API를 완성하여 데이터베이스에서 데이터를 생성, 읽고, 업데이트, 삭제하는 작업을 포함하십시오. 추가로 FastAPI의 인증 기능(JWT)을 활용하여 보안 기능을 강화해보세요.

퀴즈: 다음 빈칸에 적절한 단어를 채우세요.

  1. FastAPI는 __________ 기반의 웹 프레임워크입니다.
  2. __________은(는) API를 통해 데이터베이스의 데이터를 수정하는 작업을 의미합니다.

댓글 0

댓글을 남기려면 로그인하세요.

아직 댓글이 없습니다. 첫 댓글을 남겨보세요.