Python 3.15: 성능과 개발 경험의 조화 (주요 변화 총정리)
https://docs.python.org/3.15/whatsnew/3.15.html
파이썬 3.15의 알파 단계가 마무리되면서 구체적인 스펙들이 공개되었습니다. 이번 릴리즈는 성능(Lazy Import + JIT + Profiler), 개발자 경험(에러 메시지, Typing), 그리고 시스템 기능(SSL, Subprocess) 강화에 초점이 맞춰져 있습니다.
주요 하이라이트를 상세히 정리해 보았습니다.
🚀 Summary – Release Highlights
- PEP 810 (Lazy Imports): import 시점이 아니라 실제 사용 시 로딩하여 startup 성능 대폭 개선
- PEP 814 (frozendict): Immutable + Hashable dict 타입 드디어 추가
- PEP 799 (profiling 패키지): 프로파일링 기능을 통합한 새로운 모듈 구조
- Tachyon Profiler: 초고속 샘플링 프로파일러 추가 (Production 사용 가능)
- PEP 798 (Comprehension Unpacking): 리스트/딕셔너리 컴프리헨션에서
*,**지원 - UTF-8 기본 인코딩: OS와 무관하게 시스템 전체에서 UTF-8 기본 사용
- 타입 시스템 개선:
TypedDict확장 및TypeForm도입 - JIT 업그레이드: 지속적인 성능 개선
- 에러 메시지 개선: 더 정확하고 친절한 Suggestion 제공
1. PEP 810: Explicit Lazy Imports
그동안 대규모 프로젝트의 고질병이었던 startup 속도를 해결하기 위한 기능입니다.
lazy import키워드를 사용하여 모듈 임포트를 실제 접근 시점까지 지연시킵니다.- 접근 전까지는 Proxy 객체로 유지됩니다.
- 기존 코드 구조를 유지하면서도 초기 로드 시간을 획기적으로 줄일 수 있습니다.
- CLI 옵션, 환경 변수, 또는 Runtime API를 통해 전역적으로 제어할 수 있으며, 필터 함수를 사용해 선택적으로 적용하는 것도 가능합니다.
- 단, module-level에서만 사용 가능하다는 제약이 있습니다.
2. PEP 814: frozendict
드디어 파이썬에 변경 불가능한(Immutable) 딕셔너리가 도입됩니다.
- 이 객체는 Immutable이자 Hashable하므로, 다른 딕셔너리의 Key로 사용하거나 Set의 원소로 넣을 수 있습니다.
- 순서는 유지하지만, 비교 연산 시에는 순서를 무시합니다.
- 여러 표준 라이브러리(stdlib) 모듈에서도 공식 지원이 추가되었습니다.
- 이제
dict타입 체크 대신Mapping기반의 체크가 권장됩니다.
3. PEP 799: profiling 패키지 & Tachyon
프로파일링 도구들이 profiling이라는 새로운 네임스페이스 아래로 통합됩니다.
- 기존
cProfile은tracing으로 이동하며, 새로운 샘플링 프로파일러인 Tachyon이 추가됩니다. - 기존
profile모듈은 향후deprecated될 예정입니다.
⚡ Tachyon (Sampling Profiler)
- 최대 1MHz의 초고속 샘플링 기반 프로파일러입니다.
- Zero Overhead에 가까워 서비스 운영 중(Production)에도 사용 가능합니다.
- 실행 중인 프로세스에 즉시
attach할 수 있습니다. - 지원 모드: Wall / CPU / GIL / Exception
- 다양한 출력: Flamegraph, Heatmap, pstats 등
- Async, Thread, Opcode 레벨의 분석을 모두 지원합니다.
4. PEP 798: Unpacking in Comprehensions
컴프리헨션의 문법적 제약이 완화됩니다.
- 리스트/셋/딕셔너리 컴프리헨션 내에서
*와**를 사용할 수 있습니다. - 복잡한 중첩 루프(Nested Loop)를 대체하거나,
itertools.chain없이도 리스트를 평탄화(Flatten)할 때 유리합니다. - Async Generator에서도 동일하게 동작합니다.
5. 에러 메시지 및 언어적 변화
- 에러 메시지 개선:
AttributeError발생 시 내부 객체 경로까지 추적하여 더 정확한 제안을 제공합니다.delattr관련 오류에도 유사한 개선이 적용되었습니다. - UTF-8 기본 설정: 윈도우를 포함한 모든 환경에서 UTF-8이 기본 인코딩이 됩니다.
- Regex 지원:
warnings필터에서 정규표현식을 사용할 수 있습니다. - 기타:
bytearray.take_bytes()(Zero-copy 반환), 슬라이스(Slice) 제네릭 타입 지원,math.integer모듈 신설 등이 포함되었습니다.
6. 표준 라이브러리(Stdlib) 주요 개선 사항
- argparse: Typo Suggestion 기능이 기본 활성화됩니다.
- collections.Counter: XOR(
^) 연산이 추가되었습니다. - json:
array_hook이 추가되어 Immutable한 구조로 즉시 파싱이 가능해졌습니다. - re: 더 명확한 API인
prefixmatch가 추가되었습니다. - shutil/tarfile: 보안 취약점(Path Traversal 등)에 대한 대응이 강화되었습니다.
- sqlite3 CLI: 자동완성과 컬러 출력이 지원됩니다.
- subprocess: Event-driven 방식의
wait이 도입되었습니다.