본문 바로가기 주요메뉴 바로가기

본문

광고

광고

기사본문

등록 : 2015.09.30 18:41 수정 : 2015.09.30 18:41

지난 9월23일, 회사의 시스템 관리자가 다가와서 페이스북과 관련된 매출이 급격하게 줄고 있다고 말했다. 놀란 우리는 내부 시스템을 점검하기 시작했다. 그런데 이상한 점이 없었다. 우리가 고개를 갸웃거리고 있을 때 트위터에서는 페이스북이 다운되었다는 소식이 퍼지고 있었다. 우리도 소식을 접했다. 시스템의 안정성을 뽐내던 페이스북이 다운되었다는 소식은 순식간에 온라인을 뜨겁게 달구었다. 9개월 뒤 전세계 인구가 폭발적으로 늘어날 거라는 식의 농담이 쏟아져 나왔다.

페이스북은 이날 2시간 30분 동안 다운되었다. 그동안 아무도 페이스북에 접속할 수 없었다. 페이스북은 이미 단순한 소셜네트워크서비스가 아니라 실제 비즈니스를 제공하는 플랫폼으로 자리를 잡은 상태이기 때문에 이렇게 긴 장애시간은 온라인과 오프라인을 아우르는 일대 사건이었다. 페이스북이 최근 4년 동안 겪은 문제 중에서 최악으로 기록되었다.

문제의 원인은 비교적 간단했다. 페이스북의 전 직원인 로버트 존슨이 페이스북 엔지니어링이라는 페이지에 올린 글을 보면, 이것은 문제를 자동적으로 감지하고 수정하는 코드가 잘못 설계되었기 때문이었다. 여기서 핵심은 ‘자동적’이라는 부분이다. 자동화라는 편리한 도구가 우리에게 가져다줄 미래 세상을 보여주기 때문에 짚고 넘어갈 필요가 있다.

존슨의 설명을 이해하려면 먼저 캐시(cache)라는 개념을 알아야 한다. 컴퓨터 시스템은 데이터베이스에 저장되어 있는 데이터를 메모리에 올려놓고 사용하는 경우가 많다. 로그인 요청과 같은 사용자 질의가 들어오면 멀리 있는 데이터베이스에 갈 필요 없이 메모리에 있는 데이터를 읽고 서비스를 제공하면 처리 속도가 빨라지기 때문이다. 이때 메모리에 저장된 데이터를 캐시라고 부른다. 캐시는 임시적인 값이기 때문에 데이터베이스에 있는 값이 변경되면 새로 갱신해주어야 한다.

페이스북은 캐시 값을 갱신해주는 작업을 자동화했다. 캐시 값이 정상적인지를 판단하고, 정상적인 값이 아니면 데이터베이스에서 새로운 값을 읽어 캐시 값을 갱신하는 코드를 작성한 것이다. 9월23일에 페이스북은 데이터베이스에 있는 어떤 값을 새로 설정하는 작업을 수행했다. 그런데 사소한 실수로 그 값에 오류가 있었다.

데이터베이스에 있는 값이 캐시에 저장되자마자 자동화된 캐시 갱신 코드가 동작을 개시했다. 코드는 캐시 값이 정상적이지 않다고 판단하여 그 값을 데이터베이스에서 읽어들이는 작업을 수행했다. 하지만 이 작업이 엄청나게 많은 사용자를 위해 동시에 이루어졌기 때문에 데이터베이스는 초당 수십만에 이르는 수의 질의를 받고 마비되었다. 새로운 값을 읽었다고 해도, 데이터베이스에 저장되어 있는 값 자체가 오류를 담고 있었기 때문에 캐시를 갱신하는 작업은 무한히 반복되었다.

세계 최고의 소프트웨어 엔지니어가 모여 있는 페이스북의 기술자들은 무한히 반복되는 늪에 빠져버린 코드를 멈추려고 애썼지만, 그렇게 할 수 없었다. 그렇게 할 수 있는 유일한 방법은 시스템 전체를 멈추고, 자동화된 캐시 갱신 코드를 제거하고, 시스템을 다시 시작하는 방법밖에 없었다. 소프트웨어 개발자라면 알겠지만 가장 치욕적인 해결 방법이다. 그 작업을 수행하는 데 걸린 시간이 2시간 30분이었다.

임백준 팟캐스트 ‘나는 프로그래머다’ 운영자
1987년에 있었던 주식시장 폭락을 일컫는 ‘블랙먼데이’도 이와 비슷한 자동화 때문에 발생한 사건이었다. 사람의 생명을 좌우하는 자동화 시스템이 무한반복의 늪에 빠지거나 다운되었다면? 예컨대 소프트웨어가 운전하는 차를 생각해보라. 철학이 뒷받침되지 않는 자동화가 인류에게 재앙일 수밖에 없는 이유다.

임백준 팟캐스트 ‘나는 프로그래머다’ 운영자

광고

브랜드 링크

기획연재|기고

멀티미디어


광고



광고

광고

광고

광고

광고

광고

광고


한겨레 소개 및 약관