사용자 도구

사이트 도구


kb:gameserveressentialfeature

게임 서버 필수 기능

서비스를 거치면서 만들었거나 만들고 싶은 기능들 정리. 서버 디자인이나 성능 등에 관한 이야기는 아니다.

모든 기능들에 공통적으로 적용되는 사항을 뽑자면…

  • 서버는 클라이언트만큼 자주 패치할 수가 없기 때문에 어떤 기능이든 실시간으로 동작하는 게 좋다.
  • 서버는 서버 프로그래머 외에도 여러 사람이 주시하고 있기 때문에, 툴을 통해서 모니터링 및 조작을 할 수 있어야 한다.

목록

접속

  • 같은 유저가 다른 곳에서 접속할 경우, 기존 유저의 접속을 잘라내고 들어갈 수 있어야 한다.
  • IP 마스크를 통해 접속을 제한할 수 있어야 한다.
    • 이상한 패킷을 보내거나, 너무 많은 패킷을 보내거나 하는 유저들을 임시로 밴할 수 있으면 더욱 좋다.
  • 유저가 서버 최대 동접보다 더 많이 붙을 경우를 위해 로그인 대기큐가 있어야 한다.
    • GM은 로그인 대기큐를 무시하고 접속할 수 있어야 한다. 게임 안의 상황을 봐야하기 때문이다.
  • 실시간으로…
    • 서버를 추가할 수 있어야 한다.
      • 오픈베타 때 유저의 폭주를 부드럽게 처리할 수 있어야 하기 때문이다.
    • 모든/특정 서버를 일반 유저에게 오픈/클로즈할 수 있어야 한다.
      • 오픈베타 때 유저의 폭주를 부드럽게 처리할 수 있어야 하기 때문이다.
    • 특정 서버에 등급을 줘서 GM만 들어오게 할 수 있어야 한다.
      • 추가한 서버들을 테스트하거나, 별도의 테스트 서버를 유지하기 위해서이다.
    • 특정 서버의 최대 동시 접속자수를 조절할 수 있어야 한다.
      • 오픈베타 때 유저의 폭주를 부드럽게 처리할 수 있어야 하기 때문이다.
    • 서버 우선 순위 혹은 배열 순서를 변경할 수 있어야 한다.
      • 유저들은 특정 순서(처음 or 끝)에 있는 서버에 몰리는 경향이 있기 때문에, 동접을 봐가며 이를 조절해야 하기 때문이다.
    • 유저가 생성하는 최대 캐릭터 숫자를 제한할 수 있어야 한다. 혹은 막을 수 있어야 한다.
    • 유저가 생성하는 캐릭터 이름을 필터링할 수 있다.
      • 이거야 뭐, 기본 기능.

에러

  • 서버 기동 순서에 별다른 제한이 없어야 한다.
    • 특정 서버에 문제가 발생한 경우, 해당 서버를 다시 기동하기 위해 다른 서버에 영향을 끼쳐서는 안 되기 때문이다.
  • 서버간 혹은 데이터베이스 연결이 끊어졌을 경우, 해당 연결 복구와 사후 처리를 할 수 있어야 한다.
    • 연결 복구만 할 게 아니라, 서로 공유하고 있는 데이터들도 복구해야 한다.
  • 데드락이 발생했을 경우, SMS를 통해 개발자에게 알릴 수 있어야 한다.
    • 운영팀이 게임 안에서 상주하고 있다는 보장이 없기 때문에, 막상 문제를 눈치챘을 때는, 문제 발생 후 상당 시간이 지난 상태일 수 있다.
  • 서버가 크래쉬되었을 경우, SMS를 통해 개발자에게 알릴 수 있어야 한다.
    • 기본 아니겠는가…
  • 서버가 크래쉬된 이후, 자동으로 다시 기동해야 한다.
    • 무조건 수동으로 기동해야 하는 경우, 서버 프로그래머 인생이 피폐해진다.
    • 신규 버전의 실행 파일이 있을 경우, 업데이트 이후 다시 떠야 한다. 같은 문제로 다시 죽을 필요는 없지 않은가.

모니터링

  • 서버의 접속자 현황을 알 수 있어야 한다.
    • 모두가 원한다. -_-
  • 서버의 자원 사용량을 알 수 있어야 한다.
    • CapacityPlanning에 기준이 된다.
    • 메모리 릭을 잡는데 도움이 된다.
  • 서버 상에 생성된 각종 객체의 숫자를 출력할 수 있어야 한다.
    • 메모리 릭을 잡는데 도움이 된다.

개발/운영

  • 모든/특정 서버에 공지를 뿌릴 수 있어야 한다.
    • 기본…
  • 툴을 통해 서버를 올리거나 내릴 수 있어야 한다.
    • 간단한 정기 점검은 운영팀에게 맡길 수 있다.
  • 랜덤으로 접속자 중에 하나를 뽑아낼 수 있어야 한다.
    • 게임 내 이벤트에 가끔 쓰인다.
  • 게임 애셋을 실시간으로 리로드할 수 있어야 한다.
    • 유닛 테스트나, QA팀 테스트로는 발견되지 않는 버그가 분명히 존재한다. 클라이언트야 패치한 다음, 재접속을 유도한다고 치더라도 서버는 그런 호사를 누릴 수가 없기 때문이다.
  • 게임 내 특정 기능을 켜고 끌 수 있어야 한다.
    • 예를 들어 경매 같은 기능
  • 지속적으로 동작하는 임시 오브젝트를 생성할 수 있어야 한다.
    • 예를 들어 몬스터를 주기적으로 스폰하는 객체. 오픈 초반에 몬스터 없다고 노래를 부르는 유저들을 위해 운영팀이 소환해 주면 좋다.
  • 게임 애셋을 게임 안에서 생성할 수 있으면 좋을 것 같다.
    • 이벤트용으로 간단한 퀘스트를 게임 안에서 생성한다든지…
  • 게임 내 시간을 가속할 수 있어야 한다.
    • 일주일 간격으로 동작하는 시스템 같은 것을 테스트하기 위해서이다.
  • GM 상담큐 및 평가 시스템이 있어야 한다.
kb/gameserveressentialfeature.txt · 마지막으로 수정됨: 2014/11/08 14:45 (바깥 편집)