반응형
아래는 FastAPI에서 정적 파일을 제공하는 간단한 예시 코드이다.
# main.py
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.responses import HTMLResponse
app = FastAPI()
# 정적 파일을 위한 디렉토리 마운트
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/", response_class=HTMLResponse)
async def read_root():
return """
<html>
<head>
<title>FastAPI Static Files Example</title>
</head>
<body>
<h1>FastAPI Static Files 예시</h1>
<img src="/static/example.jpg" alt="예시 이미지">
<link rel="stylesheet" href="/static/styles.css">
</body>
</html>
"""
위 코드를 실행하려면 아래와 같은 디렉토리 구조가 필요하다.
your_project/
├── main.py (위 파일)
└── static/
├── example.jpg
└── styles.css
정적 파일을 위한 디렉토리 마운트를 수행하는 코드를 각 파라미터 별로 살펴보자.
app.mount("/static", StaticFiles(directory="static"), name="static")
- "/static" (첫 번째 파라미터):
- URL 경로를 지정한다.
- 웹 애플리케이션에서 정적 파일에 접근할 때 사용할 기본 URL 경로이다.
- ex: "/static/images/photo.jpg"처럼 접근
- 다른 경로로도 변경 가능하다 (예: "/assets", "/public" 등)
- StaticFiles(directory="static") (두 번째 파라미터):
- 실제 파일 시스템의 디렉토리를 지정한다
- directory="static": 프로젝트 폴더 내의 'static' 폴더를 의미
- 이 디렉토리 안에 있는 모든 파일들이 첫 번째 파라미터에서 지정한 URL 경로를 통해 접근 가능해진다.
- 절대 경로도 사용 가능하다 (예: directory="/path/to/files")
- name="static" (세 번째 파라미터):
- 마운트 지점의 이름을 지정한다.
- FastAPI의 URL 생성 기능에서 이 이름을 참조할 때 사용 가능하다.
- 템플릿에서 URL을 동적으로 생성할 때 이 이름을 사용할 수 있다(특히 Jinja2 템플릿에서 많이 사용됨).
- 선택적 파라미터이다. (생략 가능)
정적 파일 마운팅의 여러 예시
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
app = FastAPI()
# 기본적인 사용
app.mount("/static", StaticFiles(directory="static"), name="static")
# 다른 경로와 디렉토리 사용
app.mount("/assets", StaticFiles(directory="public_files"), name="assets")
# 절대 경로 사용
app.mount("/files", StaticFiles(directory="/var/www/files"), name="files")
실제 파일 시스템과 URL의 관계 예시
파일 시스템: URL 접근:
static/
├── images/ /static/images/
│ └── logo.png /static/images/logo.png
├── css/ /static/css/
│ └── style.css /static/css/style.css
└── js/ /static/js/
└── script.js /static/js/script.js
반응형