Home Monkey Patching
Post
Cancel

Monkey Patching

Intro:

google-play-scraper 사용법을 익히다가 해당 라이브러리의 문제점을 유저들이 Monkey Patching 기법을 사용해 피해가는걸 보았다. 최근 진행중인 프로젝트에서도 라이브러리에서 제공하지 않는 기능들을 직접 추가해야 했는데, 몽키 패치를 사용하면 좀 더 간단하게 추가할 수 있었을것 같다.

Monkey Patch란

몽키 패치(Monkey Patch)란 런타임에 기존의 코드를 수정하거나 확장하는 기법이다. 이를 통해 라이브러리나 모듈의 함수, 메서드, 속성 등을 직접 수정하지 않고도 동적으로 변경할 수 있다. 몽키 패치는 버그 수정, 기능 추가, 인터페이스 조정, 테스트 용이성 향상 등 다양한 목적으로 활용될 수 있다.

몽키 패치 사용 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# some_module.py에 있는 함수
def greet():
    return "안녕하세요, 세상!"

# 원본 함수 사용
print(greet())  # 출력: 안녕하세요, 세상!

# 몽키 패치를 사용한 함수 변경
def custom_greet():
    return "안녕하세요, 우주!"

# 함수를 몽키 패치로 교체
greet = custom_greet

# 변경된 함수 사용
print(greet())  # 출력: 안녕하세요, 우주!

몽키 패치의 장점

  • 유연성: 실행 중인 프로그램의 동작을 변경할 수 있어 다양한 상황에 대응할 수 있습니다.
  • 버그 수정: 서드파티 라이브러리의 버그를 임시로 수정할 때 유용합니다.
  • 기능 추가: 기존 코드베이스에 새로운 기능을 추가하고 싶을 때 사용할 수 있습니다.
  • 테스트 용이성: 테스트를 위해 특정 부분의 동작을 변경하고자 할 때 활용됩니다.

몽키 패치는 강력한 기법이지만, 코드의 유지 보수성을 저하시키거나 다른 개발자가 이해하기 어려워질 수 있기 때문에 주의해서 사용해야 한다. 또한, 라이브러리나 모듈이 업데이트되어 내부 구현이 변경될 경우 몽키 패치가 작동하지 않을 수도 있기 때문에 가능한 한 몽키 패치를 피하고, 필요한 경우에만 신중하게 사용하는 것이 좋다.

This post is licensed under CC BY 4.0 by the author.

T-SNE (t-distributed stochastic neighbor embedding)

Imbalanced Data Prediction(Anomaly Detection)