[python] FastAPI에서 트랜잭션 처리하기

FastAPI는 빠르고 강력한 웹 프레임워크로서 데이터베이스 트랜잭션을 처리하는 데 매우 유용합니다. 이 기사에서는 FastAPI에서 트랜잭션을 처리하는 방법에 대해 살펴보겠습니다.

1. 데이터베이스 연결 설정하기

가장 먼저 해야 할 것은 데이터베이스에 연결하는 것입니다. FastAPI에서 데이터베이스를 연결하는 방법은 여러 가지가 있지만, 가장 흔한 방법은 SQLAlchemy를 사용하는 것입니다. SQLAlchemy를 사용하여 데이터베이스에 연결하고 Session을 만듭니다.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"

engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

2. 트랜잭션을 사용하여 데이터 조작하기

이제 Session을 사용하여 데이터베이스 트랜잭션을 처리할 수 있습니다. FastAPI에서 API 핸들러 함수 내에서 Session을 사용하여 데이터 조작을 수행하고, 트랜잭션을 커밋하거나 롤백할 수 있습니다.

from fastapi import FastAPI, HTTPException
from sqlalchemy.orm import Session
import models, schemas 

app = FastAPI()

@app.post("/items/")
def create_item(item: schemas.ItemCreate, db: Session = Depends(get_db)):
    db_item = models.Item(**item.dict())
    db.add(db_item)
    db.commit()
    db.refresh(db_item)
    return db_item

위 코드에서 db.commit()은 트랜잭션을 커밋하는 부분이며, db.rollback()은 트랜잭션을 롤백하는 부분입니다.

3. 트랜잭션의 에러 처리하기

트랜잭션을 처리하는 동안 에러가 발생할 수 있습니다. 이때는 try-except 문을 사용하여 에러를 처리하고, 롤백하는 것이 좋습니다.

@app.post("/items/")
def create_item(item: schemas.ItemCreate, db: Session = Depends(get_db)):
    try:
        db_item = models.Item(**item.dict())
        db.add(db_item)
        db.commit()
        db.refresh(db_item)
        return db_item
    except:
        db.rollback()
        raise HTTPException(status_code=500, detail="Internal server error")

위 코드에서는 에러가 발생할 경우 트랜잭션을 롤백하고, HTTPException을 발생시켜 내부 서버 오류를 반환하도록 합니다.

이렇게 FastAPI에서 트랜잭션을 처리하는 방법을 간단히 살펴보았습니다. 효율적인 트랜잭션 처리는 안정적인 데이터베이스 조작을 위해 매우 중요합니다.

참고 자료