FastAPI 서버개발, DB 조작, U Update

FastAPI는 현대적인 웹 프레임워크로서, Python을 사용하여 API 서버를 쉽게 개발할 수 있게 해줍니다.
이 글에서는 FastAPI를 사용하여 데이터베이스와 상호작용하고, 특히 데이터의 업데이트 기능에 대해 자세히 알아보겠습니다.

1. FastAPI란?

FastAPI는 비동기 프로그래밍을 지원하며, 데이터 유효성 검사를 위해 Pydantic을 통합하여 사용합니다.
이 프레임워크는 성능과 개발속도를 중시하여 설계되었으며, Swagger UI와 ReDoc을 기본적으로 제공하여 API 문서를 자동으로 생성할 수 있습니다.

1.1 FastAPI의 주요 기능

  • 비동기적 처리
  • 자동화된 API 문서화
  • 신뢰성 높은 데이터 검증
  • 직관적인 코드 구조

2. 데이터베이스 설정

FastAPI는 다양한 데이터베이스와 쉽게 통합할 수 있습니다.
이번 예제에서는 SQLAlchemy를 사용하여 SQLite 데이터베이스를 구축할 것입니다.
SQLAlchemy는 Python에서 가장 인기 있는 ORM(Object-Relational Mapping) 라이브러리 중 하나입니다.

2.1 SQLAlchemy 설치

pip install sqlalchemy databases

2.2 데이터베이스 모델 생성

데이터베이스를 사용하기 위해 먼저 데이터 모델을 정의해야 합니다.
예를 들어, 간단한 사용자 정보를 저장할 수 있는 User 모델을 만들어보겠습니다.


from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True, index=True)
    username = Column(String, unique=True, index=True)
    email = Column(String, unique=True, index=True)

# SQLite 데이터베이스 URL
DATABASE_URL = "sqlite:///./test.db"

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

# 데이터베이스 테이블 생성
Base.metadata.create_all(bind=engine)
    

3. FastAPI 설정 및 라우터 구현

FastAPI 애플리케이션을 설정하고, 사용자 정보를 업데이트할 수 있는 API의 엔드포인트를 구현하겠습니다.

3.1 FastAPI 설치

pip install fastapi[all]

3.2 FastAPI 설계 및 엔드포인트 구현

CRUD(Create, Read, Update, Delete) 중 Update 기능을 중점적으로 살펴보겠습니다.
아래 예제 코드는 사용자의 정보를 업데이트하는 API를 구현합니다.


from fastapi import FastAPI, HTTPException, Depends
from sqlalchemy.orm import Session

app = FastAPI()

# 데이터베이스 의존성 관리
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@app.put("/users/{user_id}")
def update_user(user_id: int, username: str = None, email: str = None, db: Session = Depends(get_db)):
    # 해당 ID의 사용자 검색
    user = db.query(User).filter(User.id == user_id).first()
    if not user:
        raise HTTPException(status_code=404, detail="User not found")

    # 값 업데이트
    if username:
        user.username = username
    if email:
        user.email = email

    db.commit()
    db.refresh(user)
    
    return {"message": "User updated successfully", "user": user}
    

4. 업데이트 기능 테스트

API를 테스트하기 위해 Swagger UI를 사용하여 업데이트 작업을 수행합니다.
서버를 실행한 후, http://127.0.0.1:8000/docs에 접근하여 API를 확인하고 테스트할 수 있습니다.


# 서버 실행
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)
    

5. 결론

FastAPI와 SQLAlchemy를 사용하여 RESTful API를 개발하고, 데이터베이스에서 정보를 업데이트하는 방법에 대해 알아보았습니다.
FastAPI는 빠른 성능과 편리한 개발 경험을 제공하며, 실제 많은 프로젝트에서 활용되고 있습니다.
데이터베이스 작업을 쉽게 처리할 수 있도록 하여 효율적인 서버 개발을 도와줍니다.

이 글에서 제공한 예제를 토대로 프로젝트를 확장하고, 다양한 기능을 추가하여 자신만의 FastAPI 애플리케이션을 만들어보세요.
FastAPI는 매우 유연하고 확장성이 뛰어난 프레임워크이므로, 다양한 요구사항에 맞추어 개발할 수 있습니다.

참고 자료