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는 매우 유연하고 확장성이 뛰어난 프레임워크이므로, 다양한 요구사항에 맞추어 개발할 수 있습니다.