용군단의 출시가 완료된 만큼, 지난 며칠 간 엔지니어링 팀의 관점으로 무슨 일이 있었는지를 좀 더 자세히 이야기해 보는 시간을 갖고자 합니다. 이를 통해 글로벌 출시를 위해 무엇이 필요한지, 무엇이 잘 진행되고 어떤 문제가 발생할 수 있는지, 그리고 이를 저희가 어떻게 해결하고자 하는지에 대해 좀 더 이해하실 수 있는 시간이 되기를 바랍니다.내부적으로는, 지난 월요일 같은 이벤트를 "콘텐츠 출시"라고 부릅니다. 확장팩 출시는 하루가 아닌 오랜 시간이 걸리는 과정이기 때문이죠. 월드 오브 워크래프트는 18년 전—심지어 2년 전—과도 다르게 끊임업싱 변화하고 성장하며, 출시 과정 역시 매번 이전과는 다른 방식으로 진행됩니다.이제 확장팩은 몇 가지의 소규모 출시로 구성됩니다: 이전 콘텐츠를 실행하는 코드가 먼저 출시되고, 이후 사전 패치 이벤트와 신규 시스템, 그리고 마지막으로 콘텐츠 출시 날에 신규 지역, 퀘스트와 던전이 출시되죠. 각 단계는 각기 다른 사항을 변경하는 만큼, 저희가 문제를 찾고 수정할 수 있게 도와줍니다. 하지만, 규모가 크고 복잡한 시스템이 늘 그렇듯 여전히 예상치 못한 상황이 발생하곤 합니다.이번 확장팩에서의 한 가지 바뀐 점이 있다면, 콘텐츠 출시를 시간 제한 이벤트를 이용해 발동시켰다는 것입니다—게임과 관련한 여러 변경 사항이 특정 시간에 발동하도록 만드는 것이죠. 이를 수동으로 직접 수행했다간 실수나 사용 도구에 문제가 발생할 수 있지만, 시간 제한을 이용하면 이러한 문제를 조금이나마 완화할 수 있습니다.용군단에 적용된 또 다른 변경점으로는, 게임 데이터 기록 암호화 지원이 크게 늘어났다는 것입니다. 기록 암호화는 저희가 컷신을 재생하거나, 음성 대사를 공유하거나 퀘스트를 해금하는 데 필요한 데이터를 클라이언트에 보내지만, 동시에 플레이어가 게임 내에서 이를 경험하기 전에 데이터마이닝되는 것을 막는 기능입니다. 저희는 커뮤니티 여러분이 와우를 사랑하고 있음을 알고 있지만, 굶주려 있을 때는 메인 코스가 나오기도 전에 뭐든 집어삼키는 것이 쉽지 않다는 것 또한 알고 있죠. 이런 기록 암호화를 이용하면, 중요한 스토리 관련 내용을 적시에 공개할 때까지 숨기는 것이 가능합니다.또한, 저희는 지난 주의 지연 및 불안정성이 이런 두 시스템이 상호 작용하는 방식 때문이었음을 알게 되었습니다. 그 결과 캐릭터를 전 세계로 이동시키고 주문과 능력 등을 수행하는 시뮬레이션 서버가 시뮬레이션 당 초당 100회 이상, 암호화된 기록을 재계산하게 만들었고, 이 때문에 "월드 서버 다운" 같은 오류 메세지와 렉 등이 서버를 불안정하게 만들었죠.저희가 발견한 대로, 시간 제한을 통해 해금되기 전까지 암호화된 기록은 코드에 작은 로직 오류를 제공했습니다: 잘못 배치된 코드 때문에, 서버는 아무것도 바뀌지 않았음에도 숨겨야 할 기록을 다시 계산해야 한다는 신호를 서버에 보냈습니다.이에 대한 저희의 대처가 어떻게 진행되었는지에 대해 몇 가지 말씀드리고자 합니다. 먼저, 태평양 표준시 오후 3시가 되었습니다. 저희는 호드 배가 먼저 도착하고, 그 후에 얼라이언스 배가 도착한다는 것을 테스트를 통해 이미 알고 있었습니다. 개발진 중 대부분은 항구에 앉아있던 양측의 캐릭터로 로그인해 로그 그래프 또는 대시보드를 보며 블리자드 전역의 지원팀 동료들과 전화로 회의를 진행하고 있었습니다.출시 전, 테스트 결과 우려되는 상황들에 대한 비상 계획을 이미 세워둔 채였습니다. 예를 들어, 이번 콘텐츠 출시 때 배가 제대로 도착하지 않을 경우, 플레이어가 용의 섬으로 이동할 수 있도록 차원문을 만들기도 했었죠.오후 3시 2분, 호드 배가 예상대로 도착합니다. 만세! 블리자드 직원 중 일부를 포함한 플레이어들이 배에 올라타고, 다른 직원들은 차원문을 활성화해야 할 상황이 있는 것을 대비해 그 자리에 남습니다. 플레이어들을 태운 배가 떠나고, 일부는 용의 섬에 무사히 도착하지만 많은 이들은 이동하지 못하거나 게임이 강제 종료되는 현상을 겪습니다.그 즉시 저희는 로그와 대시보드를 검색하기 시작합니다. 일부 플레이어가 용의 섬에 도달하긴 했지만, 그 수가 많지 않습니다. 문제를 겪는 동료들은 특정 예시를 위해 자신의 캐릭터 이름과 서버를 공유해 줍니다. 다른 이들은 CPU 부하와, 서버가 사용하는 NFS (네트워크 파일 보관)의 급증을 보고하기 시작합니다. 또 다른 이들은 계속해서 게임에 남아 목격하는 상황을 보고하고 있습니다.이제 얼라이언스의 배가 도착하는 것을 지켜봅니다. 대부분이 돌아오지 않고, 많은 호드 배들 역시 다시 돌아오지 않습니다.상황을 이해하기 시작합니다: 배가 멈춰 있고, 용의 섬 서버가 제대로 작동하기까지 예상보다 훨씬 더 오랜 시간이 걸리고 있습니다. 여기서부터, 저희가 제대로 파고들어 문제 해결을 시작합니다.
배는 이전부터 문제를 일으키곤 했었기 때문에, 문제를 조사하는 동안 차원문을 활성화합니다. NFS가 분명 과부하된 상태이며, 시뮬레이션 서버 조정을 담당하는 서비스에 대규모 네트워크 대기열이 존재하자 이 프로그램은 시뮬레이션이 시작되지 않는다 판단, 시뮬레이션을 더 많이 시작하고 결국 하드웨어가 압도되기 시작합니다. 얼마 안가 플레이어들이 차원문을 원하는 만큼 계속 클릭할 수 있다는 점 때문에 이가 과부하를 악화시킨다는 점을 깨닫고, 차원문을 비활성화하기로 결정합니다.문제가 계속되는 동안 최대한 많은 플레이어가 게임을 즐길 수 있도록 과부하를 해결하기 위해 노력하지만, 게임이 사전 출시 테스트 때처럼 작동하질 않습니다. 계속해서 문제를 해결하고, 테스트에 따라 문제가 아닌 것들을 쳐내는 방식으로 문제를 간추려 나갑니다.늦은 시간에도 불구하고 많은 이들이 계속 일을 하고, 다른 일부는 휴식을 취한 후 다음 날 일찍 돌아와 밤새 일한 이들의 짐을 덜어줍니다.화요일 아침이 되자, 상황을 좀 더 이해할 수 있게 되었습니다. 클라이언트에 평소보다 더 많은 퀘스트 관련 메세지가 보내지고 있다는 점을 발견합니다-- 나중에 알고 보니 이는 문제가 아니었지만요. 저희가 사용하고 있는 새로운 파일 보관 API가 저희의 파일 보관소에 평소보다 더 많은 정보를 제공하고 있습니다. 플레이어들을 끌어들이고자 만든 퀘스트 제공 NPC 관련 신규 코드가 예상보다 느리게 작동하는 것 같습니다. 서비스가 긴급 수정 사항을 통해 적용된 모든 데이터를 클라이언트에 보내는 데 매우 오랜 시간이 걸립니다. 용의 섬에 도달한 플레이어들이 엄청난 렉을 경험하고 있다는 보고가 들어오기 시작합니다.화요일 낮, 우연의 일치가 발생합니다: 새로운 코드를 파고들다, 신규 암호화 시스템에 관한 후크를 발견합니다. 암호화 시스템이 이러한 문제와 다른 문제를 설명할 수 있는가 확인해보자, 그렇다는 답변을 얻게 됩니다. 암호화 시스템이 느리다는 건 긴급 수정 관련 문제, 파일 저장 문제와 플레이어가 경험하는 지연 상황 모두를 설명해 줍니다. 이제 문제의 출처를 발견했으니, 관련 부분의 시스템 개발자가 오류를 식별하고 필요한 수정을 가할 수 있게 되었습니다.코드를 수정하는 것은 버튼 하나를 누르는 것처럼 단순하지 않으며, 이런 변경점이 제대로 작동하도록 플레이어들을 이전 시뮬레이션에서 신규 시뮬레이션으로 천천히 이동시켜야 합니다. 실제로 플레이어들을 너무 빨리 이동시키려고 시도하자, 서비스의 다른 부분에 문제가 생기기 시작하기도 했죠. 영향을 받는 바이너리 중 일부는 서비스를 완전히 재시작하지 않고서는 수정할 수가 없었기에, 게임에 이미 접속한 플레이어들을 최대한 방해하지 않도록 온라인 상태인 플레이어의 수가 가장 적어질때까지 이를 연기하기로 결정합니다. 수요일에는 수정 사항이 완전히 적용되었고, 서비스의 안정성 역시 크게 상향되었습니다.비록 문제를 식별하고 수정하는 데에는 약간의 노력이 필요했지만, 저희 팀은 문제를 조사하고 가능한 한 빨리 수정하기 위해 최대한의 노력을 쏟았습니다. 좋은 소프트웨어 엔지니어링이란 절대 실수하는 것이 아닌, 문제가 발생할 가능성을 최소하하고, 문제가 발생했을 때 이를 신속하게 발견하고 즉시 수정할 수 있는 도구를 갖추는 것이라 생각합니다……그리고 이 모든 것을 실현하기 위해 함께 모일 멋진 팀을 꾸리는 것이기도 하고 말이죠.—월드 오브 워크래프트 엔지니어링 팀