FastAPI에서 문서 접속을 환경설정으로 제한하는 방법
FastAPI에서 문서 접속을 환경설정으로 제한하는 방법
DevOps
FastAPI에서 문서 접속을 환경설정으로 제한하는 방법
🌐 FastAPI에서 문서 접속을 환경설정으로 제한하는 방법
FastAPI는 기본적으로 /docs
, /redoc
, /openapi.json
경로에 API 문서를 자동으로 제공합니다. 하지만 운영 환경에서는 보안상 이 문서들을 비활성화하는 것이 좋습니다. 이 글에서는 .env
파일과 python-dotenv
를 사용해 환경에 따라 문서 기능을 자동으로 제어하는 방법을 설명합니다.
✅ 1. python-dotenv
설치
.env
파일을 로드하려면 python-dotenv
패키지가 필요합니다.
pip install python-dotenv
✅ 2. 디렉토리 구조 예시
.
├── main.py
└── .env
✅ 3. .env
파일 작성
운영/개발 환경을 설정합니다.
# .env
ENV=production
개발 시에는
ENV=development
로 변경하면 됩니다.
✅ 4. main.py
코드
dotenv
로 환경변수를 불러온 뒤, FastAPI 인스턴스를 조건부로 구성합니다.
# main.py
import os
from fastapi import FastAPI
from dotenv import load_dotenv
# .env 파일 로드
load_dotenv()
# 운영 환경 여부 판단
= os.getenv("ENV", "development")
ENV = ENV == "production"
IS_PROD
# FastAPI 앱 생성 (문서 비활성화 여부 설정)
= FastAPI(
app ="My App",
title=None if IS_PROD else "/docs",
docs_url=None if IS_PROD else "/redoc",
redoc_url=None if IS_PROD else "/openapi.json"
openapi_url
)
# 예시 라우터
@app.get("/hello")
def read_root():
return {"message": "Hello World"}
✅ 5. 실행 방법
📦 개발 환경 (문서 활성화)
ENV=development uvicorn main:app --reload
또는 .env
에서 ENV=development
로 설정하고:
uvicorn main:app --reload
🔐 운영 환경 (문서 비활성화)
ENV=production uvicorn main:app
또는 .env
에서 ENV=production
설정 후:
uvicorn main:app
이제 /docs
, /redoc
, /openapi.json
경로는 운영 환경에서 접근되지 않습니다.
🔍 참고: FastAPI 문서 관련 옵션
옵션 | 설명 |
---|---|
docs_url |
Swagger UI URL (기본: /docs ) |
redoc_url |
ReDoc 문서 URL (기본: /redoc ) |
openapi_url |
OpenAPI 스펙 JSON 경로 (기본: /openapi.json ) |
이들을 None
으로 설정하면 해당 기능이 완전히 비활성화됩니다.
✅ 마무리
.env
파일과 load_dotenv()
를 사용하면 운영/개발 환경에 따라 FastAPI 문서 접근을 쉽게 제어할 수 있습니다. 문서를 완전히 끄거나 인증 보호를 추가하고 싶다면 별도로 인증 미들웨어를 설정하는 방법도 고려해볼 수 있습니다.
운영환경에서 문서가 열려 있으면 보안상 큰 위험이 될 수 있으므로 항상 환경에 맞는 설정을 적용하세요.
카테고리 다른 글
Date | Title | Author |
---|---|---|
Jan 1, 3000 | 전체 카테고리 | |
May 5, 2025 | 포트를 점유하고 있는 서비스 제거하기 | |
Mar 20, 2025 | 우분투(Ubuntu)에서 ngrok 설치 및 사용 방법 | |
Feb 4, 2025 | Windows 11에서 WSL 설치 및 Docker 연결하기 | |
Oct 7, 2024 | Docker Compose로 Jenkins 설치 및 사용하기 | |
Aug 23, 2024 | 우분투(Ubuntu)에서 특정 폴더를 아파치 서버로 설정하기 | |
Jul 24, 2024 | GitHub Actions 시작하기 | |
Dec 31, 2023 | 우분투와 윈도우 파일 공유하기 (samba) | |
Dec 5, 2023 | crontab을 이용해서 Let’s Encrypt SSL 인증서 자동갱신 | |
Nov 27, 2023 | 우분투 docker, docker-compse 설치 | |
Nov 26, 2023 | AWS 호스팅 EC2 와 Lightsail의 차이 | |
Nov 20, 2023 | wsl 이미지 저장 위치 변경 및 백업 | |
Nov 20, 2023 | airflow postgresoperator 사용하기 | |
Nov 18, 2023 | docker-compose로 airflow 설치하기 | |
Nov 15, 2023 | wsl2에 docker 설치하기 | |
Nov 15, 2023 | mkfifo를 이용한 IPC | |
Oct 9, 2023 | Github Pull Request 템플릿 적용하기 |
No matching items