몽키 패치
Monkey patch원숭이 패치는 프로그램이 지원 시스템 소프트웨어를 로컬로 확장하거나 수정하는 방법이다(프로그램의 실행 중인 인스턴스만 영향을 미침).
어원
원숭이 패치라는 용어는 실행 시 코드를 은밀하게, 그리고 다른 패치들과 호환되지 않게 바꾸는 것을 일컫는 게릴라 패치라는 초기 용어에서 유래한 것으로 보인다.고릴라와 동음이의어인 게릴라라는 단어는 원숭이가 되었고, 아마도 그 패치를 덜 위협적으로 들리게 만들었을 것이다.[1]
대체 어원은 코드(메시지)로 "몰키핑(monkeing about)"을 가리킨다는 것이다.
이름의 제안에도 불구하고, "원숭이 패치"는 때때로 프로그램을 확장하는 공식적인 방법이다.예를 들어, 현대 브라우저(Firefox 포함)는 현재 공식 확장 시스템을 갖추고 있지만, Firefox나 Internet Explorer와 같은 웹 브라우저들은 이를 권장하곤 했다.
정의들
용어의 정의는 그것을 사용하는 공동체에 따라 다르다.Ruby,[2] Python [3]및 기타 많은 동적 프로그래밍 언어에서 원숭이 패치라는 용어는 기존 타사 코드를 원하는 대로 작동하지 않는 버그 또는 기능에 대한 해결책으로 패치하려는 의도에서 동기 부여된 런타임에 클래스 또는 모듈의 동적 수정만을 가리킨다.런타임에 클래스를 수정하는 다른 형식은 다른 의도에 따라 다른 이름을 갖는다.예를 들어 Zope와 Plone에서는 동적 클래스 수정을 사용하여 보안 패치를 제공하는 경우가 많지만, 이를 핫픽스라고 부른다.[citation needed]
적용들
원숭이 패칭은 다음을 위해 사용된다.
- 테스트 중 함수를 스텁아웃하기 위해 런타임에 메서드/클래스/속성/함수를 교체하십시오.
- 소스 코드의 비공개 사본을 유지하지 않고 타사 제품의 동작 수정/확장
- 런타임에 패치의 결과를 디스크의 소스 코드 대신 메모리의 상태에 적용.
- 원본 소스 코드와 함께 사용되는 보안 또는 동작 수정 사항 배포(Ruby on Rails 플랫폼용 플러그인으로 수정 사항을 배포하는 것이 그 예임)
- 자동화된 여러 가지 수정 사항을 탐색하여 자가 복구 기능을 제공하십시오.[4]
함정스
악의적이고 무능력하게 쓰여지거나 제대로 문서화되지 않은 원숭이 패치는 다음과 같은 문제를 일으킬 수 있다.
- 패치가 더 이상 사실이 아닌 패치에 대해 가정을 할 때 업그레이드 문제로 이어질 수 있다. 새로운 릴리즈는 패치를 손상시킬 수 있다.이러한 이유로 원숭이 패치는 종종 조건부로 만들어지며, 적절한 경우에만 적용된다.[5]
- 만약 두 모듈이 같은 방법으로 원숭이 패치를 시도한다면, 원숭이 패치를 다음과 같은 패턴으로 작성하지 않는 한, 그들 중 한 모듈(둘 중 하나가 마지막으로 실행되는 모듈)은 "wins"와 다른 패치는 아무런 효과가 없다.
alias_method_chain
.[6] - 그들은 원본 소스코드와 관찰된 행동 사이에 불일치를 발생시키며, 패치의 존재를 모르는 사람은 매우 혼란스러울 수 있다.예를 들어 리눅스 커널은 커널 구조를 변조하는 엔비디아 드라이버와 같은 독점적 및 기타 제3자 모듈을 감지하여 개발자들이 해결할 수 없는 문제를 디버깅하는 데 시간을 낭비하지 않도록 한다.[7]
- 그들은 주요 프로그램, 혹은 서로를 공격하기 위해 악성코드로 쓰여질 수 있다.그 예로 2009년 노스크립트의 개발자인 조르지오 마온은 파이어폭스의 애드블록 플러스 확장을 공격하면서 자신의 웹사이트에 광고가 먹히도록 예외를 추가했다.위반 코드는 또한 사용자가 예외를 제거하려고 하면 해당 예외를 다시 추가하도록 했다.그 주걱으로 인해 광범위한 분노가 일어나 새로운 애드블록 규칙들이 사용자들에게 밀려나고, 이어 마우네가 새로운 애드블록 규칙들을 파괴하고, 결국 모질라가 애드온에 관한 정책을 바꾸게 되었다.[8]
예
다음의 파이톤 예시는 표준 파이톤 수학 라이브러리에서 Pi의 가치를 분석하여 인디아나 파이 빌을 준수하도록 한다.
>>>수입하다 수학 >>>수학.파이 3.141592653589793 >>>수학.파이 = 3.2 # 수학 모듈에서 Pi 값 원숭이패치 >>>수학.파이 3.2 =========================== REAST========================================================================================= >>>수입하다 수학 >>>수학.파이 3.141592653589793 >>>
참고 항목
![]() | Wikiquote에 관련된 인용구가 있음: Monkey patch |
참조
- ^ "Glossary — Definition of 'Monkey patch'". Plone Content Management System. Archived from the original on 2021-01-22. Retrieved 2021-07-02.
when someone created a guerrilla patch very carefully and tried to avoid any battles, they tried to make it sound less forceful by calling it a monkey patch
- ^ "Refining Ruby". 2013-02-27.
- ^ Biswal, Bimal. "Monkey Patching in Python". Software Technology Tips. Mindfire Solutions. Retrieved 9 December 2013.
- ^ Durieux, Thomas; Hamadi, Youssef; Monperrus, Martin (2020). "Fully Automated HTML and JavaScript Rewriting for Constructing a Self‐healing Web Proxy". Software Testing, Verification and Reliability. 30 (2). arXiv:1803.08725. doi:10.1002/stvr.1731. ISSN 0960-0833.
- ^ "Maintainable JavaScript: Don't modify objects you don't own". 2010-03-02.
- ^ "New in Rails: Module#alias_method_chain". 2006-04-26.
- ^ "Tainted kernels — The Linux Kernel documentation". www.kernel.org. Retrieved 2020-07-12.
- ^ Paul, Ryan (2009-05-04). "Mozilla ponders policy change after Firefox extension battle". Ars Technica. Retrieved 2020-07-12.