[중앙 칼럼]11줄짜리 프로그램 코드의 재앙
최근 전세계 수천명 프로그래머들이 큰 혼란에 빠진 적이 있다. 바로 'Node.js'라는 온라인 프로그래밍 개발도구를 이용하여 인터넷에서 운영되던 수천개의 프로그램들이 한 순간에 '먹통'이 됐기 때문이다. 특히 페이스북, 넷플릭스, 야후, 페이팔 등 누구나 알만한 미국의 대기업들이 사용하는 프로그램도 포함돼 더 그랬다.
이제까지 나쁜 해커들이 누군가를 골탕 먹이거나 자신들의 실력을 뽐내기 위해서 서버를 먹통시킨 경우는 있었지만 그런 것도 아닌 이유로 서버가 서버린 경우는 드물기에 더욱 화제였다. 이렇게 대재앙에 가까운 패닉을 일으켰던 원인은 의외로 캘리포니아의 한 개발자가 삭제한 11줄짜리의 코드(프로그램 덩어리) 때문이었다.
아제르 코출루라는 평범한 개발자는 '킥(Kik)'이라는 이름의 메신저 프로젝트를 개발해 누구나 사용할 수 있도록 고안된 NPM(Node.js Package Manager)이라는 개발자 커뮤니티에 공개했다. 그런데 알고 보니 'Kik'이라는 상표를 등록한 메신저 서비스가 이미 있었던 것이다. 당연히 변호사를 통해 코출루에게 프로젝트 이름을 변경할 것을 요구해왔고 코출루가 거부하자, NPM 운영진에게 조치를 취해달라고 요구했다. NPM 운영진은 당연히 먼저 이름을 사용하고 있는 편을 들어야 했고 코출루의 프로젝트 소유권을 정지시켰다. 이에 코출루는 항의 표시로 자신이 이미 NPM에 공개했던 273개 프로젝트를 모두 지워버렸다.
그런데 평범한 프로그래머의 화풀이는 걷잡을 수 없이 큰 재앙이 됐다. 그는 거대한 탑의 가장 아래에 있으면서 균형을 이뤄주는 벽돌 하나를 빼버린 꼴이다. 공개된 프로젝트끼리는 서로 '의존성(dependency)'으로 연결돼 있다고 한다. 코출루가 삭제한 자신의 프로젝트 중에는 'left-pad'라는 11줄짜리 프로그램 덩어리가 있었는데 이것은 다른 프로그래머의 '라인 넘버스(line-numbers)'라는 프로젝트에 받침돌로 쓰였고 다시 이 프로젝트는 '바벨 (babel)'이라는 대형 프로젝트에 사용됐다. 그런데 바벨 프로젝트는 페이스북, 링크드인, 스포티파이 등 대형 기업들은 물론 수많은 개발자들에 의해 폭넓게 애용되고 있었다는 것이다.
가장 아래에 있는 벽돌인 '레프드 패드(left-pad)'가 없어지자 이를 이용했던 상위 프로젝트들이 줄줄이 설치 불가 상태에 처해졌다. 결국 큰 탑은 서서히 무너지기 시작했고 이를 보다 못한 NPM측은 백업했던 프로젝트를 임의로 복구시키는 전례없는 조치를 취할 수 밖에 없었다.
프로그래머들이 서로 의존하며 네트워킹과 협업을 이렇게 발전시킬 수 있게 한 것은 클라우드의 발전과 코드의 재활용 정신 때문이다. 마치 자동차를 만드는데 자동차 회사마다 볼트와 너트를 다르게 만들 필요가 없다는 것이다. 또한 공개해서 사용하다가 문제점이 발견되면 여러 사람들에 의해서 금세 해결되는 장점이 있다.
결국 사태는 NPM측이 블로그를 통해 사건의 전말을 밝히면서 코출루와의 미숙한 소통에 대해 사과했고 같은 문제가 발생하지 않도록 공개된 지 24시간이 지난 프로젝트는 소유자가 임의로 삭제할 수 없도록 규정을 변경해 사건은 마무리됐다.
이번 사건으로 다시 한 번 금융위기 때 겪었던 문제가 다른 분야에서도 언제든지 일어날 수 있음을 알 수 있게 됐다. 세계화를 부르짖으며 수많은 나라들의 금융시장이 최첨단 시스템으로 쉽게 연결되면서 예전에는 쉽지 않았던 전세계 금융시장의 동시 급락 같은 위험이 실시간으로 벌어진 것처럼, 인터넷으로 연결된 어느 한 곳이라도 문제가 발생한다면 전세계가 대재앙을 맞이할 수 있다는 교훈을 얻게 됐다. 미리 알게 돼 다행이다.
[LA중앙일보] 발행 2016/04/16 미주판 8면