한양과학기술고등학교

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

미들웨어와 CORS

middleware CORSMiddleware Request Response process time

미들웨어는 모든 요청/응답을 감싸는 공통 처리 레이어입니다. 로깅, 타이밍, 헤더 추가, CORS.

1. 함수형 미들웨어

import time
from fastapi import Request

@app.middleware("http")
async def add_process_time(request: Request, call_next):
    start = time.perf_counter()
    response = await call_next(request)
    response.headers["X-Process-Time"] = f"{time.perf_counter() - start:.4f}"
    return response

2. 실행 순서

나중에 추가한 미들웨어가 바깥쪽(요청을 먼저 받고 응답을 마지막에 처리). 요청: 바깥→안, 응답: 안→바깥.

3. CORS

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["https://offset0xf.com", "http://localhost:5173"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
주의
  • allow_credentials=True 와 allow_origins=["*"] 는 동시 사용 불가 (브라우저가 거부)
  • 쿠키 인증을 쓸 거면 오리진을 명시적으로 나열

4. 자주 쓰는 내장 미들웨어

미들웨어용도
GZipMiddleware응답 압축 (minimum_size)
TrustedHostMiddlewareHost 헤더 화이트리스트
HTTPSRedirectMiddlewareHTTP→HTTPS (이 서버는 Nginx 가 담당)

5. 미들웨어 vs 의존성

선택 기준
  • 미들웨어: 모든 경로, 응답 객체를 만져야 함, 라우트 매칭 전에도 동작
  • 의존성: 일부 경로, 값을 주입받아야 함, /docs 에 반영, 테스트 오버라이드 쉬움
"느린 것은 async 로, 무거운 것은 백그라운드로"