지난 3월 말, NPM 커뮤니티를 달궜던 ‘left-pad 사건’에 대해 <블로터> 독자인 오상준 님이 글을 보내왔습니다. 필자 동의를 얻어 게재합니다._편집자

지난 3월22일 오후 5시 30분경(미국 동부시각), 전세계 Node.js 커뮤니티 개발자들은 큰 혼란에 빠졌다. Node.js 기술 기반으로 인터넷에서 돌아가는 수천개의 프로그램들이 한순간 먹통이 됐기 때문이다. 영향을 받은 프로그램 가운데는 페이스북, 넷플릭스, 야후, 페이팔 등 유수 기업들이 사용하는 프로그램도 섞여 있었다.

혼란에 빠진 개발자들은 이 막대한 피해의 진앙지를 찾아 인터넷을 뒤졌다. 원인은 곧 드러났다. 캘리포니아의 한 개발자가 삭제한 11줄의 코드 때문이었다.

▲  “이거 인터넷을 망가뜨린 것 같은데요.” - 어느 개발자가 남긴 댓글
▲ “이거 인터넷을 망가뜨린 것 같은데요.” - 어느 개발자가 남긴 댓글

사건의 재구성

아제르 코출루라는 개발자는 ‘킥’(Kik)이라는 이름의 프로그램을 개발하고 있었다. 그는 이 프로그램을 누구나 사용할 수 있도록 NPM(Node.js Package Manager)이라는 개발자 커뮤니티에 공개했다. 며칠 뒤, 코출루는 한 통의 e메일을 받게 된다.

“저희도 재수없게 굴기는 싫지만, 킥은 세계 대부분의 국가에 등록된 저희 상표이니, 만일 같은 이름의 오픈소스 프로젝트를 공개하신다면 저희 상표권 변호사들이 당신 집에 찾아가서 현관문을 쾅쾅 두드리고 당신 계정을 삭제하려 할 겁니다.” - 아제르 코출루 미디엄 글 발췌

▲  메신저 ‘킥’
▲ 메신저 ‘킥’

코출루는 운이 나빴다. ‘Kik’이라는 상표를 등록한 동명의 메신저 서비스가 있었다. 이들은 상표권을 주장하며 코출루에게 프로젝트 이름을 변경할 것을 요구했다. 코출루가 이를 거부하자, 이들은 NPM 운영진에게 직접 연락을 취하기에 이른다. NPM의 CEO인 아이작 슐레터는 코출루에게서 프로젝트 소유권을 강제로 빼앗아갔다. 코출루는 이에 대한 항의로 자신이 여태 NPM에 공개했던 273개 프로젝트를 모두 삭제해버렸다.

“저는 이 사태를 통해 NPM 역시 기업이 사람보다 위에 있는 사유지임을 깨달았습니다. 제가 오픈소스를 하는 이유는 사람들에게 힘을 주기 위해서입니다.” - 아제르 코출루

문제는, NPM에 공개된 프로젝트끼리는 레고 블록을 쌓아 올리는 것처럼 ‘의존성(dependency)’이라는 관계로 엮여 있다는 점이다. 코출루가 NPM에서 삭제한 273개의 프로젝트 중에는 ‘left-pad’라는 11줄짜리 코드가 있었다. 이 코드는 다른 개발자가 제작한 ‘line-numbers’라는 프로젝트를 만드는 블록으로 쓰이고 있었고, 다시 이 ‘line-numbers’는 ‘바벨’(babel)이라는 대형 프로젝트에 사용되고 있었다. 이 바벨 프로젝트는 페이스북, 링크드인, 스포티파이 등 대형 기업들은 물론 수많은 개발자들에 의해 폭넓게 사용되고 있었는데, 가장 기초가 되는 블록인 ‘left-pad’가 삭제되자 더 이상 설치가 불가능해진 것이다. 결국 사태는 도미노처럼 번졌고, 보다 못한 NPM 운영진이 프로젝트를 강제로 복구시키는 유례 없는 일까지 일어났다.
“이러한 행동은 NPM 사용자 커뮤니티의 넓은 이익과 한 저작자의 의도를 대립시켰습니다. 저희는 다수의 필요를 선택했습니다. 저희 NPM 내부에서도 이 방식이 옳은지에 대해 이견이 있지만, 저는 매 초마다 수백개의 빌드가 실패하는 것을 보면서 그걸 고치지 않을 수 없었습니다.” - 로리 보스 NPM의 CTO

https://twitter.com/seldo/status/712417019686100992

남겨진 것들

사태가 수습되자 NPM 쪽에서는 블로그 게시글을 통해 사건의 전말을 밝혔다. 미숙한 소통에 대해서도 사과했다. 또한 앞으로 똑같은 문제가 발생하지 않도록 공개된 지 24시간이 지난 프로젝트는 소유자가 임의로 삭제할 수 없도록 규정을 변경했다. 마이크 로버츠 킥 대표 또한 코출루와 주고받은 e메일에서 사용된 자사의 부적절한 표현에 대한 사과글을 올렸다. 코출루 역시 “이번 사건으로 여러분의 작업이 망가졌다면 죄송하다”라며 “나는 오픈소스를 사랑하며, 오픈소스 커뮤니티가 결국 NPM보다 더 자유로운 대안을 만들어낼 것이라 믿는다”라는 말을 남겼다.

“당신의 코드가 72개 이하의 NPM 프로젝트에 의존하나요? 그렇다면 코드가 외로울 테니 이 책을 읽어보세요. ‘불필요한 의존성을 떠맡기 – 허술한 개발 가이드’.”

https://twitter.com/ThePracticalDev/status/713003282000715776

그러나 코출루와 킥, NPM 사이의 잘잘못은 뒤로한 채, 개발자 커뮤니티에서는 관련된 패러디물들이 쏟아져 나왔다. 공동의 노력으로 더 복잡한 결과물을 만들어내는 오픈소스 정신은 물론 훌륭하지만, 숙련된 개발자라면 2분이면 충분할 10줄 남짓의 간단한 함수조차 남의 코드를 끌어다 쓰는 개발 행태에 대한 비아냥이 주를 이뤘다. 여기에 코출루의 코드뿐 아니라 1줄, 4줄짜리 프로젝트들도 추가로 발견되면서 "우리는 프로그래밍하는 법을 잊어버렸는가?”라는 자조의 목소리도 생겨났다.

‘삼국지’의 조조는 병사들의 배멀미를 해결하기 위해 배들을 쇠사슬로 연결시켜 단단히 고정시켰으나, 유비와 손권의 연합군이 불을 지르자 한꺼번에 불타버리고 말았다. 세 글자의 이름에서 11줄의 코드로, 그리고 수천개의 프로그램으로 번져나간 이번 사태는, 서로 연결하는 것이 무조건 좋은 건 아니라는 적벽대전의 교훈을 다시금 일깨웠다.

juneoh
▲ juneoh
오상준 | 기계학습과 금융공학을 공부하는 대학생입니다. me@juneoh.net

저작권자 © 블로터 무단전재 및 재배포 금지