"개발자 편의 개선 및 성능 향상에 집중" 파이썬 3.13의 주요 변화 살펴보기

1 week ago 34

파이썬 3.13이 출시됐다. 이번 버전에는 새로운 JIT 컴파일러, 최초의 GIL 없는 버전, 향상된 오류 메시지와 타입 시스템, 그리고 사용되지 않는 오래된 모듈 제거 등 다양한 기능이 포함됐다. 여기서는 파이썬 3.13에서 가장 중요한 새로운 기능들을 소개하고, 이런 변화가 파이썬 개발자에게 어떤 의미를 가지는지 설명한다.
 

ⓒ Getty Images Bank


파이썬 3.13의 새로운 기능

다음은 파이썬 3.13에 반영된 대표적인 변화다. 
 

  • 실험적인 JIT 컴파일러
  • GIL 없는 빌드
  • 새로운 REPL
  • 개선된 오류 메시지
  • 파이썬 타입 시스템 향상
  • '죽은 배터리' 제거


실험적인 JIT 컴파일러

파이썬 3.11에 도입된 특화 적응형 인터프리터(Specializing Adaptive Interpreter)는 일관되게 특정 타입을 사용하는 경우 이를 감지하여 해당 작업을 최적화한다. 이 방식은 성능을 10%에서 25%까지 개선하는 효과가 있었다. 파이썬 3.12에서는 더 많은 최적화와 세부적인 개선이 추가됐다. 

이제 파이썬 3.13에서는 새로운 요소가 JIT(Just-in-Time)에 추가돼 단순히 특화된 바이트코드뿐 아니라 런타임에서 실제 기계어를 생성할 수 있다. 현재 이 방식은 약 5% 정도의 성능 향상만 제공하지만, 향후 더 많은 최적화를 제공하기 위한 기반이 된다. 

현재 JIT는 실험적 기능으로, 기본적으로 활성화되지 않는다. 특정 플래그를 사용해 소스에서 C파이썬을 컴파일해야만 JIT를 활성화할 수 있다. 성능 향상이 확실해지고 관리 부담이 크지 않다면, 추후 공식 릴리스에서 JIT가 표준 옵션으로 포함될 가능성이 있다. 


GIL 없는 파이썬 빌드

GIL(Global Interpreter Lock)을 제거한 C파이썬 버전은 공식적으로 '프리 스레드(free-threaded) C파이썬'이라 불린다. 이 버전은 GIL 없이 스레드를 병렬로 실행할 수 있다. 이전에 다중 프로세스에서만 이점을 얻을 수 있었던 CPU 집약적인 작업을 이제 다중 스레드에서 효과적으로 처리할 수 있다는 의미다.

프리 스레드 C파이썬 역시 실험 단계로, 기본적으로는 활성화되지 않으며 컴파일 시 설정해야 한다. 향후 이 기능이 멀티스레드 성능을 개선하면서 싱글 스레드 성능에 영향을 미치지 않는다면, 정식 지원 옵션으로 채택될 수 있다. 향후 프리 스레드 빌드가 기본 설정이 될 가능성도 있다.


새로운 REPL

프로그램을 실행하지 않고 명령줄에서 파이썬을 실행하면 대화형 인터프리터인 REPL(Read-Eval-Print-Loop)이 실행된다. 파이썬 3.13의 REPL은 보다 유연하게 작동하며, 실제 편집기와 유사하게 사용할 수 있도록 여러 개선이 이뤄졌다.
 

  • 콘솔 출력에 기본적으로 색상이 적용되어 더 풍부한 오류 메시지를 제공한다.
  • F1을 누르면 대화형 도움말 브라우저를 열 수 있다.
  • F2를 눌러 명령어 기록을 탐색할 수 있다.
  • F3을 누르면 대량의 코드를 붙여넣을 수 있는 특수 블록 붙여넣기 모드를 활성화할 수 있다.
  • 이제 REPL을 종료할 때 exit()quit() 대신, 간단히 exit 또는 quit만 입력해도 된다.

이런 개선 사항은 현재 리눅스와 맥OS에서만 사용할 수 있으며, 윈도우에서는 지원되지 않는다. 윈도우 터미널 콘솔 호스트를 사용하는 경우에도 마찬가지다. 


개선된 오류 메시지

파이썬 3.13은 오류 메시지에 대한 개선을 이어간다. 
 

  • 동일한 이름을 가진 모듈을 가져오려고 할 때, 파이썬은 이를 상세히 설명하며 모듈 이름을 변경하라는 권장 메시지를 제공한다.
  • 함수에 잘못된 키워드 인수를 전달하면, 파이썬은 해당 함수에서 사용할 수 있는 올바른 인수를 제안한다.
  • 지원되는 경우, 오류 메시지는 색상이 추가된 트레이스백을 제공해 가독성을 높인다.


타입 시스템 향상

파이썬의 타입 힌팅 시스템은 버전마다 기능과 유용성이 점점 더 확장되고 있다. 3.13에서는 세 가지 중요한 변화가 추가됐다. 

타입 매개변수 기본값 지원
typing.TypeVar, typing.ParamSpec, typing.TypeVarTuple는 명시적으로 타입이 지정되지 않았을 때 사용할 기본값을 정의할 수 있다. 예를 들면 다음과 같다. 
 

T = TypeVar("T", default=str)

이 경우, T가 명시적으로 정의되지 않으면 기본값으로 str이 사용된다.

타입 좁히기를 위한 typing.TypeIs
파이썬에서는 일반적으로 isinstance()를 사용해 어떤 객체가 특정 타입인지 확인할 수 있다. typing.TypeIs는 파이썬의 타입 힌팅 메커니즘에서도 동일한 역할을 한다. 이를 통해 특정 함수가 특정 타입인지 검증하는 역할을 수행하는 것을 명확히 표시할 수 있으며, 단순히 반환 타입만이 아닌, 타입 검증 기능을 수행함을 나타낼 수 있다. 이는 타입 검사기가 해당 함수에 대해 더 정확한 검사를 할 수 있도록 도와준다.

typing.ReadOnly로 읽기 전용 애노테이션
typing.TypedDict는 특정 키와 연관된 값의 타입을 고정하는 데 사용된다. typing.ReadOnly를 사용하면 TypedDict 내 특정 값을 읽기 전용으로 지정할 수 있다. 예를 들어, 리스트는 추가하거나 제거할 수 있지만, 문자열이나 다른 타입으로 대체할 수는 없다.


'죽은 배터리' 제거

파이썬 3.11에서는 유지보수가 중단된 여러 표준 라이브러리 모듈을 식별했다. 3.11과 3.12에서 더 이상 사용되지 않는 것으로 표시한 다음, 3.13에서 완전히 제거한다는 계획이 있었다. '죽은 베터리(dead batteries)'라는 별칭이 붙은 이들 모듈은 3.13에서 제거됐다. 제거된 모듈 대부분은 서드파티 모듈로 대체하거나 다른 표준 라이브러리 구성 요소를 사용해 유사한 기능을 구현할 수 있다. 

3.13 이후 다음 3가지 버전의 파이썬에서도 더 많은 지원이 중단될 것으로 예상된다. 대부분이 거의 사용되지 않거나 문서화되지 않은 다양한 표준 라이브러리 구성 요소에 대한 메서드다. 

참고로 파이썬 프로그래밍 언어는 매년 새로운 버전을 릴리즈한다. 상반기에는 기능이 제한된 베타 버전이, 연말에는 최종 버전이 출시된다. 최신 버전이 프로그램에서 작동하는지 확인하고 새로운 기능 세트 및 성능 향상으로 인해 코드가 이점을 얻을 수 있는지 파악할 때는 비프로덕션 코드에서 최신 버전을 사용하는 것이 좋다.
editor@itworld.co.kr

Read Entire Article