FastAPI 서버개발, DB 조작, R Read

FastAPI는 비동기적, 고성능 웹 프레임워크로, Python을 기반으로 하며, RESTful API를 손쉽게 개발할 수 있도록 돕습니다. 이 글에서는 FastAPI를 사용하여 데이터베이스에서 정보를 읽는 방법에 대해 살펴보겠습니다. 데이터베이스 조작의 기본적인 구성 요소인 R(Read)에 중점을 두고 진행할 것입니다. 예제로는 SQLite 데이터베이스를 사용하여 기본적인 CRUD(Create, Read, Update, Delete) 조작을 수행하겠습니다.

1. FastAPI 소개

FastAPI는 다음과 같은 주요 특징을 가지고 있습니다:

  • 빠른 성능: Starlette 및 Pydantic을 기반으로 하여 비동기 처리를 지원합니다.
  • 자동 문서화: OpenAPI 및 JSON Schema를 기반으로 자동으로 API 문서를 생성합니다.
  • 타입 힌트 지원: Python 타입의 이점을 사용하여 코드의 가독성과 안전성을 높입니다.

2. 프로젝트 설정

우선 FastAPI 및 필요한 패키지를 설치하겠습니다. 다음 명령어를 사용하여 프로젝트 환경을 설정합니다:

pip install fastapi uvicorn sqlalchemy

2.1 SQLite 데이터베이스

SQLite는 간단하게 사용할 수 있는 파일 기반의 데이터베이스로, 개발 초기 단계에서 매우 유용합니다.

2.2 데이터베이스 모델 정의

SQLAlchemy를 사용하여 데이터베이스 모델을 정의합니다. 아래는 사용자 정보를 저장하기 위한 간단한 모델입니다.

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)
    name = Column(String, index=True)
    email = Column(String, unique=True, index=True)

# 데이터베이스 엔진 및 세션 생성
engine = create_engine("sqlite:///./test.db")
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

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

3. FastAPI 앱 생성

FastAPI 앱을 생성하고, 기본적인 엔드포인트를 구현하겠습니다. 아래는 사용자 정보를 조회하는 API를 완성하는 코드입니다.

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

# FastAPI 앱 생성
app = FastAPI()

# 데이터베이스 세션 생성
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

# 사용자 조회 API 엔드포인트
@app.get("/users/{user_id}", response_model=User)
def read_user(user_id: int, db: Session = Depends(get_db)):
    db_user = db.query(User).filter(User.id == user_id).first()
    if db_user is None:
        raise HTTPException(status_code=404, detail="User not found")
    return db_user

4. 실행 및 테스트

이제 FastAPI 서버를 실행할 준비가 되었습니다. 아래 명령어로 서버를 실행합니다:

uvicorn main:app --reload

서버가 정상적으로 실행되면 브라우저에서 http://127.0.0.1:8000/docs에 접속하여 자동 생성된 API 문서를 확인할 수 있습니다. 이곳에서 사용자 정보를 요청할 수 있습니다.

5. 결론

이 글에서는 FastAPI를 사용하여 SQLite 데이터베이스로부터 데이터를 읽어오는 방법을 다뤘습니다. FastAPI의 직관적인 API 설계와 SQLAlchemy를 통해 쉽게 CRUD 작업을 수행할 수 있습니다. 추후에는 데이터 생성(Create), 수정(Update), 삭제(Delete)의 구현에 대해서도 다룰 예정입니다. FastAPI는 비즈니스 로직이 복잡해질수록 더 효과적이므로, 실제 응용 프로그램에서의 활용을 적극 추천합니다.

6. 참고 자료