인공지능 개발자 수다(유튜브 바로가기) 자세히보기

Fastapi

[FastAPI] 디자인 패턴-라우터패턴(Router Pattern) (11-4)

Suda_777 2025. 2. 2. 20:38

목차

    반응형

     

    1. 라우터 패턴 (Router Pattern) 이란

    라우터 패턴(Router Pattern)은 FastAPI에서 API 엔드포인트를 논리적으로 분리하여 관리하는 방법

    기본적으로 APIRouter를 사용하여 엔드포인트를 모듈화하고, app 객체를 만드는 부분에서 이를 포함시키는 방식.

     

    장점

    • 코드 모듈화: 엔드포인트를 역할별로 나
    • 가독성 향상: 각 엔드포인트의 역할이 명확
    • 유지보수 용이: 특정 기능을 수정하거나 추가할 때 더 쉽게 변경 가능
    • 확장성: 새로운 API 기능을 추가할 때 기존 구조를 해치지 않고 추가 가능

     


    2. 라우터 패턴 사용 방법

    프로젝트 구조 예시

    my_fastapi_project/
    │── main.py
    │── routers/
    │   ├── user.py
    │   ├── item.py
    │── models/
    │── schemas/
    │── services/
    │── database.py

     

    routers/user.py

    • APIRouter() 를 이용한 라우터 정의
    • 서비스 레이어에서는 FastAPI와 관련 없는 코드가 들어가는 것이 좋으므로(비즈니스 로직에 집중), 라우터에서 의존성 관리를 해결하는 것이 좋음. 게다가 요청 단위로 트랜젝션을 관리할 수 있어 좋음.
    • try, except를 이용해 예외 발생시 HTTPException을 처리해줌.
    from fastapi import APIRouter, Depends, HTTPException
    from sqlalchemy.orm import Session
    from database import get_db  # ✅ DB 의존성 주입
    from schemas.user import UserCreate, UserResponse
    from services.user_service import UserService
    
    router = APIRouter(prefix="/users", tags=["users"])
    
    @router.post("/", response_model=UserResponse)
    async def create_user(user: UserCreate, db: Session = Depends(get_db)):  # ✅ DB 의존성 주입
        try:
            user_service = UserService(db)  # ✅ 서비스에 DB 세션 주입
            return user_service.register_user(user)
        except ValueError as e:
            raise HTTPException(status_code=400, detail=str(e))

     

    main.py

    • main.py에서 라우터 등록
    • app.include_router() 메서드 이용
    from fastapi import FastAPI
    from routers import user  # 라우터 파일 불러오기
    
    app = FastAPI()
    
    # 라우터 등록
    app.include_router(user.router)
    
    @app.get("/")
    async def root():
        return {"message": "Hello, FastAPI!"}

     

     

     

    반응형