[python] FastAPI에서 서버 사이드 렌더링 구현하기

FastAPI는 파이썬으로 구축된 빠르고 현대적인 웹 프레임워크입니다. 이번 포스트에서는 FastAPI를 사용하여 서버 사이드 렌더링(SSR)을 구현하는 방법에 대해 알아보겠습니다. SSR은 서버에서 동적으로 HTML을 생성하여 클라이언트에게 반환하는 방식으로 작동합니다.

FastAPI 템플릿 엔진 선택하기

FastAPI는 다양한 템플릿 엔진을 지원하므로 자신에게 가장 편리한 엔진을 선택할 수 있습니다. 대표적인 템플릿 엔진으로는 Jinja2, Mako, Tornado 등이 있습니다. 이 예제에서는 Jinja2를 사용하도록 하겠습니다. Jinja2는 간편하면서도 강력한 템플릿 엔진으로 널리 사용되고 있다고 알려져 있습니다.

Jinja2 설치하기

FastAPI에서 Jinja2를 사용하기 위해서는 먼저 Jinja2를 설치해야 합니다. 아래의 명령을 사용하여 설치할 수 있습니다.

pip install jinja2

FastAPI 앱에 템플릿 설정하기

FastAPI 앱에 템플릿을 설정하기 위해 다음과 같이 코드를 작성해야 합니다.

from fastapi import FastAPI, Request, Depends
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates

app = FastAPI()
templates = Jinja2Templates(directory="templates")

@app.get("/", response_class=HTMLResponse)
def home(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

위 코드에서 Jinja2Templates 클래스를 사용하여 templates 객체를 생성합니다. directory 매개변수를 통해 템플릿 파일들이 위치한 디렉토리를 지정합니다. 그리고 TemplateResponse를 사용하여 템플릿 파일을 렌더링한 HTML을 반환합니다.

Jinja2 템플릿 작성하기

FastAPI에서는 템플릿 파일들이 위치한 디렉토리에 템플릿 파일들을 작성해야 합니다. 예를 들어 templates 디렉토리에 index.html 파일을 생성하고 다음과 같이 작성할 수 있습니다.


<!DOCTYPE html>
<html>
<head>
    <title>FastAPI SSR Example</title>
</head>
<body>
    <h1>Hello, {{ request.client.host }}!</h1>
</body>
</html>

위 템플릿은 {{ request.client.host }}를 사용하여 클라이언트의 호스트 이름을 동적으로 렌더링합니다.

FastAPI 서버 실행하기

이제 FastAPI 서버를 실행해보겠습니다. 다음과 같은 명령을 사용하여 FastAPI 앱을 실행합니다.

uvicorn main:app --reload

브라우저에서 http://localhost:8000을 열면 FastAPI 서버가 실행되고 서버에서 렌더링한 동적인 HTML을 확인할 수 있습니다.

결론

이렇게 FastAPI에서 서버 사이드 렌더링을 구현할 수 있습니다. FastAPI는 강력한 템플릿 엔진과 함께 사용되어 사용자 친화적인 동적 웹 애플리케이션을 개발할 수 있는 환경을 제공합니다. FastAPI 공식 문서에는 더 자세한 내용과 예제가 포함되어 있으므로 참고하시기 바랍니다.

참고 자료