정지용
기술스택 목록
프레임워크

Jinja2

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

파이썬에서 HTML 등 텍스트 문서를 템플릿으로 동적 생성하는 템플릿 엔진

Jinja2는 파이썬 애플리케이션에서 변수·반복·조건 같은 로직을 텍스트 템플릿 안에 삽입해 최종 문서를 렌더링하는 템플릿 엔진이다. 서버에서 파이썬 코드와 HTML 마크업을 뒤섞지 않고, 화면 표현(템플릿)과 데이터 처리(파이썬 코드)를 분리하려는 목적으로 만들어졌다. Flask, Django 계열 프레임워크뿐 아니라 설정 파일이나 이메일 본문 생성 등 임의 텍스트 출력이 필요한 곳에도 널리 쓰인다. 별도의 웹 서버나 프론트엔드 프레임워크 없이도 파이썬 프로세스 내에서 완결된 렌더링이 가능하다.

이럴 때 사용합니다

  • 파이썬 코드와 화면 마크업을 분리해 유지보수성을 높이고 싶을 때
  • 외부 인터넷 없이 서버 프로세스 내부에서 완결되는 대시보드나 리포트를 렌더링할 때
  • 서버 사이드에서 동적 HTML, 설정 파일, 이메일 본문 등을 생성해야 할 때
  • Flask 등 파이썬 웹 프레임워크와 함께 기본 템플릿 엔진이 필요할 때

핵심 개념

Template
변수와 제어 태그가 섞인 텍스트 파일로, 렌더링 시점에 실제 값으로 치환되는 뼈대 문서다.
Rendering
템플릿에 컨텍스트(변수 데이터)를 주입해 최종 텍스트나 HTML을 만들어내는 과정이다.
Filter
`{{ value|filter }}` 형태로 변수 값을 가공하는 함수로, 문자열 포맷팅이나 숫자 처리 등에 쓰인다.
Template Inheritance
공통 레이아웃을 base 템플릿으로 정의하고 자식 템플릿이 block 단위로 내용을 덮어써 재사용하는 구조다.
Autoescaping
출력 값을 HTML 특수문자로 자동 이스케이프해 XSS 등 마크업 인젝션을 방지하는 기능이다.
Sandbox Environment
신뢰할 수 없는 템플릿을 안전하게 실행하기 위해 위험한 파이썬 기능 접근을 제한하는 실행 환경이다.

기본 템플릿 렌더링

변수와 for 반복문을 포함한 문자열 템플릿을 정의하고, render 호출 시 실제 데이터를 넣어 HTML을 생성한다.

Python
from jinja2 import Template

tpl = Template("""
<h1>{{ title }}</h1>
<ul>
{% for item in items %}
  <li>{{ item }}</li>
{% endfor %}
</ul>
""")

html = tpl.render(title="수집 현황", items=["장비1", "장비2", "장비3"])
print(html)

처음 쓸 때 흔한 함정

  • autoescape가 기본으로 켜지지 않는 사용 방식이 있어 XSS 방지 여부를 직접 확인해야 한다
  • 템플릿 문법(`{{ }}`, `{% %}`)과 파이썬 문법을 혼동해 복잡한 로직을 템플릿 안에 넣게 되기 쉽다
  • 외부에서 받은 템플릿을 그대로 렌더링하면 임의 코드 실행 위험이 있어 Sandbox 사용을 고려해야 한다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.