TECH 으로 돌아가기
TECH HACKER NEWS 2026.05.22 9분 읽기 122 READS

Python 3.15에서 조용히 들어온 진짜 알짜 기능들

헤드라인 너머의 변화들

Python 3.15가 곧 출시를 앞두고 있어요. 보통 새 버전 얘기 나오면 다들 "GIL이 어떻게 됐냐", "JIT은 들어왔냐" 같은 큰 떡밥에만 관심을 쏟잖아요. 그런데 한 개발자(blog.changs.co.uk)가 정리한 글을 보면, 헤드라인에 나오지 않은 자잘하지만 정말 유용한 기능들이 꽤 많아요. 오히려 실무에서는 이런 변화가 더 자주 쓰이게 될 가능성이 커요.

1. t-strings: 문자열 템플릿의 새로운 형태

가장 눈에 띄는 변화 중 하나는 t-strings(템플릿 문자열) 이에요. 우리가 익히 알고 있는 f-strings가 "즉시 평가되는 포맷 문자열"이었다면, t-strings는 "평가가 지연되는 템플릿"이에요.

이게 뭐냐면, 예를 들어 t"Hello, {name}" 이렇게 쓰면 그게 바로 문자열로 변환되는 게 아니라 Template 객체가 만들어져요. 그 객체를 나중에 처리해서, 이스케이프 처리를 다르게 한다든지, SQL 인젝션을 방지한다든지, HTML 안전하게 렌더링한다든지 같은 후처리를 할 수 있어요. PEP 750에서 도입된 기능이죠.

이게 왜 중요하냐면, SQL이나 HTML, Shell 명령어를 다룰 때 정말 유용하거든요. 지금까지는 f-string으로 SQL을 짜다가 인젝션 취약점을 만드는 실수가 많았어요. t-strings를 쓰면 "이건 사용자 입력이고, 이건 코드의 일부야"를 구분할 수 있어서 훨씬 안전한 코드를 쓸 수 있게 돼요.

2. except/except* 괄호 없이 쓰기

Python 3.14에서 도입돼서 3.15에서 더 다듬어진 기능인데, 여러 예외를 한꺼번에 잡을 때 괄호 없이 쓸 수 있게 됐어요.

예전에는 except (ValueError, TypeError): 이렇게 괄호로 묶어야 했어요. 이제는 except ValueError, TypeError: 처럼 그냥 쉼표로 나열할 수 있어요. 별 거 아닌 것 같지만, Python 2에서 3로 넘어올 때 일부러 금지됐던 문법이 다시 부활한 거예요. 사람들이 자꾸 except Exception, e: 같은 구문(이건 옛날 문법으로 변수 바인딩)과 헷갈렸기 때문이었거든요. 이제는 as로 변수 바인딩을 명확히 하니까 다시 허용하게 된 거죠.

3. asyncio의 점진적 개선

3.15에서는 비동기 프로그래밍 쪽에도 작은 개선들이 있어요. TaskGroup의 성능 개선에러 전파 방식의 정리가 대표적이에요.

TaskGroup이 뭐냐면, 여러 비동기 작업을 묶어서 관리하는 도구예요. Python 3.11에서 도입됐는데, 자식 작업 중 하나가 실패하면 다른 작업도 깔끔하게 취소하고 예외를 모아주는 기능이에요. 3.15에서는 이걸 더 빠르게 만들었고, 취소 처리 시의 미묘한 버그들도 잡았어요.

또 하나는 asyncio.timeout() 컨텍스트 매니저의 안정성 강화예요. "이 작업이 10초 안에 안 끝나면 취소해줘"를 깔끔하게 표현하는 도구인데, 중첩 사용 시 일부 케이스에서 문제가 있던 게 수정됐어요.

4. 타입 시스템의 진화

Python의 타입 힌트는 매년 조금씩 발전하고 있어요. 3.15에서는 TypeIsTypeGuard의 개선, 그리고 PEP 695 제네릭 문법의 완성도 향상이 핵심이에요.

TypeIs가 뭐냐면, "이 변수가 정말 이 타입이 맞는지 확인해주는 함수"를 만들 때 쓰는 거예요. 예를 들어 def is_string(x) -> TypeIs[str]: 이런 식으로 정의하면, 호출한 쪽에서 type narrowing이 더 정확하게 일어나요. 이건 mypy나 pyright 같은 타입 체커가 코드를 더 똑똑하게 이해하게 만들어줘요.

그리고 type 키워드로 제네릭 타입 별칭을 쉽게 만들 수 있게 된 게 3.12부터의 흐름인데, 3.15에서 더 다듬어졌어요. 예전엔 from typing import TypeVar, Generic 하고 복잡하게 쓰던 걸 이제는 type Vector[T] = list[T] 한 줄로 끝낼 수 있어요.

5. CPython 내부 최적화

눈에 보이진 않지만 성능에 큰 영향을 주는 변화들도 있어요. 인터프리터 루프 최적화, dict 구현 개선, 인스턴스 속성 접근 속도 향상 같은 것들이에요.

특히 3.13부터 시작된 Free-threaded Python(GIL 없는 모드) 의 안정화 작업이 3.15에서도 계속되고 있어요. GIL이 뭐냐면, 파이썬이 한 번에 하나의 스레드만 파이썬 바이트코드를 실행하게 강제하는 잠금장치예요. 이게 멀티코어 활용을 막는 큰 장벽이었는데, 이제 옵션으로 끌 수 있게 된 거죠. 다만 실험적인 기능이라 프로덕션에 쓰려면 라이브러리 호환성 같은 걸 꼼꼼히 확인해야 해요.

다른 언어와 비교해보면

Python의 최근 변화를 보면, JavaScript/TypeScript 진영의 경험을 흡수하는 느낌이 있어요. t-strings는 사실상 JavaScript의 tagged template literals와 매우 비슷한 아이디어예요. 타입 시스템도 TypeScript에서 검증된 패턴을 빌려오고 있고요.

반면 RubyGo 같은 언어들과 비교하면, Python은 "한 번에 큰 혁신"보다 "점진적 누적 개선" 전략을 택하고 있어요. Go 1.x가 거의 10년 동안 안정성을 유지한 것과는 다른 접근이에요. 이게 좋다 나쁘다는 평가가 갈리는데, 적어도 Python 사용자들에게는 매년 새로 배울 게 있다는 의미예요.

한국 개발자에게

실무에서 당장 도움이 되는 부분을 정리하면 이래요. 데이터 분석이나 백엔드 일을 하시는 분이라면 t-strings로 SQL 쿼리를 안전하게 짜는 패턴을 익혀두세요. 이게 정착되면 SQLAlchemy 같은 라이브러리들이 더 우아한 API를 제공하게 될 가능성이 커요.

비동기 서버 개발자라면 TaskGroup과 timeout 관련 변경을 꼭 챙겨두세요. FastAPI, aiohttp 같은 프레임워크를 쓸 때 직접 영향을 받는 부분이에요.

대규모 코드베이스를 관리하시는 분들에게는 새로운 타입 힌트 문법이 도움이 될 거예요. 코드 리뷰가 더 쉬워지고, IDE 자동완성이 더 똑똑해지거든요.

마무리

Python 3.15는 "혁명적 한 방"은 없지만, 실무 개발자의 일상을 한 단계씩 편하게 만들어주는 변화들로 가득해요. 헤드라인에 안 나온 기능들이 사실 매일 쓰는 코드의 품질을 좌우하는 경우가 많거든요.

여러분은 새 Python 버전이 나올 때 어떤 기능부터 살펴보세요? 그리고 t-strings 같은 새 문법, 실무에서 바로 도입할 의향이 있으세요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://blog.changs.co.uk/python-315-features-that-didnt-mak...
SHARE
처리 중...