Wrapture로 느린 코드를 찾아내기
Finding Slow Code with Wrapture
Flask 쇼핑몰의 /order 엔드포인트가 느릴 때, 기존 스톱워치나 프로파일러로는 요청별 병목을 파악하기 어렵다. Wrapture는 부모-자식 관계를 기반으로 self time을 계산해, 서비스 호출 자체가 느린지 자식 호출 때문인지 구분한다. 또한 Aggregate 컬렉터로 여러 요청의 통계를 집계하고, annotate()로 테넌트별 지연을 추적할 수 있다. Counter로 쿼리 예산을 설정해 N+1 문제도 잡아낸다.
서비스는 31.0ms 중 173us만 자체적으로 사용했다. 어떤 외부 프로파일러도 임의의 메서드 몇 개에 대해 그런 숫자를 만들어낼 수 없다. 프로파일러는 전체 호출 스택만 보기 때문이다. Wrapture는 이벤트가 부모를 알고 있기 때문에 가능하다.
- themgt
2025년의 "여러 프로그래밍 언어와 기술에 걸친 전문성을 갖춘 숙련된 소프트웨어 개발자"라면 누구나:
현재 저는 안식년(마이크로 은퇴) 중이며 완전한 은퇴를 고민하고 있습니다. IT 업계는 최근 몇 년간 큰 격변을 겪었습니다 ... AI 기술의 급속한 발전은 의미 있는 일자리를 찾는 숙련된 개발자들에게 새로운 도전 과제를 만들어냈습니다.
2026년:
더 저렴한 사촌. 위의 모든 것은 기간을 유지했습니다. 때로는 답이 그냥 숫자일 뿐이고, Counter 수집기는 작업이 시작될 때 세고 그 외에는 아무것도 유지하지 않아 전체 테스트 스위트 아래에서도 실행할 수 있을 만큼 저렴합니다. 데이터베이스 계층의 execute를 한 번 바인딩하고, 카운터를 등록하고, 픽스처에서 모든 테스트에 쿼리 예산을 부여하면, 고전적인 N+1 회귀가 단지 느려진 테스트로 슬쩍 넘어가는 대신 숫자가 붙은 채로 실패합니다.
- simonw
저는 이 라이브러리에 정말 흥분됩니다.
Wrapture는 Graham의 새 프로젝트인데, 그는 이전에 wrapt(20년 이상 된 Python 몽키 패칭 라이브러리)를 개발했고 New Relic Python 에이전트의 첫 버전을 만들었습니다 - New Relic이 앱이 무엇을 하는지 보여줄 수 있도록 앱을 계측하는 라이브러리입니다.
Wrapture는 동일한 도구 세트에서 코드를 모킹하고 계측하는 기능을 모두 제공합니다. 테스트에서 "이 메서드가 실행되었는가" 또는 "이 메서드가 실행될 때 대신 이 더미 데이터를 반환하라"에 사용할 수 있고, 코드를 계측하여 무엇이 호출되고 얼마나 오래 걸리는지 측정하는 데에도 사용할 수 있습니다.
코드를 수정하지 않고도 기존 Python 코드를 계측할 수 있습니다 - 대신 어떤 메서드를 계측할지 TOML 파일에 정의하면 Wrapture가 코드를 라이브 패치해 줍니다. 즉, 변경하지 않고 실행해야 하는 모든 Python 코드를 계측하고 결과를 OpenTelemetry로 내보낼 수 있습니다.
링크된 글은 Graham이 이에 대해 쓴 시리즈의 일부입니다. 여기서 시작하는 것을 추천합니다: https://grahamdumpleton.me/posts/2026/08/introducing-wraptur...
그런 다음 그가 방금 게시한 다른 글들을 링크한 인덱스 글을 보세요: https://grahamdumpleton.me/posts/2026/09/trying-out-wrapture...