Python

Python의 새로운 `t-strings`

검정비니 2025. 4. 22. 22:10
728x90
반응형

 

  • t-문자열(t-strings) 은 Python 3.14에서 새롭게 도입될 안전하고 유연한 문자열 처리 기능
  • 기존 f-string과 달리, t-string은 문자열이 아닌 Template 객체로 반환되어 자동 출력 없이 안전한 처리 가능
  • t-string은 HTML, SQL 등 동적 입력을 안전하게 이스케이프할 수 있는 구조를 갖고 있음
  • JavaScript의 **태그 템플릿(tagged templates)**과 유사한 개념으로, 다양한 변환 및 처리 확장이 가능함
  • Python 개발 도구 생태계가 이 기능을 잘 지원한다면, 웹/보안 중심의 문자열 처리 방식에 큰 변화를 줄 수 있음

Python의 새 기능: t-문자열(Template Strings)

  • Python 3.14부터 t"..." 문법으로 사용하는 Template 문자열(t-strings) 이 공식 기능으로 도입됨
  • 기존 f-string과 달리, t-string은 즉시 문자열이 아닌 string.templatelib.Template 객체로 평가됨
  • 이 객체는 출력 전 별도의 가공 과정이 필요하며, 이 과정을 통해 동적 값의 안전한 처리 및 변환 가능

왜 f-string이 위험할 수 있는가?

  • f-string은 즉시 문자열로 평가되기 때문에, 사용자 입력을 포함한 코드에서 SQL Injection이나 XSS 발생 가능
    • 예: f"{user_input}" → 공격 코드가 직접 삽입될 수 있음
  • t-string은 이러한 평가를 지연시켜 명시적으로 가공해야만 사용 가능하게 함

t-string의 예시 사용

  • HTML 이스케이프 처리 예시:
  • evil = "<script>alert('bad')</script>" template = t"{evil}" safe = html(template) # safe는 "<script>alert('bad')</script>"
  • 속성 자동 삽입 등 더 복잡한 처리도 가능:
  • attributes = {"src": "roquefort.jpg", "alt": "Yum"} template = t"<img {attributes} />" element = html(template) # 결과: "![Yum](roquefort.jpg)"

구조와 API

  • Template 객체는 .strings, .values 속성을 통해 원본 텍스트와 대입값을 분리해 제공
  • interpolations 속성을 통해 !s, :>8 등 포맷 세부 정보까지 접근 가능
  • 순회(iteration)를 통해 텍스트와 값이 섞인 상태도 직접 가공 가능
  • 수동 생성도 가능:
    from string.templatelib import Template, Interpolation
    
    
    template = Template( "Hello ", Interpolation(value="World", expression="name"), "!" )
     
  • 재미있는 예시: 돼지 라틴어 변환기
    • Template 객체의 내용을 순회하며 단어를 **Pig Latin**으로 변환하는 예제:

 

def pig\_latin(template: Template) -> str:
    ...
name = "world"

template = t"Hello {name}!"
assert pig\_latin(template) == "Hello orldway!"

향후 발전 방향

  • t-strings는 웹/보안 중심의 문자열 처리 방식에 안전성과 확장성을 가져올 수 있음
  • black, ruff, VS Code 등 개발 도구가 t-string 포맷/하이라이팅을 지원하길 기대
  • JavaScript 개발자가 익숙한 tagged template 방식과 유사해, 여러 프레임워크에서도 활용 가능성 높음

개발자 커뮤니티와의 협업

  • 본 기능은 다양한 Python 커뮤니티 멤버들의 참여와 협업을 통해 완성됨
  • 특히 Jim, Paul, Koudai, Lysandros, 그리고 Guido 등 핵심 인물들과의 교류가 언급됨
  • PEP 750과 그 예제 저장소는 GitHub에서 확인 가능

 

References

- https://news.hada.io/topic?id=20463

 

Python의 새로운 `t-strings` | GeekNews

t-문자열(t-strings) 은 Python 3.14에서 새롭게 도입될 안전하고 유연한 문자열 처리 기능임기존 f-string과 달리, t-string은 문자열이 아닌 Template 객체로 반환되어 자동 출력 없이 안전한 처리 가능t-strin

news.hada.io

 

반응형