첫 번째는 “서버가 죽더라도 최대한 빨리 다시 살아나게” 하는 방법입니다. 다시 말해서 서버 프로세스가 중단되더라도 다시 자동으로 켜지도록 프로그램을 만드는 것입니다. 서버 프로그램과 서버 프로그램을 감시하는 프로그램을 동시에 실행시키고, 서버 프로그램이 중지할 경우 감시하던 프로그램이 서버 프로그램을 다시 실행시키는 것이 대표적인 방법입니다.
두 번째로 “서버는 죽더라도 최대한 적은 서비스만 죽이는” 것은 프로세스가 비정상 종료나 일시 중지를 하더라도 이것으로 발생하는 피해를 최소화하는 방법입니다. 서버 프로세스를 하나만 띄우는 것이 아니라 여러 개 띄웁니다. 예를 들어 게임 월드 하나를 서버 프로세스 100개가 구획을 나누어 처리한다면, 그중 서버 프로세스 1개가 종료하더라도 전체 사용자의 1%만 이용이 중단될 뿐입니다. 혹은 게임 서버의 역할 중 채팅 기능을 다른 서버 프로세스가 담당하도록 하는 것도 한 방법입니다. 그러면 게임 서버가 죽더라도 채팅 기능은 살아 있으므로 게임을 이용하던 사람들은 일단 채팅이라도 할 수 있습니다.
같은 역할을 하는 서버를 두 대 이상 두는 것도 한 방법입니다. 서버 두 대 중 하나는 실제로 서버 역할을 하고, 나머지 한 대는 여벌의 역할을 하기 위해 대기합니다. 앞의 서버가 죽으면 뒤의 서버가 배턴을 이어받아 서버 작동을 유지합니다. 이 방법은 9장 분산 서버 구조의 서버 분산 처리와 고가용성 부분에서 설명하겠습니다.
마지막은 “오작동에 대해서 기록을 남기는” 방법입니다. 서버가 비정상으로 종료할 경우 이때까지 서버에서 벌어진 상황을 자동으로 기록으로 남기는 것은 당장에는 문제를 해결하지 못하더라도 미래에 반복되는 문제를 예방하는 소중한 정보를 확보해 줍니다. 서버가 비정상 종료를 하는 마지막 순간의 프로세스 상태, 즉 크래시 덤프(crash dump)를 파일로 남기거나 서버가 최근에 받았던 메시지 종류를 파일로 남기는 방법이 그 예입니다.