FastAPI에서 문서 접속을 환경설정으로 제한하는 방법

FastAPI에서 문서 접속을 환경설정으로 제한하는 방법

DevOps
FastAPI에서 문서 접속을 환경설정으로 제한하는 방법
Author

gabriel yang

Published

June 5, 2025

🌐 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()

# 운영 환경 여부 판단
ENV = os.getenv("ENV", "development")
IS_PROD = ENV == "production"

# FastAPI 앱 생성 (문서 비활성화 여부 설정)
app = FastAPI(
    title="My App",
    docs_url=None if IS_PROD else "/docs",
    redoc_url=None if IS_PROD else "/redoc",
    openapi_url=None if IS_PROD else "/openapi.json"
)

# 예시 라우터
@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 전체 카테고리 gabriel yang
May 5, 2025 포트를 점유하고 있는 서비스 제거하기 gabriel yang
Mar 20, 2025 우분투(Ubuntu)에서 ngrok 설치 및 사용 방법 gabriel yang
Feb 4, 2025 Windows 11에서 WSL 설치 및 Docker 연결하기 gabriel yang
Oct 7, 2024 Docker Compose로 Jenkins 설치 및 사용하기 gabriel yang
Aug 23, 2024 우분투(Ubuntu)에서 특정 폴더를 아파치 서버로 설정하기 gabriel yang
Jul 24, 2024 GitHub Actions 시작하기 gabriel yang
Dec 31, 2023 우분투와 윈도우 파일 공유하기 (samba) gabriel yang
Dec 5, 2023 crontab을 이용해서 Let’s Encrypt SSL 인증서 자동갱신 gabriel yang
Nov 27, 2023 우분투 docker, docker-compse 설치 gabriel yang
Nov 26, 2023 AWS 호스팅 EC2 와 Lightsail의 차이 gabriel yang
Nov 20, 2023 wsl 이미지 저장 위치 변경 및 백업 gabriel yang
Nov 20, 2023 airflow postgresoperator 사용하기 gabriel yang
Nov 18, 2023 docker-compose로 airflow 설치하기 gabriel yang
Nov 15, 2023 wsl2에 docker 설치하기 gabriel yang
Nov 15, 2023 mkfifo를 이용한 IPC gabriel yang
Oct 9, 2023 Github Pull Request 템플릿 적용하기 gabriel yang
No matching items