한양과학기술고등학교

에듀테크 프로젝트 대시보드

APIRouter — 앱 나누기

APIRouter include_router prefix tags 구조

라우트가 늘어나면 기능별 파일로 쪼갭니다. APIRouter 는 '미니 FastAPI' 입니다.

1. 라우터 파일

# app/routers/items.py
from fastapi import APIRouter, HTTPException

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

@router.get("")
def list_items():
    return [...]

@router.get("/{item_id}")
def read_item(item_id: int):
    ...

2. 앱에 등록

# app/main.py
from fastapi import FastAPI
from app.routers import items, users

app = FastAPI()
app.include_router(items.router)
app.include_router(users.router)
app.include_router(admin.router, prefix="/admin", dependencies=[Depends(verify_admin)])

3. 추천 디렉터리 구조

이 서버 lms/jobhanyang 도 유사한 app/ 구조
app/
  main.py            # FastAPI() 인스턴스, include_router
  config.py          # 설정
  database.py        # 엔진, 세션, get_db
  models.py          # SQLAlchemy 모델
  schemas.py         # Pydantic 스키마
  deps.py            # 공용 의존성
  routers/
    __init__.py
    items.py
    users.py
    auth.py

4. 라우터 레벨 공통 설정

router = APIRouter(
    prefix="/admin",
    tags=["admin"],
    dependencies=[Depends(get_current_admin)],   # 이 라우터 전체에 인증
    responses={403: {"description": "권한 없음"}},
)
"커넥션은 요청마다 열지 말고 풀에서 빌려 쓴다"