한 개발자가 삭제한 11줄의 코드 때문에 전세계 기업들이 마비되었던 사건
컨텐츠 정보
- 436 조회
- 2 댓글
- 1 추천
- 0 비추천
-
목록
본문
때는 2015년 11월 1일
아제르 코출루라는 이름의 한 개발자가 kik이라는 이름의 오픈소스 프로젝트를 개발하기 시작했다.
아제르는 이 프로젝트를 npm에도 게시한다.
여기서 잠깐!
** npm이란? **
Python의 pip나 Ruby의 gem처럼
Node.js의 패키지를 관리할 수 있게 해주는 패키지 매니저이다.
― 나무위키
npm에 패키지를 게시하면 다른 개발자들도
npm i kik
이런 짧은 명령 한 줄만으로 이 패키지를 쓸 수 있게 된다.
(패키지 명은 중복 불가)
비유하자면 앱스토어에 앱을 올린 거라고 보면 된다.
그러던 중 2016년 3월 말
kik이라는 이름의 메신저를 개발하는 회사(의 법정 대리인)에게서 연락이 오게 된다.
님아
?
우리도 님한테 무례하게 굴긴 싫은데
님이 만들어서 npm에 올린 그 kik이라는 패키지 있잖아요
그거 우리 상표거든요
근데
그거 이름 안 바꾸면 우리 변호사들이 님 집에 찾아가서
현관문 두드리면서 님 계정 삭제 시킬 거임 ㅎㅎ
ㅎㅎ 말뽄새보소
조까 ㅎㅎ
아제르가 거부하자 kik은 npm 운영진에게 연락을 취한다.
아제르야 상표권은 어쩔 수 없다
kik 패키지 소유권 압수한다
사람 나고 기업 났지, 기업 나고 사람 났냐??
기분 더러워서 여태껏 npm에 올린 거 다 삭제함 ㅂㅂ
그렇게 삭제된 패키지 중에는 left-pad라는 이름의 11줄짜리 패키지가 포함되어 있었다.
(대충 문자열의 왼쪽에 공백 혹은 다른 문자열 추가해주는 코드)
문제는 이 패키지에 의존성이 있는 다른 오픈소스 프로젝트들이 정말 많았다는 것이다.
(현재 Github에서 확인할 수 있는 left-pad에 의존하는 프로젝트의 수)
여기서 잠깐!
** 의존성(Dependency)이란? **
의존성은 예를 들어 서비스로 사용할 수 있는 객체이다.
클라이언트가 어떤 서비스를 사용할 것인지 지정하는 대신,
클라이언트에게 무슨 서비스를 사용할 것 인지를 말해주는 것이다.
의존성 주입의 의도는 객체의 생성과 사용의 관심을 분리하는 것이다.
이는 가독성과 코드 재 사용을 높혀준다.
― 위키백과
쉽게 말하자면 남이 쓴 코드를 내 프로젝트로 손쉽게 링크해서 가져다 쓰는 거라고 보면 된다.
그런데 가져다 쓴 코드가 변경되거나 삭제되면 내 프로젝트가 망가질 수도 있다.
아무튼 left-pad에 의존하는 프로젝트 중에는 Babel이라는 이름의 자바스크립트 컴파일러가 있었는데
이걸 사용하는 기업이 엄청 많았다.
(대충 Babel 쓰는 회사들)
보다시피 npm도 쓰고 있었어서 당시 npm 자체는 물론이고 수많은 기업들이 다운되었었다.
메신저 회사 kik도 (Babel은 아니지만) left-pad에 의존하는 패키지를 사용하다가 피해를 봤다.
그리고 Cloudflare는 전세계에 CDN 및 디도스 방어 등의 서비스를 제공하는 메이저 기업이라
당시 클라우드플레어를 사용하는 전세계 수많은 사이트도 같이 다운되었다.
(당시 left-pad의 이슈트래커에 달린 코멘트. "이게 인터넷을 망가뜨린 것 같은데요.")
아니 ㅁㅊ 우리도 맛이 갔네??
일단 님이 삭제한 left-pad 다시 복구하겠음
그 후 npm은 블로그에 장문의 글을 올리며 미숙한 소통에 대해 사과하였고
앞으로 패키지 게시 철회를 더 어려워지도록 만들 것임을 밝혔다.
kik 또한 대표가 medium에 이메일 내역을 공개하며 부적절한 표현에 대한 사과글을 올렸다.
그리고 아제르는 kik을 hek로 이름을 변경한다.
IT 밥 먹은 사람들에게는 굉장히 유명했던 이슈
저 사건 때문에 11줄 밖에 안되는 간단한 코드도 라이브러리 덕지덕지 붙여서 이 사단 내는 게 맞냐
vs do not reinvent the wheel (남이 만든 거 고생하며 다시 만들지 말고 갖다 쓰자)
갑론을박이 한창 레딧을 뜨겁게 달궜지
바퀴를 다시 발명할 필요는 없지만..
전세계에 존재하는 차들의 바퀴가 한순간에 사라진다면?!
관련자료
-
서명날으는 황웅