본문으로 건너뛰기
Simon Willison조회 1

Wrapture로 Python 테스트와 추적 연결

새 Python 라이브러리 wrapture가 함수 호출 대체와 추적을 하나의 인터페이스로 묶습니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

Graham Dumpleton이 Python의 함수와 메서드를 감싸 테스트 대체와 실행 추적에 함께 활용하는 새 라이브러리 wrapture를 공개했습니다. Wrapture는 호출을 다른 값으로 바꾸거나 원래 메서드의 반환값을 변환할 수 있으며, OpenTelemetry 연동과 설정 파일 기반 추적 기능도 제공합니다. 예시에서는 Gateway.charge의 반환값을 stub으로 대체하거나 원래 결과의 id만 바꾼 뒤 OrderService.place를 검증합니다. 프로젝트의 모든 코드와 문서는 AI assistant가 작성했지만, 설계와 판단은 Dumpleton이 맡았고 일회성 프롬프트에 의존하는 vibe coding과는 다르다고 밝혔습니다.

섹션별 상세

01
기존 프로젝트에서 직접 소유하지 않은 함수의 호출 흐름을 관찰하면서도 실행 결과를 바꾸어 테스트하려면 Monkey Patching과 추적 도구를 따로 구성해야 합니다. wrapture는 함수나 메서드를 감싸 모든 접근을 기록하거나 지정한 값으로 반환하도록 만들어 unittest.mock의 대안과 기존 코드용 tracing 도구 역할을 함께 수행합니다. OpenTelemetry를 지원하고 target과 sink를 설정 파일에 적으면 Calculator의 outer와 inner 호출을 JSON Lines 파일로 수집할 수 있어 코드 수정 없이 관찰 범위를 붙일 수 있습니다.
toml
capture = "summary"
[[observe]]
target = "domain:Calculator"
name = ["outer", "inner"]
[[sink]]
type = "jsonlines"
path = "trace.jsonl"

설정 파일만으로 Calculator의 특정 메서드 호출을 관찰하고 JSON Lines 형식의 trace.jsonl 파일에 기록합니다.

02
Wrapture의 테스트 인터페이스는 특정 메서드 호출 시 고정 반환값을 주입하거나 원래 결과를 후처리하는 방식으로 동작합니다. Gateway.charge를 binding한 뒤 on_call.returns를 지정하면 OrderService.place(500)가 호출될 때 실제 결제 대신 {"id": "stub", "amount": 0}을 받으며, transforms_result를 사용하면 원래 반환값의 amount는 유지한 채 id를 "ch_TEST"로 바꿀 수 있습니다. 이 흐름은 외부 의존성을 격리하면서도 원래 메서드의 실행 결과를 일부 보존하는 테스트 패턴을 제공합니다.
python
def test_stub_with_wrapture():
    with wrapture.binding( Gateway, "charge" ).on_call.returns({ "id": "stub", "amount": 0} ):
        assert OrderService().place( 500 )["id"] == "stub"

Gateway.charge를 감싼 범위 안에서 고정 반환값을 지정하고 OrderService.place의 결과를 검증합니다.

python
def test_pinned_result_with_wrapture():
    charge = wrapture.binding( Gateway, "charge" )
    charge.on_call.transforms_result( lambda r: {**r, "id": "ch_TEST"} )
    with charge:
        assert OrderService().place( 500 ) == { "id": "ch_TEST", "amount": 500 }

원래 Gateway.charge를 호출한 뒤 반환 객체의 id만 변환해 테스트 결과를 고정합니다.

03
wrapture는 공개된 지 몇 주밖에 되지 않은 초기 프로젝트지만, Graham Dumpleton은 이를 자신의 첫 대규모 agent-driven 프로젝트로 만들었다고 밝혔습니다. AI assistant가 코드와 문서의 모든 줄을 작성했지만, Dumpleton이 Python의 해당 영역에 대한 요구사항과 설계를 먼저 정하고 결과를 판단했기 때문에 생성 결과를 검증하지 않는 vibe coding과 구별된다고 설명했습니다. 따라서 이 사례의 핵심은 AI가 설계를 대신했다는 데 있지 않고, 도메인 지식을 가진 개발자가 구조와 품질 기준을 통제하면서 구현 작업을 위임했다는 점에 있습니다.

용어 해설

Monkey Patching
실행 중인 프로그램의 함수나 메서드를 원래 코드를 직접 수정하지 않고 다른 구현으로 교체하거나 감싸는 기법입니다. Wrapture는 이 방식을 테스트용 대체 반환값과 실행 흐름 추적에 함께 활용합니다.
Observability
프로그램 내부에서 어떤 호출과 데이터 흐름이 발생하는지 외부에서 파악할 수 있게 만드는 특성입니다. Wrapture는 함수 호출을 기록하고 OpenTelemetry와 연결해 기존 Python 프로젝트의 관찰 가능성을 높입니다.
OpenTelemetry
애플리케이션의 추적 데이터를 수집하고 전달하기 위한 개방형 관측성 표준입니다. 이 글에서는 Wrapture가 함수와 메서드의 실행 정보를 OpenTelemetry 방식으로 다룰 수 있는 연동 수단으로 등장합니다.
Agentic Engineering
AI assistant가 사람의 설계와 지시 아래 프로젝트의 코드와 문서를 생성하는 개발 방식입니다. Graham Dumpleton은 Wrapture 전체를 이 방식으로 만들었지만, 설계와 검증을 사람의 전문 지식으로 통제했다고 구분합니다.

기술

  • wrapture
  • Python
  • OpenTelemetry
  • unittest.mock

활용 사례

  • 기존 Python 프로젝트에 코드 수정 없이 함수 호출 추적 추가
  • 외부 결제 호출을 고정 반환값으로 바꾸는 단위 테스트
  • 원래 메서드의 반환 결과 일부만 변환하는 테스트
  • JSON Lines 형식으로 실행 흐름 기록
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 09. 01.수집 2026. 09. 01.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.