웃긴 Hacker News · 22분 전

"대충 1년 때우려고 짠 임시 코드가 2천만 번 깔렸습니다" 12년 만에 은퇴 선언한 개발자

핵심 요약
  • 2014년 AOL CMS 마이그레이션 중 귀찮아서 1~2년 임시로 쓰려고 짰던 174줄짜리 PHP 땜질 코드가 12년간 누적 2천만 회 가까이 설치되었습니다.
  • 워드프레스 유명 플러그인, 우분투/데비안 패키지까지 전 세계에 퍼졌으나, URL 경로에서 알파벳 'a'가 전부 지워지는 황당한 버그가 수년째 방치되어 있었습니다.
  • 원작자는 보안 위험(xz 백도어 사례 등)과 최신 표준 API 보급을 이유로 관리권을 양도하지 않고 공식 지원 중단(Deprecated)을 선언했습니다.
요약 2014년 당시 AOL에서 CMS를 PHP 5.2에서 5.3으로 업그레이드하던 개발자 제이크 A. 스미스(Jake A. Smith)는 골치 아픈 문제에 직면했습니다. 업그레이드 과정에서 기존 pecl_http 익스텐션을 제거해야 했는데, 이로 인해 CMS 내부 수십 군데에서 호출하던 http_build_url() 함수를 쓸 수 없게 된 것입니다. 기존 코드를 일일이 고치기 싫었던 그는 진짜 함수가 없을 때만 동작하는 174줄짜리 임시 대체 코드(폴리필)를 직접 작성했습니다. 마침 패키지 관리 도구인 컴포저(Composer)가 막 보급되던 시기라 다른 사람도 쓰라고 패키지스트(Packagist)에 올려두었는데, 1~2년 쓰이다 사라질 줄 알았던 이 '임시 땜질' 코드는 상상을 초월할 정도로 퍼져나갔습니다. 최근 그가 수년 만에 확인해 보니, 해당 패키지는 공식 다운로드 수만 약 2천만 건에 달했고 매달 40만 건 이상씩 여전히 설치되고 있었습니다. 심지어 150만 개 사이트가 쓰는 워드프레스 다국어 플러그인(WPML)에 코드가 직접 내장되었고, 다른 도메인 변환 라이브러리를 거쳐 프랑스 CMS인 SPIP는 물론 데비안(Debian)과 우분투(Ubuntu) 패키지에도 포함되어 있었습니다. 인터넷을 돌아다니다 보면 누구나 한 번쯤 그의 코드를 거쳤을 확률이 매우 높았던 셈입니다. 오랜만에 들여다본 깃허브 저장소에는 황당한 버그도 방치되어 있었습니다. URL 경로 끝의 슬래시(/) 처리를 위한 임시 땜질 로직 때문에, 끝에 슬래시가 붙은 경로와 합쳐지면 경로 안의 모든 알파벳 'a' 글자가 통째로 삭제되어 버리는 버그였습니다. 그는 10년 만에 PHP로 복귀해 유지보수하거나 다른 사람에게 프로젝트를 넘기는 대신 공식 지원 중단(Deprecation)을 결정했습니다. 현재는 PHP League의 URI 라이브러리나 PHP 8.5 자체 지원 등 훨씬 뛰어난 공식 표준이 존재하기 때문입니다. 특히 널리 쓰이는 오픈소스 패키지를 검증되지 않은 새 관리자에게 무심코 넘겼다가 악성코드가 심어진 'xz Utils 백도어' 사태 같은 공급망 보안 사고를 방지하려는 의도도 컸습니다. 한편 그가 원래 이 코드를 만들었던 AOL의 CMS는 2020년경 서비스가 완전히 종료될 때까지 결국 이 '임시' 코드를 단 한 번도 걷어내지 않고 끝까지 사용했다고 합니다.
Sponsored · 광고