반응형

FastAPI에서 APIRouter를 사용하여 코드를 더 깔끔하고 모듈화된 방식으로 구성하는 방법에 대해 알아본다.



APIRouter가 필요한 이유

대규모 FastAPI 애플리케이션을 개발할 때, 모든 엔드포인트를 main.py 파일 하나에 작성하는 것은 비효율적이다. 코드가 길어지고 유지보수가 어려워진다. 이럴 때 APIRouter를 사용하면 관련된 엔드포인트들을 논리적으로 그룹화하고 모듈화할 수 있다.

 

APIRouter 기본 사용법

다음과 같이 프로젝트 구조를 만들어본다:

my_fastapi_app/
├── main.py
└── routers/
    ├── users.py
    └── items.py

1. 라우터 생성하기 (users.py)

from fastapi import APIRouter

router = APIRouter(
    prefix="/users",
    tags=["users"]
)

@router.get("/")
async def read_users():
    return [{"username": "Rick"}, {"username": "Morty"}]

@router.get("/{user_id}")
async def read_user(user_id: int):
    return {"user_id": user_id}

2. 메인 애플리케이션에 라우터 등록하기 (main.py)

from fastapi import FastAPI
from routers import users, items

app = FastAPI()

app.include_router(users.router)
app.include_router(items.router)

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

 

APIRouter의 고급 기능

1. 공통 prefix 및 태그 설정

router = APIRouter(
    prefix="/users",
    tags=["users"],
    responses={404: {"description": "Not found"}},
)

2. 의존성 주입

from fastapi import APIRouter, Depends

def get_token_header():
    return {"X-Token": "fake-token"}

router = APIRouter(
    dependencies=[Depends(get_token_header)]
)

 

APIRouter 사용의 장점

  1. 코드 구조화: 관련된 엔드포인트들을 논리적으로 그룹화할 수 있다.
  2. 재사용성: 라우터를 다른 프로젝트에서도 쉽게 재사용할 수 있다.
  3. 유지보수성: 각 기능별로 코드가 분리되어 있어 유지보수가 쉬워진다.
  4. 가독성: 전체 애플리케이션의 구조를 더 쉽게 이해할 수 있다.

 

실제 활용 예시

대형 프로젝트에서는 다음과 같이 라우터를 구성할 수 있다:

# routers/auth.py
router = APIRouter(prefix="/auth", tags=["authentication"])

# routers/users.py
router = APIRouter(prefix="/users", tags=["users"])

# routers/products.py
router = APIRouter(prefix="/products", tags=["products"])

# routers/orders.py
router = APIRouter(prefix="/orders", tags=["orders"])

 

마무리

APIRouter는 FastAPI 애플리케이션을 구조화하는 강력한 도구이다. 적절히 활용하면 코드의 가독성과 유지보수성을 크게 향상시킬 수 있다. 특히 대규모 프로젝트에서는 필수적인 요소라고 할 수 있다.

APIRouter를 사용할 때는 다음 사항들을 고려하는 게 좋다:

  • 논리적으로 관련된 엔드포인트들을 하나의 라우터로 그룹화하기
  • 명확한 prefix와 태그 사용하기
  • 공통된 의존성은 라우터 레벨에서 설정하기
  • 적절한 에러 핸들링 추가하기

 

반응형

'FastAPI' 카테고리의 다른 글

[FastAPI] 정적 파일 호스팅  (0) 2025.01.10

+ Recent posts