미들웨어·CORS¶
모든 요청/응답에 공통으로 적용할 로직(로그·인증·헤더)이나, 브라우저에서 다른 도메인으로 호출 가능하게 만들려면 미들웨어와 CORS 설정이 필요합니다. FastAPI 의 두 기능을 데이터스케쳐스 실무 관점에서 정리합니다.
미들웨어 (Middleware)¶
@app.middleware("http") 데코레이터로 요청 전후에 실행되는 함수를 추가합니다.
@app.middleware("http")
async def add_header(request: Request, call_next):
response = await call_next(request)
response.headers["X-DS-Service"] = "wiki"
return response
- 요청 로그, 공통 보안 헤더, 인증 가드(경량), 레이트리밋 등을 두기 좋습니다.
- 전역(모든 라우트)에 적용되므로, 특정 라우트만 처리하려면 의존성/가드 방식을 섞습니다.
CORS¶
브라우저는 다른 출처(Scheme+Host+Port)로의 fetch 를 기본 차단합니다.
CORSMiddleware 로 허용 출처를 지정합니다.
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["https://app.data-sketchers.com"],
allow_methods=["GET", "POST"],
allow_headers=["*"],
)
- 주의:
allow_origins=["*"]는 자격증명(쿠키/Authorization)과 함께 쓸 수 없고 보안상 넓은 범위이므로, 운영에선 실제 도메인만 열어두세요.
데이터스케쳐스 실무 관점¶
- 위키/이벤트 API: SPA 프론트가 별도 도메인이면 CORS 에 실제 프론트 출처만 추가.
- 공통 헤더/감사 로그: 미들웨어에서 요청 ID 부여, 응답 시간 측정, 보안 헤더 추가.
- 인증은 미들웨어보다 의존성(Dependencies) 으로 라우트별 세밀하게 거는 편이 좋습니다.
확인 필요¶
- CORS 옵션·미들웨어 동작 세부는 Starlette/FastAPI 버전에 따라 다르므로, 공식 문서를 재확인하세요. (확인 필요)
더 알아보기¶
- 1차(공식): FastAPI — Middleware
- 1차(공식): FastAPI — CORS