기술과 산업/언어 및 프레임워크
FastAPI 시리즈 14화 - CORS 설정과 보안 헤더 적용하기
B컷개발자
2025. 6. 9. 19:36
728x90
FastAPI에서 CORS(Cross-Origin Resource Sharing) 정책을 설정하고, HTTP 보안 헤더를 적용하는 방법을 설명합니다. 프론트엔드 연동과 API 보안 강화를 위한 실전 설정 예제를 포함합니다.
1. 왜 CORS 설정이 필요한가?
브라우저 기반의 프론트엔드가 외부 API 서버와 통신하려고 할 때,
서버가 CORS 정책을 명시적으로 허용하지 않으면 요청이 차단됩니다.
예를 들어,
- Vue/React 앱이 http://localhost:3000에서 실행되고
- FastAPI 백엔드가 http://localhost:8000에 있다면
다른 도메인 간 요청이므로 반드시 CORS 허용 설정이 필요합니다.
2. FastAPI에서 CORS 설정 방법
FastAPI는 Starlette의 미들웨어 구조를 그대로 사용할 수 있습니다.
from fastapi.middleware.cors import CORSMiddleware
from fastapi import FastAPI
app = FastAPI()
origins = [
"http://localhost:3000", # React 개발 서버
"https://myfrontend.com" # 배포된 프론트엔드 도메인
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins, # 허용할 출처 목록
allow_credentials=True,
allow_methods=["*"], # 모든 HTTP 메서드 허용
allow_headers=["*"], # 모든 헤더 허용
)
✅ 주요 옵션 설명
옵션 설명
allow_origins | 허용할 도메인 리스트 |
allow_credentials | 쿠키 포함 요청 허용 여부 |
allow_methods | 허용할 HTTP 메서드 (GET, POST 등) |
allow_headers | 요청 시 허용할 헤더 종류 |
3. 보안 헤더란 무엇인가?
HTTP 응답에 포함되는 보안 관련 메타 정보로,
XSS, 클릭재킹, 콘텐츠 스니핑 등을 방지할 수 있습니다.
🔒 대표 보안 헤더 목록
헤더 설명
X-Content-Type-Options: nosniff | 브라우저가 MIME 타입 추측하지 않도록 설정 |
X-Frame-Options: DENY | 클릭재킹 방지 (iframe 차단) |
X-XSS-Protection: 1; mode=block | XSS 공격 차단 필터 활성화 |
Strict-Transport-Security | HTTPS 연결 강제 (HSTS) |
4. 보안 헤더 적용 미들웨어 구현
FastAPI는 미들웨어 방식으로 보안 헤더를 직접 주입할 수 있습니다.
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.responses import Response
class SecurityHeadersMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request, call_next):
response: Response = await call_next(request)
response.headers["X-Content-Type-Options"] = "nosniff"
response.headers["X-Frame-Options"] = "DENY"
response.headers["X-XSS-Protection"] = "1; mode=block"
response.headers["Strict-Transport-Security"] = "max-age=31536000; includeSubDomains"
return response
app.add_middleware(SecurityHeadersMiddleware)
- 요청 처리 후 응답 헤더에 보안 메타데이터 삽입
- 서버 차원에서 전 API 공통 적용 가능
5. 실무 적용 팁
항목 설명
도메인 와일드카드 제한 | allow_origins=["*"]은 개발 중에만 사용, 배포 시 명확히 제한 |
쿠키 인증 사용 시 | allow_credentials=True, 정확한 도메인 지정 필요 |
OPTIONS 사전 요청 | 일부 브라우저는 CORS preflight 요청을 먼저 보냄 → 반드시 허용 필요 |
CDN/Reverse Proxy 연동 시 | 실제 Origin 헤더를 파악하여 미들웨어 조건 분기 가능 |
6. Swagger UI에서 CORS 오류가 나는 경우
Swagger UI는 프론트엔드 SPA로 간주되기 때문에,
다른 Origin에서 접근 시 CORS 오류가 발생할 수 있습니다.
이를 방지하려면 Swagger UI를 별도 배포하지 않고 백엔드와 함께 배포하거나,
Swagger UI에서도 CORS 허용 헤더가 적용된 상태에서 API 테스트가 이뤄져야 합니다.
정리 – API 개발의 기본은 보안 설정부터
기능 설정 방식
CORS 허용 | CORSMiddleware로 도메인, 메서드, 헤더 제한 설정 |
보안 헤더 삽입 | BaseHTTPMiddleware로 공통 보안 헤더 주입 |
실무 보안 확장 | HTTPS 적용, 인증 헤더 제한, CSRF 대응 등 병행 필요 |
CORS 설정은 "테스트할 수 있는 API"를 만드는 첫 걸음이고,
보안 헤더는 "운영 가능한 API"를 위한 필수 조건입니다.
728x90