최근 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.6 | Python 3.14 예정 |
평가 시점 | 즉시 문자열로 변환됨 | 나중에 처리 가능한 템플릿 객체 생성 |
보안성 | 사용자 입력 포함 시 위험 | 보안 필터링 가능 |
결과 타입 | str | Template 객체 |
용도 | 로깅, 간단 출력 | 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 이스케이프 결과 |
---|---|
< | < |
> | > |
' | ' |
" | " |
& | & |
🧪 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><script>alert('악성코드');</script></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 구현 예제 모음
'개발' 카테고리의 다른 글
[PyTorch/YOLO 오류 해결] GPU 미사용 및 torchvision::nms CUDA 에러 해결 방법 (0) | 2025.04.29 |
---|---|
코딩 초보도 가능한 무료 랜딩페이지 만들기 강의 – GitHub 배포까지 완성! (1) | 2025.04.26 |
Next.js Introduction (0) | 2024.04.20 |
GPT기반 카카오톡 AI챗봇 해몽해드림 개발기 1(미완성) (2) | 2024.02.10 |
Selenium 이용하여 Edge브라우저에서 XPath로 다음 Element 얻기 (1) | 2024.01.06 |