ddtrace로 보는 Monkey Patch
Substack
파이썬에서 Monkey Patch는 런타임 시 객체나 모듈의 행위를 동적으로 변경하는 기법을 의미합니다. 알맞은 상황에 잘 사용하면 충분히 장점이 될 수 있는 부분 중 하나라고 생각합니다. 대표적으로 데이터독과 같은 모니터링 솔루션에서 trace를 수행하기 위해서 monkey patch를 진행합니다. 문득 monkey patch 과정이 궁금해서 코드를 열어봤습니다.
1. 파이썬 모듈은 코드를 메모리에 올리고, 모듈을 사용하기 위한 Symbol을 저장하는 것이 지나지 않습니다.
2. 파이썬은 importlib 패키지를 통해서 모듈 이름, 혹은 경로를 사용해 런타임에 모듈을 import할 수 있습니다. dd-trace-py에서는 패치가 필요한 모듈에 대한 코드만 동적으로 import하기 위해서 importlib 패키지를 사용합니다.
3. dd-trace-py에서는 패치를 통해서 기존의 함수를 아예 새로운 함수로 대체하지 않습니다. 대신, 원래 함수를 wrapping하기 위한 클래스를 만들고, 원래 함수를 호출하기 전/후로 tracing에 필요한 정보들을 수집합니다.
4. Monkey Patch 작업이 끝나더라도, 함수의 이름이나 사용법이 달라지지는 않습니다. 사용자는 기존 코드를 그대로 사용할 수 있어 변한 것이 없어보이지만, 내부적으로는 Wrapper 함수가 호출되면서 Tracing 정보를 수집하게 됩니다.
사용법만 알고 있었고, 내부 동작은 살펴본 적이 없었는데, 이번 기회에 알게 되어 블로그로 남겨보았습니다. 잘 만들어놓은 코드를 보면서 공부하는 것도 얻는게 상당히 많네요.
https://open.substack.com/pub/techchallengearena/p/ddtrace-monkey-patch?r=czded&utm_campaign=post&utm_medium=web
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 6월 7일 오후 7:10