개발 과정에서 안정성을 위해 노력할 것
서버 안정성을 지키려면 일반적인 소프트웨어 품질 관리가 엄격하게 시행되기 마련입니다. 다음은 그러한 예 중 하나입니다.
1. 치밀한 개발과 유닛 테스트
프로그래밍한 결과물 한 줄 한 줄을 꼼꼼히 검수하고, 엄격하게 규정된 코딩 가이드라인을 따르는 것입니다. 모든 소스는 알기 쉽고 단순하게 작성하라는 규정, 모든 함수 호출의 반환 값을 반드시 체크하는 루틴을 추가할 것 등을 예로 들 수 있습니다. 그리고 개발된 프로그램의 각 부분은 반드시 자동화된 자가 검증, 즉 유닛 테스트(unit test)를 만들어야 한다는 의무 규정을 정하고 시행하는 것입니다. 당장에는 귀찮겠지만, 후폭풍을 예방한다는 점에서 의의가 있습니다.
2. 80:20 법칙
모든 프로그램 성능의 80%는 20%의 소스 코드에서 나타난다는 파레토 법칙입니다. 성능에 지대한 영향을 주는 일부분의 소스 코드에서만 프로그램 구조가 복잡해지더라도 성능을 최적화해서 개발하고, 나머지 대부분은 성능보다 유지 보수하기 쉬운 단순한 구조로 개발하는 것입니다.
3. 1인 이상의 코드 리뷰
모든 개발 결과물은 동료의 검토를 받는 것입니다. 다른 사람이 만든 소스 코드를 읽는 것은 고통스러운 일입니다. 하지만 다른 사람의 관점에서 몰랐던 버그를 발견하는 경우가 종종 있습니다. 또 상대방 코드를 이해하면서 서로 지식을 공유하는 효과도 있으며, 누군가 퇴사하더라도 그 자리를 완충해 주는 효과가 있습니다.
4. 가정하지 말고 검증하라
유닛 테스트만으로는 서버 안정성을 확신할 수 없습니다. 실제로 많은 플레이어가 서버에 접속하여, 서버가 과부하를 감당할 수 있는지 서버에 접속한 플레이어들의 복잡한 요청을 이리저리 처리하다 오작동을 일으키지 않도록 검증해야 합니다. 실제로는 많은 플레이어를 모으기가 쉽지 않습니다.6 그래서 사람 대신 컴퓨터를 이용하여 자동으로 작동하는 게임 클라이언트를 대량으로 실행시켜서 테스트를 하기도 합니다. 이를 봇 테스트(bot test) 혹은 더미 클라이언트 테스트(dummy client test)라고 하며, 스트레스 테스트라고도 합니다.
6 진짜로 많은 사람을 동원해서 테스트를 하는 경우도 있습니다. 이를 포커스 그룹 테스트(focus group test)라고 합니다.