데스티니 가디언즈 긴급 점검 및 롤백

데스티니 가디언즈 긴급 점검 및 롤백

오늘(2월 11일 화요일) 2.7.1.1 핫픽스가 적용된 직후 일부 플레이어가 화폐와 재료를 잃어버리게 했던 문제가 다시 발생했다는 사실이 확인되었습니다. 이는 지난 1월 28일 2.7.1 핫픽스 적용 이후 모든 플레이어가 화폐와 재료를 잃어버리는 문제가 발생하여 플레이어 계정을 롤백해야 했던 첫 번째 사례 이후 두 번째로 발생한 문제입니다. 오늘 문제가 발생한 후 저희는 비슷한 조치를 통해 계정을 오전 8:30 PST(2.7.1.1 적용 이전) 시점의 상태로 롤백했습니다.

두 가지 사례 모두 원인과 플레이어 여러분께 미치는 영향이라는 측면이 동일하고 두 사례가 비교적 짧은 시일 내에 반복되었기 때문에, 이번에는 정확히 어떤 문제가 발생했고, 향후 같은 문제가 다시 발생하지 않도록 저희가 어떤 대책을 마련하고 있는지 말씀드리려 합니다. 먼저 애초에 이 문제를 초래한 원인은 소지품 관리와 관련된 게임의 버그와, 이 버그가 수정된 후 다시 발생하게 한 서버 구성의 변경이었습니다.

소지품 관리

데스티니 가디언즈에서 퀘스트는 화폐와 재료 등 소지품의 다른 아이템과 유사하게 처리됩니다. 모든 아이템에는 처음 플레이어의 소지품에 추가된 시간을 기록한 타임스탬프가 있습니다. 이 타임스탬프를 사용하여 퀘스트를 받은 순서대로 정렬하기도 합니다. 게임은 플레이어가 로그인할 때 콘텐츠 변경 사항이 적절히 반영될 수 있도록 소지품을 정리합니다. 여기에는 특정 유형의 아이템을 플레이어가 최대 몇 개까지 소지할 수 있는가 하는 등의 정보도 포함됩니다.

몇 달 전 플레이어 여러분께서 퀘스트 기록 정렬이 정상적으로 작동하지 않는다고 신고해 주셨고, 저희는 그 문제를 해결하고 싶었습니다. 저희 팀은 이 문제를 조사하던 도중에 위의 소지품 정리 과정에서 특정 퀘스트의 타임스탬프가 초기화되고, 이로 인해 시간 순서 정렬이 오작동하고 있음을 확인했습니다. 저희는 퀘스트의 타임스탬프 초기화 기능을 비활성화하여 이 문제를 해결하려 했습니다. 이론적으로는 합리적인 방안이었지만, 예상치 못한 부작용으로 인해 정리 과정이 지나치게 많이 비활성화되는 문제가 발생했습니다. 그 결과 게임은 중첩된 아이템(화폐 또는 재료 등)의 한도를 잘못 계산했고, 한도 이상의 아이템이 소실되는 일이 발생한 것입니다. 저희는 이 코드의 중요성을 확실히 인지했고, 이와 같은 코드 개발 과정에서의 일반적인 절차에 따라 사내 전문가 두 명이 해당 변경 사항의 코드 리뷰까지 수행했지만 안타깝게도 이 버그를 사전에 발견하지는 못했습니다.

며칠 후 저희 내부 테스트 팀이 이 문제를 발견했습니다. 하지만 저희는 이 문제가 게임의 실제 버그로 인한 것이 아니라, 테스트에 사용한 디버그 워크플로우의 툴 오류라고 잘못된 결론을 내렸습니다. 이렇게 저희가 준비해 둔 모든 예방 절차를 유유히 회피한 이 문제가 2.7.1 핫픽스에 적용되었습니다. 라이브 게임에서 이 문제가 확인되자, 그다음 해야 할 일은 수정할 방법을 찾는 것이었습니다. 이것이 다음 문제로 이어집니다. 바로 게임 서버와 그 구성입니다.

서버 구성

대규모 업데이트(예: 섀도우킵)를 출시하기 전에는 항상 종합적인 스트레스 테스트를 실시하여 사용자의 행동과 그게 저희 서비스 아키텍처에 미치는 영향을 모델화하곤 합니다. 하지만 실제 플레이어 수백만 명의 행동을 그대로 구현할 수 있는 방법은 존재하지 않기 때문에, 출시 직후 서비스 지표를 면밀히 모니터링하여 이러한 테스트의 미비한 점을 보완하기도 합니다.

지난 10월, 섀도우킵 출시로 인한 CPU 사용량 및 플레이어 부하 증가를 처리하기 위해 저희는 추가 서버를 가동했습니다(월드서버라고 부릅니다). 사실 지금까지 이와 유사한 출시 과정에 동원했던 수량보다 훨씬 더 많은 서버였습니다. 이렇게 많은 서버를 운영하는 과정에서 몇 가지 부작용이 발생했고, 이는 플레이어에게는 노출되지 않는 문제였지만 저희는 계속해서 추적해 왔습니다. 예를 들면, 지원 데이터베이스가 감당할 수 없을 정도로 서버 수량이 많아지다 보니, 극소수의 일부 서버(1% 미만)에서는 서버가 가동 중에 강제 종료되는 문제가 발생하기도 했습니다. 이 문제를 우회하기 위해, 저희는 해당 문제가 발생했을 때 단순히 강제 종료된 서버를 수동으로 다시 시작하기로 했습니다. 플레이어에게 눈에 띄는 부작용 없이 문제를 해결할 수 있을 것으로 보이는 방안이었습니다.

2주 전으로 돌아가 보겠습니다. 2.7.1 업데이트에서는 앞서 언급했던 바와 같이 캐릭터 데이터를 손상시키는 버그가 존재했으며, 그 결과 사상 처음으로 캐릭터 데이터 롤백을 실시해야 했습니다. 이 문제를 조속히 해결하기 위해, 저희는 게임 코드의 전체 빌드를 배포하지는 않고 서버 쪽에 패치를 적용하기로 했습니다. 이를 위해 서버 설정을 변경하여 캐릭터 데이터를 처리하는 게임 코드를 덮어쓰게 하고, 다시 월드서버를 재시작하여 이 변경 사항이 적용되게 했습니다. 

다시 2월 11일로 돌아와 보겠습니다. 진홍의 주간 시작과 함께 저희가 2.7.1.1 업데이트를 배포한 시점입니다. 출시 이후, 동시에 가동하는 서버의 개수가 늘어나면서 월드서버 중 일부가 가동 도중에 다시 강제 종료되었습니다. 저희는 다시 한번 종료된 서버를 수동으로 재시작하고 아무 문제도 없을 거라고 생각했죠. 하지만 그 생각이 틀렸습니다. 

저희도 미처 몰랐습니다만, 강제 종료된 월드서버에는 기존 캐릭터 데이터 손상 문제의 수정 사항이 반영되지 않았습니다. 따라서 일부 월드서버가 기존 코드로 작동하고 있었고, 해당 버그가 캐릭터 데이터를 손상시키고 있었던 것입니다. 저희는 이와 같은 버전 구성 오류를 감지하는 검증 시스템도 운영하고 있지만, 월드서버의 강제 종료와 그에 따른 수동 재시작 때문에 서버들이 이런 검증 절차도 건너뛰고 말았습니다. 오늘 아침이 되기 전까지만 해도 저희는 이런 코드 덮어쓰기와 검증 절차를 건너뛰는 것이 근본적으로 불가능하다고 생각하고 있었습니다.

새로운 빌드를 검증하는 저희 표준 절차에 따라, 테스트 팀이 플레이어 경험을 확인하기 위해 다수의 테스트 계정으로 게임에 로그인하기도 했었습니다. 저희 정식 게임 환경에는 수백 대의 서버가 운영되고 있는데, 불행히도 이렇게 테스트 팀이 테스트한 서버가 모두 "정상적인" 서버였고, 오류가 발생한 소수의 서버는 모두 테스트 대상으로 선정되지 않았습니다. 그렇게 새 업데이트가 적용되었습니다.

오늘, 2.7.1.1 배포 이후 서버가 운영되면서, 화폐를 분실했다는 플레이어 제보가 접수되기 시작했습니다. 개발팀에서는 즉시 조사를 시작했고 오전 10:30 PST에 긴급 점검을 시작했습니다. 그때 이미 수십만 명의 개별 플레이어가 게임에 로그인하거나 타사 서비스를 사용하여 캐릭터에 접속했습니다. 조사 결과 저희가 불가능하다고 생각했던 일이 실제로 벌어졌다는 것을 알게 되었습니다. 2.7.1에서 발생했던 데이터 손상 문제를 수정한 변경 사항이 일부 월드서버에 적용되지 않은 채 서버가 가동된 것이었습니다. 안타깝게도 이런 비정상 서버에서 자신의 캐릭터에 접속했던 분들에게서 모두 캐릭터 데이터가 손상되는 문제가 발생했습니다.

이 문제가 1월 28일에 발생했던 것과 동일한 문제라는 것을 확인한 후, 저희는 문제가 발생한 원인을 파악할 수 있었습니다. 이에 개발팀에서는 이 문제의 영향을 받은 개별 계정을 식별하려 하다가 그 과정에서 의도치 않게 일부 계정을 누락하는 위험을 감수하는 것보다는, 2.7.1.1 패치가 적용되기 직전에 백업된 캐릭터 데이터를 모두 복원하는 것이 최선의 방법이라는 결정을 내렸습니다. 


예방책

개발팀에서는 향후 이 문제가 다시 발생하지 않도록 하는 다수의 추가 안전장치를 마련했습니다. 

1) 의도하지 않은 버전으로 서버가 시작되는 일을 방지할 수 있도록 서버 "핫패치" 과정에 별도의 안전장치를 추가했습니다. 이 변경 사항은 오늘 게임 운영이 시작되면서 적용될 것입니다.
2) 일부 월드서버가 시작될 때 강제 종료하게 만들었던 문제를 수정했습니다. 이 수정 사항은 10시즌에 배포될 예정입니다. 
3) 캐릭터 데이터 손상 문제에 대한 영구적인 수정 사항이 실행 파일 변경으로 다음 업데이트에 적용되어, 서버 구성을 덮어써야 할 필요성 자체가 없어질 예정입니다. (아쉽게도 2.7.1.1 핫픽스는 이미 개발이 너무 많이 진행된 상태라 이 수정 사항이 제때 반영될 수 없었습니다.)
4) 장기적으로는 롤백 및 복원을 더 빠르게 완료할 수 있는 방안을 찾고 있습니다.
5) 향후 게임 업데이트에서 서버가 구성 데이터를 건너뛸 수 있는 문제를 수정할 예정입니다.
6) 또한 로그인 계정의 정리 코드에 보호 절차를 추가하여 향후 이런 핵심적인 부문에 추가 버그가 발생하는 것을 방지할 예정입니다.
7) 이와 같은 문제를 출시 파이프라인에서 더 빨리 파악할 수 있도록 개발 방법론을 업데이트하고 있습니다. 

오늘의 롤백으로 모든 캐릭터 계정은 오전 8:30 PST 경의 상태로 되돌아갔습니다. 개발팀에서는 2월 13일에 적용될 예정인 2.7.1.2 핫픽스 준비에 매진하고 있습니다. 참고로 이 핫픽스에는 무한 새벽칼날 문제의 수정 사항도 포함될 예정입니다.

마침 진홍의 주간이 시작된 오늘, 긴급 점검과 캐릭터 롤백으로 실망하신 분들이 많다는 걸 잘 알고 있습니다. 저희 또한 충분히 피할 수 있었던 문제로 여러분께 불편을 드려 안타까운 마음을 다스릴 길이 없습니다. 이번 문제로 실망과 불편을 드려 진심으로 죄송합니다. 개발팀에서는 이와 같은 일이 다시는 발생하지 않도록 최선을 다하겠습니다. 늘 그렇듯이 데스티니 이용 경험에 문제가 있는 분들은 언제든 번지 도움말 웹사이트와 Twitter @BungieHelp에 문의해 주세요. 기다려 주셔서 감사합니다!
EXP 326,611 (66%) / 335,001

전문가 인벤러

Lv78 참새영

레벨
Lv78
라이센스
C급 라이센스
경험치
326,611 (66%) / 335,001 ( 다음 레벨까지 8,391 / 마격까지 7,140 남음 )
포인트

이니 369,574

베니 2,229

제니 4,622

명성
2,678
획득스킬
  • 5
  • 9
  • 5
  • 5
  • 5
  • 2
  • 5
  • 5
  • 3
  • 5
가입일 정보
2012-10-20 19:57:19에 가입하셨으며, 오늘은 2687일째입니다.

코멘트

새로고침
새로고침

게임별 조립 PC

인증글 3추글 즐겨찾기
최근 방문한 게시판
    초기화
    번호             제목             글쓴이 등록일 조회 추천
    4654      [일반]  2020 데스티니 디렉터스 컷 [11] 빠dda 02:40  1695 0
    4653      [일반]  번지 개새끼들아~~!!!!!!!! [20] 구황 02-26  2250 67
    4652      [일반]  횃불 봉송자 업적이 완료되었습니다!      잘하고싶다0 02-26  1158 0
    4649      [일반]  이번주 암상인 위치입니다  [3] 드림큐어 02-22  3528 1
    4648      [일반]  데스티니 지식들 정리해 놓은게 없어서 정리해봤어.. [2] 밀가루c 02-21  2432 11
    4647      [일반]   이번 주 번지 소식 - 2020/02/20  [12] 빠dda 02-21  2043 0
    4643      [일반]  주간리셋 02.19~02.25       칼날드론 02-19  2804 3
    4640      [일반]   이번 주 번지 소식 - 2020/02/13       참새영 02-15  2383 3
    4638      [일반]  이번주 암상인 위치 입니다(2/15)  [7] 햐젤 02-15  3252 10
    4637      [일반]  데스티니 가디언즈 긴급 점검 및 롤백 [2] 참새영 02-14  2061 3
    4636      [일반]  데스티니 가디언즈 2.7.1.1 핫픽스 / 데스..      참새영 02-14  904 0
    4634      [일반]  주간리셋 02.12 - 02.18 (한글)  [2] 칼날드론 02-12  2663 19
    4633      [일반]  주간 리셋 2.12 ~ 2.18       바스타야 02-12  1412 6
    4632      [일반]   워록 여명 무한궁 [11] 바스타야 02-09  3876 0
    4631      [공략]  타이탄 입장의 벌레의 속삭임(위스퍼)전투구간 공.. [12] 식인참치 02-09  2622 2
    4628      [일반]  이번주 암상인 위치입니다.  [2] 드림큐어 02-08  3407 9
    4627      [일반]   이번 주 번지 소식 - 2020/02/06  [3] 참새영 02-07  1757 0
    4624      [일반]  주간 리셋 02.05 - 02.11       칼날드론 02-05  2670 2
    4623      [일반]  탑 프렉탈린 기부 시즌렙 부족하신분 팁 [1] 잘하고싶다0 02-05  3279 0
    4622      [일반]  오벨리스크 레벨 다 안올리신분들은 참고하세요  [10] 바스타야 02-05  4346 0
    4621      [일반]  구원자 칭호 마지막 숨겨진 퀘스트 공개  [2] 바스타야 02-05  3442 0
    4619      [기타]  게임중 '불러오는중' 안뜨게 하기.       물먹는모기 02-02  3056 1
    4616      [일반]   이번 주 번지 소식 - 2020/01/30  [2] 참새영 02-01  2617 3
    4613      [일반]  이번주 암상인 위치 (2/1)  [7] 햐젤 02-01  4106 0
    4612      [일반]  미세먼지 팁  [7] 아클린 01-31  2728 0
    4610      [일반]  트위치 프라임 보상입니다.  [4] 별빛파도 01-30  4313 1
    4609      [일반]  서광의 시즌 최고급 장비 리스트  [3] 토끼깃털모음 01-30  4359 7
    4608      [일반]  데스티니 가디언즈 2.7.1 업데이트 [5] 참새영 01-30  2118 0
    4606      [일반]  주간리셋 01.29~01.29  [4] 칼날드론 01-29  3086 17
    4605      [일반]  이단의 구덩이 공글리치 가능합니다. [7] 데베니 01-29  2789 0
     1  2  3  4  5  6  7  8  9  10 
    명칭: 주식회사 인벤 | 등록번호: 경기 아51514 | 등록연월일: 2009. 12. 14 | 제호: 인벤(INVEN)
    발행인: 서형준 | 편집인: 강민우 | 발행소: 경기 성남시 분당구 성남대로 331번길 8, 17층
    발행연월일: 2004 11. 11 | 전화번호: 02 - 6393 - 7700 | E-mail: help@inven.co.kr

    인벤의 콘텐츠 및 기사는 저작권법의 보호를 받으므로, 무단 전재, 복사, 배포 등을 금합니다.
    Copyrightⓒ Inven. All rights reserved.