티스토리 뷰
디아블로 2가 다시 출시되면서 엄청난 인기를 끌고 있다. 나도 그 유저중에 하나이고 취업을 준비하는 와중에 짬짬이 즐기고 있었다. 하지만 출시되고 이제 3주가 지난 시점인데 그동안 거의 매일매일 서버에 문제가 생겨 접속을 하지 못하는 경우가 많이 생겼다. 20년이 더 지난 게임이기때문에 그러려니 하는 것도 지쳐가는 와중에 지난 주말에 서버접속 문제로 진척도가 롤백이 되는 사태도 일어나버렸다. 문제가 어느정도 해결된 후 블리자드에서 올린 공지를 보았다. 프로그래밍을 배우기전에 내가 보던 공지의 느낌에서 서버개발자로 취업을 준비하는 사람이 직접 서버문제를 체험해 본 후 보게되는 공지의 느낌이 사뭇달랐다.
이 글은 사태분석같은 것은 아니고 그냥 공지를 보고 내가 느낀 점들을 주저리 써보는 글이다.
<공지 시작>

요약된 내용에서 나에게 다른 느낌으로 다가온 부분은 캐릭터의 진척도를 잃는 현상이었다. 어렸을 때 게임을 하면서 직간접적으로 체험한 롤백은 그냥 유저의 억울한 부분이라고 생각이 되었다. 하지만 프로그래밍 공부를 하고 서버에 대해 알아가면서 머리속에서 어떤식으로 데이터가 이동하다가 사라지게 되었는가를 생각하게 되었다. 아마 서버가 과부하되어 요청을 처리 못하는 상태에서 플레이를 지속했고, 병목현상이 발생되어 늦게 처리가 되는 와중에 모종의 이유로 데이터가 사라지게 되었을 것이다.

방대한 양의 데이터를 관리 하기 위해서 하나의 글로벌 데이터베이스가 필요하고 부하를 막기 위해 각 지역별로 지역 데이터베이스를 두어 캐릭터의 정보와 진척도를 저장시킨다. 그리고 주기적으로 해당 캐릭터의 정보를 글로벌 데이터베이스에 업데이트 시킨다. 공지를 보면서 데이터베이스를 공부했을 때 봤던 데이터의 특징 중 하나인 무결성이 언급된 것을 보고 이해한 내가 신기했었다. 몇 개월 전까지만 해도 프로그래밍에 P도 몰랐던 나였다.



실질적으로 문제가 발생한 원인은 데이터베이스에 걸리는 부하였다. 엄청난 수의 유저가 인스턴스를 새로 만든 후 짧은 시간안에 인스턴스를 나가고 다시 새로운 인스턴스를 만드는 현상 때문에 데이터베이스에 자주 저장하게 되었고 이 부분에서 많은 부하가 발생하여 서버가 다운 되었던 것이다. 원작에 충실하기 위해서 레거시 코드들을 많이 반영했지만 예전과 달라진 플레이스타일에서 예상하지 못한 문제가 발생한 것이다.

진척도에 대한 부분은 지역 데이터베이스에 존재하기 때문에 저장은 되어있지만 이를 서버가 중단된 상태에서 글로벌 데이터베이스로 가져올 방법이 없었기 때문에 롤백이 되었다는 내용이 있다. 왜냐하면 온전히 정보를 가져오려면 서버를 닫아야 하는데 시간이 얼마나 걸릴지 모르는 상황에서 서비스를 중단하는 것은 큰 위험부담이었다는 것이다. 이 부분을 보고 서버에 대해 공부하면서 보았던 여러 글들에서 서버는 절대로 꺼지면 안된다라고 적혀있던 글들이 생각이 났다. 서비스를 함에 있어서 사용자들이 사용하고 있는 서비스를 함부로 닫게 되는 것은 회사에 큰 타격이 있겠구나 하고 생각이 들었다.

빈도 제한에 적힌 말을 코드로 생각해보면 if문을 통해 기존 게임을 종료하고 새 게임을 생성하는 시간이 정해진 시간보다 짧으면 에러메시지를 출력시키는 식으로 하지 않았을까 생각했다.

대기열이 있어야 접속 시도 요청을 딱 한번만 받을 수 있기 때문에 취한 조치라고 생각이 들었다. 지속적으로 요청을 보내게 되면 DDoS공격과 같은 유형이 되기 때문에 서버가 다시 다운이 될 수 있기 때문이라고 생각했다.

공지에서 가장 인상깊었던 부분이다. 서버공부를 하면서 마이크로서비스 아키텍쳐에 대해 관심을 가지고 공부하고 있었는데 같은 내용이 나와 신기했다. 결국 커다란 서비스를 하기 위해서 마이크로서비스가 필수이고 하나의 서비스를 기획할 때 마이크로서비스로의 확장까지 고려하여 만들어야 향후 이와같은 서버문제가 생기더라도 보다 빠르게 해결하고 서비스를 확장할 수 있겠다고 생각이 들었다.
프로그래밍 공부를 시작하고 나서 예전에는 그냥 지나쳤던 내용들을 이해하게 되니 신기했다. 인생의 해상도가 올라간 느낌이었다.
디아블로 II: 레저렉션 서버 문제에 대한 설명 및 그간의 개선 노력과 향후 계획 안내
커뮤니티 여러분, 안녕하세요. 디아블로 II: 레저렉션이 출시된 이후 여러 서버 문제가 발생했고, 이번 게시물을 통해 서버 문제가 발생하는 원인과 이를 해소하기 위해 현재까지 진행한 개선 작
kr.forums.blizzard.com
'이야기' 카테고리의 다른 글
| 2021 Dev-Matching: 웹 백엔드 개발자(하반기) 후기 (0) | 2021.10.17 |
|---|---|
| 서버구현 순서 (0) | 2021.05.28 |
| Section 1) Hiring Assessment (0) | 2021.05.08 |
| 동기와 비동기 그리고 요리 (0) | 2021.04.11 |
| 변수, 함수, 조건문 그리고 기초 (0) | 2021.04.07 |