IT기술/파이썬 (python)

[FastAPI 완전 정복] 효율적인 프로젝트 초기 구조 설계 가이드

후스파 2025. 3. 20. 22:38
반응형
FastAPI 다이어그램

FastAPI는 현대적이고 고성능의 API 개발을 위한 Python 웹 프레임워크입니다. 프로젝트의 성공적인 구현과 유지보수를 위해 초기 구조를 잘 설계하는 것이 중요합니다. 이 글에서는 FastAPI 프로젝트의 이상적인 초기 구조와 각 구성 요소의 역할에 대해 상세히 알아보겠습니다.

 

FastAPI 프로젝트의 기본 구조

project_root/
├── main.py
├── database.py
├── models.py
├── domain/
│   ├── answer/
│   ├── question/
│   └── user/
└── frontend/
 
 
 

주요 파일 및 디렉터리 설명

  • main.py
    • FastAPI 애플리케이션의 진입점
    • API 서버 실행 및 라우팅 설정
    • 데이터베이스 연결 및 미들웨어 설정
from fastapi import FastAPI
from database import engine
import models

app = FastAPI()

models.Base.metadata.create_all(bind=engine)

@app.get("/")
async def root():
    return {"message": "Hello World"}

 

  • database.py
    • 데이터베이스 연결 및 세션 관리
    • SQLAlchemy를 사용한 ORM 설정
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

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

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

Base = declarative_base()

 

  • models.py
    • ORM 모델 정의
    • 데이터베이스 테이블과 매핑되는 클래스 정의
from sqlalchemy import Column, Integer, String
from database import Base

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    email = Column(String, unique=True, index=True)
    hashed_password = Column(String)

 

  • domain/ 디렉토리
    • 도메인 객체별 서브디렉토리 구성
    • 각 도메인에 대한 라우터, 스키마, CRUD 로직 포함
    예: domain/user/router.py
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from database import get_db
from . import crud, schemas

router = APIRouter()

@router.post("/users/", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
    return crud.create_user(db=db, user=user)
 
 
  • frontend/ 디렉토리
    • Svelte 등을 사용한 프론트엔드 프로젝트 구성
    • FastAPI 백엔드와 연동하여 UI 구현

 

프로젝트 구성 시 주요 고려사항

  1. 모듈화와 분리: 각 도메인 객체를 별도의 모듈로 분리하여 코드의 재사용성과 유지보수성을 높입니다.
  2. 의존성 주입: FastAPI의 Depends를 활용하여 데이터베이스 세션 등의 의존성을 효과적으로 관리합니다.
  3. 타입 힌팅: Python의 타입 힌팅을 적극 활용하여 코드의 가독성과 안정성을 높입니다.
  4. 비동기 처리: FastAPI의 비동기 기능을 활용하여 고성능 API를 구현합니다.
  5. 보안 설정: CORS, 인증, 권한 관리 등의 보안 설정을 초기에 구현합니다.

 

결론

잘 설계된 FastAPI 프로젝트 구조는 개발 효율성을 높이고, 애플리케이션의 확장성과 유지보수성을 크게 향상합니다. 이 구조를 기반으로 프로젝트를 시작하고, 필요에 따라 커스터마이징하여 최적의 개발 환경을 구축하세요.

 

FastAPI 프로젝트 구조화 시 추가로 고려할 만한 사항들:

  1. 환경 설정 관리: python-dotenv를 사용한 환경 변수 관리
  2. 로깅 설정: 체계적인 로그 관리를 위한 로깅 시스템 구축
  3. 테스트 구조: pytest를 활용한 단위 테스트 및 통합 테스트 구조 설계
  4. 문서화: Swagger UI와 ReDoc을 활용한 API 문서 자동화

 

이러한 구조와 고려사항을 바탕으로 FastAPI 프로젝트를 시작하면, 효율적이고 확장 가능한 API 개발이 가능할 것입니다.

 

 

 

[FastAPI] 프로젝트 초기 구조 잡기

FastAPI는 API 개발을 위한 효율적인 웹 프레임워크 잘 구조화된 프로젝트를 만들기 위해 초기 구조...

blog.naver.com

 

 

[FastAPI 완전 정복] Python 기반 고성능 API 개발을 위한 현대적 웹 프레임워크

FastAPI는 Python 3.6+ 버전을 위해 설계된 현대적이고 고성능의 웹 프레임워크입니다. API 개발에 특화되어 있으며, 비동기 프로그래밍을 기본으로 지원하여 효율적이고 확장 가능한 웹 애플리케이

hoosfa.tistory.com

 

반응형