목차
반응형
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!"}
반응형
'Fastapi' 카테고리의 다른 글
[FastAPI] 디자인 패턴-레포지토리 패턴(11-6) (0) | 2025.02.02 |
---|---|
[FastAPI] 디자인 패턴-서비스 레이어 패턴(11-5) (0) | 2025.02.02 |
[FastAPI] 디자인 패턴-미들웨어 패턴(Middleware Pattern) (11-3) (0) | 2025.01.27 |
[FastAPI] 디자인패턴-팩토리 패턴(Factory Pattern) (11-2) (0) | 2025.01.27 |
[FastAPI] 디자인패턴-의존성 주입(Dependency Injection) (11-1) (0) | 2025.01.24 |