날짜:
작성자: AI 기술지원팀
서론
FastAPI는 Python으로 웹 API를 만들기 위한 현대적이고 뛰어난 성능을 가진 웹 프레임워크입니다. Python의 비동기 기능을 활용하여 빠르고 효율적인 서버를 구축할 수 있습니다. 또한 FastAPI는 Swagger UI와 ReDoc을 통한 자동 문서화 기능을 제공하여 API 개발을 용이하게 합니다. 이런 혜택 덕분에 FastAPI는 현재 많은 개발자들 사이에서 인기를 끌고 있는 웹 프레임워크가 되었습니다.
이 글에서는 FastAPI에서 CORS(Cross-Origin Resource Sharing) 설정의 중요성과 구체적인 방법에 대해 탐구해 보겠습니다.
CORS란 무엇인가?
CORS는 Cross-Origin Resource Sharing의 약어로, 웹 애플리케이션이 서로 다른 출처의 리소스에 접근할 수 있게 허용하는 메커니즘입니다. 예를 들어, 클라이언트가 http://example.com
에서 호스팅되는 웹 애플리케이션이라고 할 때, http://api.example.com
에서 제공하는 API에 접근할 필요가 있다면 CORS가 필요합니다.
브라우저는 보안상의 이유로 한 출처에서 로드된 웹 페이지가 다른 출처의 리소스에 접근하는 것을 기본적으로 제한합니다. 이러한 제한을 우회하기 위해 CORS 설정이 필요합니다.
FastAPI에서 CORS 설정하기
FastAPI에서는 fastapi.middleware.cors
모듈을 통해 CORS 설정을 간편하게 할 수 있습니다. CORS 미들웨어를 사용하여 특정 도메인에서 오는 요청을 허용하거나 차단할 수 있습니다.
FastAPI에서 CORS를 설정하기 위해서는 다음 두 가지 단계를 수행해야 합니다.
- CORS 미들웨어 설치: CORS 미들웨어가 설치되어 있어야 합니다. FastAPI는 CORS 미들웨어를 기본적으로 제공하고 있습니다.
- CORS 미들웨어 적용: FastAPI 애플리케이션 인스턴스에 CORS 미들웨어를 추가합니다.
1. CORS 미들웨어 설치
FastAPI를 사용하려면 먼저 FastAPI와 관련 패키지를 설치해야 합니다. 아래의 명령어를 통해 FastAPI와 Uvicorn(ASGI 서버)를 설치할 수 있습니다:
pip install fastapi uvicorn
2. CORS 미들웨어 적용 예제
이제 FastAPI 애플리케이션을 생성하고 CORS 미들웨어를 적용하는 예제를 살펴보겠습니다:
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
# CORS 설정
origins = [
"https://example.com", # 특정 도메인
"http://localhost:8000" # 로컬 개발용
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins, # 허용할 도메인 목록
allow_credentials=True,
allow_methods=["GET", "POST", "PUT", "DELETE"], # 허용할 HTTP 메서드
allow_headers=["*"], # 허용할 헤더
)
@app.get("/")
async def root():
return {"message": "Hello, World!"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
코드 설명
위 코드를 활용하여 FastAPI 애플리케이션을 설정합니다:
from fastapi import FastAPI
: FastAPI 인스턴스를 생성하기 위한 모듈을 가져옵니다.from fastapi.middleware.cors import CORSMiddleware
: CORS 미들웨어를 가져옵니다.origins
: 이 리스트에는 허용할 도메인을 추가합니다. 개발 중에는 로컬 호스트와 같은 URL도 포함될 수 있습니다.app.add_middleware
: FastAPI 애플리케이션에 CORS 미들웨어를 추가합니다. 여기에 정의된 매개변수들은 CORS 동작을 정의합니다.allow_credentials=True
: 이 설정을 사용하면 고객 인증정보를 포함한 요청이 허용됩니다.allow_methods
: 이 리스트에는 허용할 HTTP 메서드(GET, POST, PUT, DELETE 등)를 정의합니다.allow_headers=["*"]
: 모든 요청 헤더를 허용합니다. 필요에 따라 구체적으로 정의할 수도 있습니다.@app.get("/")
: 루트 경로에 대한 GET 요청을 처리하는 엔드포인트입니다.uvicorn.run(app, host="0.0.0.0", port=8000)
: Uvicorn을 통해 서버를 시작합니다.
3. CORS의 중요성
CORS는 여러 사용 사례에서 중요하게 작용합니다. 특히, 프런트엔드 개발 및 API 제공 시 웹 애플리케이션이 서로 다른 출처에서 데이터와 리소스를 공유할 수 있도록 돕습니다. 다음은 CORS가 필요한 몇 가지 주요 이유입니다:
- 보안: CORS는 웹 애플리케이션이 잠재적으로 악의적인 요청으로부터 보호받을 수 있도록 도와줍니다.
- 상호 운영성: 서로 다른 도메인 간에 API를 호출할 수 있어 서비스 간의 상호 작용을 가능하게 합니다.
- 유연성: 다양한 클라이언트 애플리케이션(웹, 모바일 등)에서 API에 접근할 수 있도록 허용합니다.
4. CORS 관련 오류 처리
CORS 설정이 올바르지 않거나 허용되지 않는 출처에서 요청이 들어오는 경우 브라우저에서는 CORS 관련 오류 메시지를 표시합니다. 일반적인 오류와 그 해결 방법은 다음과 같습니다:
- Access-Control-Allow-Origin 오류: 이 오류는 서버에서 요청한 출처를 허용하지 않을 때 발생합니다. CORS 미들웨어 설정에서 허용할 출처를 올바로 설정했는지 확인합니다.
- Preflight 요청 오류: 특정 HTTP 메서드(예: PUT, DELETE 등)를 사용할 때 발생할 수 있습니다. 이러한 경우에는 서버가 OPTIONS 메서드에 대한 요청을 처리할 수 있도록 설정해야 합니다.
5. 다양한 CORS 설정하기
CORS 설정은 비즈니스 요구 사항에 따라 다양하게 구성할 수 있습니다. 일반적으로 다음과 같은 옵션을 설정할 수 있습니다:
- 부분적 허용: 특정 도메인만 허용하려면
allow_origins
에 해당 도메인만 추가합니다. - 모든 도메인 허용: 모든 도메인에서 요청을 허용하려면
allow_origins=["*"]
로 설정합니다. 하지만, 보안상의 이유로 권장되지 않습니다. - 동적 허용: 요청 헤더를 기반으로 CORS 설정을 동적으로 처리할 수 있습니다. 이 경우, 요청의 출처를 확인하여 동적으로 허용 여부를 결정할 수 있습니다.
결론
FastAPI는 CORS 설정을 간단하게 처리할 수 있는 강력한 도구를 제공하여, 프런트엔드와 백엔드 간의 원활한 통신을 가능하게 합니다. 적절한 CORS 설정은 보안, 유연성 및 서비스 간의 상호 작용을 보장하는 데 필수적입니다. 따라서 FastAPI로 웹 서비스를 개발할 때 CORS 설정을 주의 깊게 다루어야 합니다.
이 글을 통해 FastAPI에서 CORS 설정을 간편하게 진행할 수 있는 방법을 배우셨기를 바랍니다. FastAPI를 사용하여 더욱 안전하고 효율적인 웹 애플리케이션을 개발해 보세요!