blog.pisik.club
article thumbnail
728x90

파이썬은 1991년에 처음 등장한 이후 매년 두 번 정도 꾸준히 업데이트되며 새로운 기능을 추가하고 있습니다.
2025년 10월에 나올 Python 3.14에서는 꽤 흥미로운 기능이 추가되는데요.
바로 템플릿 문자열(Template String, 줄여서 t-string) 입니다.

"아니, 파이썬에 이미 f-string이 있는데 왜 또 문자열 기능이?"
오늘은 이 질문에 답하면서, t-string이 무엇인지, 왜 생겼는지, 어떻게 쓰는지까지 다뤄보겠습니다.


왜 t-string이 생겼을까?

파이썬의 새 기능은 PEP 750에서 처음 제안되었습니다.

파이썬 커뮤니티 누구나 아이디어를 제안하고 토론할 수 있는 문서입니다.

 

핵심 아이디어는 이렇습니다:

  • f-string은 {변수} 자리에 값이 즉시 들어갑니다.
  • t-string은 {변수} 자리에 값이 들어가기 전, “잠깐 멈춰서” 가공·검증할 기회를 줍니다.

즉, 최종 문자열로 변환되기 전에 중간 단계에서 값을 안전하게 다루고, 가공할 수 있는 구조를 만든 거죠.


기존 문자열 포매팅 방식 복습

파이썬에서 문자열에 변수를 넣는 대표적인 방법은 세 가지가 있습니다.

 

% 포매팅 (옛날 방식)

name = "민호"
age = 25
print("이름: {}, 나이: {}".format(name, age))

장점: 단순, C언어 스타일에 익숙한 사람은 친근함.
단점: %s, %d처럼 자료형을 명시해야 함.

 

str.format() 방식

name = "민호"
age = 25
print("이름: {}, 나이: {}".format(name, age))

장점: 자료형 지정 없이 가능.
단점: f-string보다 코드가 길고, 속도도 조금 느림.

 

f-string (Python 3.6+)

name = "민호"
age = 25
print(f"이름: {name}, 내년 나이: {age + 1}")

장점: 짧고 가독성 좋음, 중괄호 안에 바로 계산식·함수 호출 가능.
단점: 즉시 평가되기 때문에, 보안 필터링 없이 그대로 출력될 수 있음.


f-string의 한계

다음은 SQL 쿼리를 만들 때 f-string을 잘못 사용한 사례입니다.

user_name = "' OR 1=1 --"
query = f"SELECT * FROM users WHERE name = '{user_name}'"
print(query)

// 출력 결과:
// SELECT * FROM users WHERE name = '' OR 1=1 --'

이렇게 되면 조건이 항상 참(OR 1=1)이 되어 데이터베이스 전체가 노출될 수 있습니다.
이런 공격을 SQL 인젝션이라고 부릅니다.


t-string 문법과 기본 사용법

t-string은 f-string과 비슷하지만, 즉시 문자열로 변환되지 않고 Template 타입으로 남습니다.
따라서 값을 바로 출력하지 않고, 먼저 가공할 수 있습니다.

현재(2025년 8월) 파이썬 3.14 정식 버전이 아니므로, 아래 예시는 개념을 보여주기 위한 시뮬레이션 코드입니다.

 

t-string 예시 (가상 시뮬레이션)

from string import Template

# t-string 예시 (가상 시뮬레이션)
template = Template("Hello ${name}, welcome!")
result = template.substitute(name="민호")
print(result)

 

결과

Hello 민호, welcome!

 

보간(Interpolation)과 가공 예시

from string import Template

def escape_html(value):
    return value.replace("<", "&lt;").replace(">", "&gt;")

template = Template("<p>${user_input}</p>")
safe_html = template.substitute(user_input=escape_html("<script>alert('XSS');</script>"))

print(safe_html)

 

결과

<p>&lt;script&gt;alert('XSS');&lt;/script&gt;</p>

 

여기서 핵심은, t-string이라면 이런 가공 단계를 강제로 거칠 수 있다는 점입니다.


t-string의 특징

지연 평가(Lazy Evaluation)

f-string: 즉시 평가 → 보안 취약점 발생 가능성

t-string: 가공 단계 후 최종 문자열 생성

타입

t-string은 str이 아니라 Template 타입

따라서 직접 str()로 변환하거나, .substitute() 같은 메서드 사용

안전성

HTML, SQL 등에서 안전한 값만 최종적으로 들어가게 필터링 가능


장점과 단점

장점 단점
보안 필터링, 데이터 검증이 쉬움 사용법이 f-string보다 복잡
문자열 처리 로직을 재활용하기 좋음 최종 문자열을 얻으려면 별도 렌더링 필요
서식 문자열 기능을 계승 IDE 자동완성, 타입 검사 지원이 제한적

마무리

f-string이 빠르고 편한 즉시 평가 방식이었다면,
t-string은 안전하고 유연한 지연 평가 방식입니다.

SQL 인젝션, XSS 같은 보안 이슈가 있는 환경이나,
문자열 가공이 잦은 도메인(HTML, Markdown, 템플릿 엔진)에서는 큰 장점이 될 수 있습니다.

728x90
profile

blog.pisik.club

@pisik

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!