개발

🐍 Python 3.14의 새로운 문자열 기능, t-string 완전 해부

Hugh Q Lee 2025. 4. 23. 20:00

최근 PEP 750이 승인되면서, Python 3.14에는 f-string을 일반화한 새로운 문자열 문법 t-string이 도입될 예정입니다.
이 글에서는 t-string의 핵심 개념, 기존 f-string과의 비교, 그리고 HTML과 JSON 등 실전 활용 예제를 한국 개발자 관점에서 쉽게 설명드립니다.


🔁 f-string vs t-string 비교

항목f-string (f"...")t-string (t"...")
도입 버전Python 3.6Python 3.14 예정
평가 시점즉시 문자열로 변환됨나중에 처리 가능한 템플릿 객체 생성
보안성사용자 입력 포함 시 위험보안 필터링 가능
결과 타입strTemplate 객체
용도로깅, 간단 출력HTML/JSON/SQL 등 구조적 출력
필요 모듈없음string.templatelib

🚨 f-string의 보안 문제

user_input = "<script>alert('XSS');</script>"
html = f"<p>{user_input}</p>"
print(html)
# 출력: <p><script>alert('XSS');</script></p>

위 코드는 HTML 페이지에 그대로 삽입될 경우 XSS(크로스 사이트 스크립팅) 공격에 취약합니다.


✅ t-string + 이스케이프 함수로 안전하게

📌 이스케이프 함수란?

HTML, JSON처럼 문법이 있는 포맷에 값을 삽입할 때, 특수 문자를 안전하게 변환(escape)해주는 함수입니다.

입력HTML 이스케이프 결과
<&lt;
>&gt;
'&#x27;
"&quot;
&&amp;

🧪 HTML 출력 예제

from string.templatelib import Template
import html

user_input = "<script>alert('악성코드');</script>"
template = t"<p>{user_input}</p>"

def render_html(template: Template) -> str:
    return "".join(
        html.escape(item.value) if not isinstance(item, str) else item
        for item in template
    )

print(render_html(template))
# 출력: <p>&lt;script&gt;alert(&#x27;악성코드&#x27;);&lt;/script&gt;</p>

✔️ HTML도 안전하게, 구조도 유지
t-string은 중간에서 이스케이프 로직을 끼워 넣기 쉬워, 보안상 안전합니다.


🧪 JSON 응답 예제

from string.templatelib import Template
import json

user_name = '"evil"\n<script>'
template = t'{"name": "{user_name}"}'

def render_json(template: Template) -> str:
    return "".join(
        json.dumps(item.value)[1:-1] if not isinstance(item, str) else item
        for item in template
    )

print(render_json(template))
# 출력: {"name": "\"evil\"\n<script>"}

✔️ JSON 포맷을 무너뜨리지 않고 안전하게 출력할 수 있습니다.


🧩 정리: 언제 어떤 문자열 문법을 써야 할까?

상황추천 방식
내부 데이터만 조합✅ f-string
사용자 입력 포함✅ t-string + 이스케이프 처리
여전히 대부분의 일반적인 문자열 조합 작업에는 f-string이 더 간편하고 직관적입니다.
하지만 사용자 입력이나 외부 데이터를 포함하거나, JSON/HTML/SQL처럼 엄격한 포맷 제약이 있는 경우 f-string은 사용하기 어렵고 위험할 수 있습니다.
이럴 때 t-string은 강력하면서도 안전한 대안이 됩니다.

🔚 마무리

t-string은 단순한 포매팅을 넘어 보안성과 유연성을 동시에 확보한 문자열 처리 방법입니다.
HTML, SQL, JSON처럼 민감한 출력이 필요한 상황에서 매우 유용할 것입니다.

📎 참고 자료:
Python’s New t-strings (Dave Peck, 2025.04.11)
PEP 750 구현 예제 모음