AI 요약
Python의 인기 날짜/시간 라이브러리인 Pendulum은 + 연산자가 호출 스택을 검사해 호출한 함수 이름에 따라 다른 결과를 반환하는 독특한 방식을 사용한다. 이는 DST(일광절약시간) 인식 산술과 표준 라이브러리와의 드롭인 호환성이라는 두 가지 상충하는 약속을 동시에 지키기 위한 고육지책이었다. 호출 스택을 탐색하는 방식 때문에 표준 라이브러리보다 수백 배 느리지만, DST 전환 시 실제 경과 시간을 계산한다는 장점이 있다. 이 핵은 곧 제거될 예정이지만, 그 설계 배경은 여전히 중요하다.
핵심 포인트
- Pendulum 3.2.0의
__add__메서드는traceback.extract_stack(limit=2)[0].name으로 호출자 이름을 확인해astimezone이면 표준 동작, 아니면 DST 인식 동작을 선택한다. - 함수 이름을
astimezone으로 바꾸면+ timedelta(hours=24)의 결과가 달라지는 부작용이 존재한다. - 호출 스택 탐색으로 인해 Pendulum의
+연산자는 표준 라이브러리보다 수백 배 느리다. - DST 인식 산술과 드롭인 호환성이라는 두 약속 사이의 근본적 충돌이 이 해킹을 낳았다.
향후 전망
- 이 해킹은 제거 방향으로 진행 중이나, DST 인식 산술과 호환성 간 트레이드오프 문제는 다른 라이브러리에도 시사점을 준다.
- 개발자들은 날짜 연산 시 표준 라이브러리와 서드파티 라이브러리의 동작 차이를 명확히 인지해야 한다.
