블리자드의 서버다운 사태가 주는 교훈
블리자드에서 디아블로 2 리마스터 버전인 디아블로 2:레저렉션(이하 D2R)에 대한 발표가 있었고, 드디어 9월 24일 전격 오픈되었다. 무려 21년 만의 재오픈이라 과거의 향수를 느끼는 아재들이 손꼽아 기다려왔고, 그만큼 접속자 수가 몰릴 것이라는 것은 블리자드 측도 어느 정도 예상했을 것으로 보였다. 하지만 기대와 달리 글로벌 오픈 직후 지속적인 서버다운 현상이 속출했고, 이 현상은 출시 3주가 지나도 해결되지 못했다. 전 세계 게이머들의 불만이 극에 달했고 결국 블리자드는 역대 가장 긴 입장문을 발표하기에 이르렀다.
이러한 현상의 근본 원인에는 글로벌 1DB 정책, 효율적이지 않은 애플리케이션 아키텍처 등 여러 요인이 있으나 이번 글에서는 최대한 기술적인 내용은 배제하고 일반인의 시각에서 이해하기 쉽도록 큰 틀에서 설명하고 이를 통해 얻을 수 있는 교훈을 필자 나름대로 작성해보고자 한다.
독자들도 알다시피, 요즘에는 클라우드 인프라를 많이 사용한다. 아마존의 AWS, 마이크로소프트의 Azure와 같은 서비스들 말이다. 이러한 서비스의 가장 큰 장점은 서버 가용성을 유연하게 운영할 수 있다는 데에 있다. 이번 출시된 D2R의 경우에도 클라우드 인프라를 사용했던 것으로 알려져 있다. 서버 가용성에는 문제가 없었다는 얘기다. 문제는 이를 활용하는 소프트웨어에 있었다.
공식 입장문에 나와있듯이, D2R 개발진은 과거의 소스코드를 그대로 사용했다.
과거의 코드 중 게임 생성 시 부하를 유발하는 공통 프로그램이 존재하였고 이러한 비효율적인 구조는 반드시 개선하고 출시했어야 하나 D2R 개발진은 그러지 못했다. 이는 부하 이슈를 대응할 때 소프트웨어의 도움 없이 인프라의 증설만으로 대응하는 것은 한계가 있다는 것을 보여준다.
D2R 개발진이 클라우드 인프라 아키텍처를 과신했다는 또 하나의 증거는 대기열 시스템의 부재에서도 드러난다. 동시 접속자 수를 제어하는, 지금은 아주 일반적으로 사용되는 이 효과적인 툴을 적용하지 않은 것은 이번 서버다운 사태를 더욱 악화시켰다.
이 부분은 "수요 예측"에 실패한 가장 주요한 원인인데, 접속자 1인당 부하를 유발하는 양이 과거에 비해 훨씬 심해졌다는 뜻이다. D2R은 완전히 새로운 게임이 아닌 과거 게임을 리마스터한 버전이므로 속칭 헤비유저의 유입 비율이 높았을 것이다. 헤비 유저들은 게임 속 캐릭터를 가장 빠른 방법으로 성장시키는 방법을 잘 알고 있고 이러한 방법은 짧은 시간 안에 많은 신규 게임을 생성하여 DB에 부하를 주게 된다. 게다가 글로벌 one-DB라는 정책을 적용함으로써 리스크를 분산하지 못했고 한국의 수많은 아재 헤비유저의 활약(?)으로 전 세계 게이머들의 접속 불통 사태로 이어지게 되었다.
첫 번째 원인에 서술했듯이 인프라 증설만으로 부하 이슈를 해결할 수 없다. "저희는 최초 출시 당시의 경험을 그대로 살려주어야 했기에 소스코드를 변경하지 않았습니다"라고 말하고 싶겠지만, 비효율적인 아키텍처까지 그대로 가져간 판단이 악수가 되었다.
개발자들은 알겠지만 본인이 새로 짠 코드보다 남이 짠 코드를 건드리는 일이 몇 배는 더 어려운 법이다. 따라서 기존 코드의 업그레이드는 원작 개발자의 적극적인 개입을 통해 진행했어야 했다.
협업 부재의 원인은 과거 액티비전의 자회사였던 비케리언스 비전스가 주 개발을 담당함으로써 원작 개발사 블리자드와의 소통에 문제가 있었던 게 아닌가 추측이 된다. 원작과 신작의 개발 인력의 소속이 다르니 경험치도 공유될 일이 그만큼 적었지 않았을까. 새로운 개발팀에 21년 전의 원작 개발자는 없었을 테니 말이다.
필자 나름대로 이번 사태를 통해 얻을 수 있는 교훈을 몇 가지로 정리해 보았다.
이미 검증된 소프트웨어라도, 오래된 소스코드는 현재의 상태까지 검증해주지 못한다. 변화된 하드웨어가 소프트웨어와 조화되는지 면밀히 검토하고, 비효율적인 부분은 반드시 수정해야 한다.
다시 얘기하지만 불완전한 소프트웨어를 막강한 하드웨어로 덮어버리려는 발상은 정말 위험한 생각이다.
협업의 중요성은 아무리 강조해도 지나치지 않다. D2R개발진이 3주가 지난 후에야 블리자드 내 다른 엔지니어의 도움을 요청하여 수정 작업이 있었다는 것은 아쉬움으로 남는다. 데브옵스(Devops)의 협업 정신을 항상 기억하라.
유저의 게임 이용패턴, 접속자 수 증가 추이와 같은 핵심 요소들을 면밀히 모니터링하고, 게임 접속 대기열 시스템이나 게임 생성 빈도 제 한 등 항상 최악의 상황을 가정하고 대비책을 세워야 한다. 베타 테스트는 실 오픈 상황을 완벽하게 설명해주지 못한다.
앞서 세 가지로 원인을 요약했지만, 단 한 줄로 압축해서 요약하자면 '소프트웨어의 부재'라 말하고 싶다.
결국 훌륭한 소프트웨어가 뒷받침되어야, 하드웨어도 빛을 발할 수 있다.
스티브 잡스는 2007년 아이폰 기조연설에서 이미 훌륭한 소프트웨어가 하드웨어보다 우선순위에 있다는 것을 알고 있었다.
그의 기조연설 중 일부를 인용함으로써 이 글을 마치려고 한다.
“People who are really serious about software should make their own hardware.
"소프트웨어에 대해 진지하게 생각하는 사람들만이 자신의 하드웨어를 만들어야 합니다." - 스티브 잡스
참고 사이트 : 블리자드 포럼(https://ko.gl/VrSj)