Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 799 – Python 프로파일링 도구를 구성하기 위한 전용 profiling 패키지

Author:
Pablo Galindo Salgado <pablogsal at python.org>, László Kiss Kollár <kiss.kollar.laszlo at gmail.com>
Discussions-To:
Discourse thread
Status:
Final
Type:
Standards Track
Created:
21-Jul-2025
Python-Version:
3.15
Post-History:
01-Aug-2025
Resolution:
21-Aug-2025

Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain or CC0-1.0, whichever is more permissive 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

Important

This PEP is a historical document. The up-to-date, canonical documentation can now be found at profiling.

×

See PEP 1 for how to propose changes.

초록

이 PEP에서는 Python의 내장 프로파일링 도구를 하나의 일관된 네임스페이스 아래 구성하기 위해 profiling이라는 새 표준 라이브러리 모듈의 생성을 제안합니다.

이 PEP에서는 레거시 순수 Python 추적 프로파일러인 profile 모듈의 사용 중단도 제안합니다.

동기

Python은 현재 profilecProfile이라는 두 가지 추적 프로파일러를 제공합니다. profile 모듈은 순수 Python으로 구현되어 교육 목적이나 서브클래싱에 대체로 유용하지만, 실제 사용에는 너무 느립니다. 반면 cProfile은 C로 구현되어 실용적인 프로파일링 시나리오에 더 적합하지만, 일부 동작상의 차이로 인해 profile의 즉시 교체용 대체물이 되지는 못합니다.

둘 다 추적 프로파일러이므로 모든 함수 호출과 반환을 계측합니다. 이 방법론은 상당한 런타임 오버헤드를 발생시키며 PEP 659에서 도입된 최적화와 같은 특정 인터프리터 최적화를 비활성화할 수 있습니다. 또한 cProfile은 주 스레드만 관찰하므로 최신 동시성 Python 프로그램에서는 유용성이 떨어집니다. 혼란스럽게도 이러한 모듈의 이름은 profile이 표준임을 암시하지만, 실제로는 대부분 더 이상 사용되지 않습니다.

Python 3.15에서는 profile.sample 아래에 새로운 샘플링 프로파일러가 도입되었습니다. tachyon이라는 이름으로 알려진 이 도구는 통계적 샘플링을 사용해 성능 특성을 추론하므로 오버헤드 없는 프로파일링을 제공하며 최신 Python 인터프리터에서 더 잘 작동합니다. 또한 여러 스레드, 비동기 함수, 자유 스레딩 빌드 및 실행 중인 프로세스에 연결하는 기능을 지원합니다. 이러한 장점에도 불구하고 tachyon을 profile.sample 아래에 배치한 것은 오해를 불러일으키며 그 중요성을 가립니다.

현재 프로파일링 도구의 구성에는 일관되고 쉽게 탐색할 수 있는 구조가 부족합니다. 제안된 재구성은 사용자가 적절한 도구를 더 효과적으로 찾도록 안내하고, 프로파일러 간 방법론적 차이를 명확히 하며, 향후 확장을 위한 기반을 마련하기 위한 것입니다.

근거

이 재구성은 Python 프로파일링 도구와 관련된 몇 가지 오랜 문제를 해결합니다.

첫째, 모든 내장 프로파일러를 하나의 명확한 이름을 가진 네임스페이스 아래 모아 검색 용이성을 향상합니다. 현재 프로파일링 도구는 이름이 일관되지 않고 관계가 명확하지 않은 여러 모듈에 흩어져 있습니다. profiling 모듈을 도입하면 사용자는 프로파일링 기능을 탐색하고 이용할 명확하고 직관적인 위치를 갖게 됩니다.

둘째, 이 제안은 기반 방법론에 따라 하위 모듈의 이름을 지정하여 명확성을 높입니다 – 결정론적 추적 프로파일러에는 profiling.tracing을, 통계적 샘플링 프로파일러에는 profiling.sampling을 사용합니다. 이러한 명시적 분류를 통해 각 도구의 동작과 한계를 더 쉽게 이해할 수 있으며, 사용자가 채택하도록 권장되는 멘탈 모델에 API를 맞출 수 있습니다.

셋째, 권장 도구를 더 쉽게 찾고 사용할 수 있게 하여 개발자에게 지침을 제공합니다. 현재 구조에서는 이름의 우선성 때문에 사용자가 profile과 같이 오래되었거나 성능이 낮은 모듈에 의존하도록 오도될 수 있습니다. profiling 네임스페이스와 더 명확한 의미 체계를 사용하면 사용자는 낮은 오버헤드의 샘플링이든 상세한 추적이든 특정 사용 사례에 적합한 프로파일러를 선택할 가능성이 높아집니다.

마지막으로, 이 구조는 확장성을 촉진합니다. 프로파일링 도구를 통합된 네임스페이스 아래 통합하면 관련 없는 모듈에 과도한 기능을 추가하거나 중복되는 최상위 이름을 만들지 않고도 메모리 프로파일러, I/O 프로파일러 또는 하이브리드 도구와 같은 향후 프로파일링 기능을 간단히 도입할 수 있습니다. profiling 모듈은 이를 위한 자연스러운 공간을 제공합니다.

명세

새 모듈 구조

이 PEP는 다음을 포함하는 새로운 profiling 모듈을 소개합니다:

  • profiling.tracing: 결정론적 함수 호출 추적(cProfile에서 이전됨)입니다.
  • profiling.sampling: 통계적 샘플링 프로파일러(tachyon)입니다.

cProfile 구현은 profiling.tracing으로 이전되며, cProfile은 하위 호환성을 위한 별칭으로 남습니다. tachyon 샘플링 프로파일러는 profiling.sampling에서 사용할 수 있습니다.

profile의 사용 중단

profile 모듈은 Python 3.15부터 사용 중단될 예정입니다.

  • Python 3.15에서는 profile을 임포트하면 DeprecationWarning이 발생합니다.
  • Python 3.16에서는 profile의 모든 사용에서 DeprecationWarning이 발생합니다.
  • Python 3.17에서는 해당 모듈이 표준 라이브러리에서 제거됩니다.

Python 3.15부터는 cProfileprofile보다 profiling.tracing이 선호됩니다.

작성 시점에 profile.sampling 모듈에 있는 코드는 profiling 패키지로 이동됩니다.

문서화

Python 문서에서는 프로파일링 기능의 표준 진입점으로 새로운 profiling 모듈을 사용합니다. 또한 추적 프로파일러와 샘플링 프로파일러의 차이를 설명하고, 각 유형이 가장 적합한 경우에 대한 지침을 포함합니다.

cProfile에 대한 문서는 계속 제공되지만 새로운 profiling 대응 항목으로 연결됩니다.

하위 호환성

이 PEP에서 하위 호환성이 깨지는 유일한 측면은 향후 profile 모듈을 제거하는 것이지만, 이는 PEP 387 절차에 따라 진행됩니다.

보안 영향

없습니다.

거부된 대안

cProfile 이름 변경

cProfileprofile.tracing으로 이름을 변경하는 방안이 고려되었지만, 이 변경은 기존 코드에 큰 영향을 미칩니다. 원래 이름을 유지하면서 profiling.tracing의 별칭으로 지정하는 것은 호환성과 명확성 사이의 균형을 이룹니다.

모듈 이름으로 profilers사용

이 모듈은 처음에 profilers(복수형)로 제안되었지만, 커뮤니티 피드백에 따라 profiling(동명사 형태)으로 변경되었습니다. 동명사 형태가 기능 범주를 나타내는 다른 Python 표준 라이브러리 모듈과 더 일관됩니다.

샘플링 프로파일러의 여러 이름

이 PEP의 이전 버전에서는 샘플링 프로파일러를 profiling.samplingprofiling.tachyon이라는 두 이름으로 사용할 수 있도록 제안했습니다. 혼동을 피하기 위해 이 제안은 거부되었습니다. 새로운 기능을 도입할 때는 여러 별칭을 제공하기보다 해당 기능에 접근할 수 있는 하나의 명확한 경로를 제공하는 것이 더 좋습니다. profiling.sampling이 프로파일링 방법론을 명확하게 설명하므로 이 이름이 선택되었으며, “tachyon”은 문서에서 언급될 수 있는 내부 코드명으로 남습니다.

최상위 tachyon 모듈

새 최상위 모듈로 import tachyon을 도입하는 것은 거부되었습니다. tachyon을 profiling 아래에 그룹화하면 논리적 구조를 확립하는 데 도움이 되고, 최상위 모듈의 확산을 방지하며, Python Steering Council이 요청한 대로 전역 네임스페이스의 사용도 최소화합니다.