더북(TheBook)

각 과정을 설명하면 다음과 같습니다.

클라이언트가 서버에 “내 캐릭터를 만들어라.”라고 요청합니다.

서버는 데이터베이스에 “새 캐릭터에 대한 데이터 개체, 즉 레코드를 만들어라.”라고 요청합니다.

데이터베이스는 이에 대한 응답을 합니다. 여기서는 “성공했다.”라는 응답을 받았다고 하겠습니다.

서버는 클라이언트에 “캐릭터를 만드는 것이 성공했다.”라고 알려 줍니다.

클라이언트는 서버에 “내 캐릭터 중 OOO를 선택하겠다.”라고 요청합니다.

서버는 데이터베이스에 “캐릭터 OOO를 선택했다고 기록하자.”라고 요청합니다.

서버는 클라이언트에 “캐릭터 OOO를 성공적으로 선택했다.”라고 알려 줍니다.

이름이 같은 캐릭터가 있을 경우 은 실패할 수도 있습니다. 반면 캐릭터 선택은 게임 서버 메모리에 이미 있는 정보를 토대로 하는 것이므로 즉시 성공합니다. 따라서 데이터베이스에 변화를 기록하는 것은 그냥 일방적인 통보 형태로 진행해도 됩니다.

데이터베이스에 기록하되 그 결과를 기다릴 필요가 없을 때는 다음 코드와 같이 데이터베이스에 기록하는 함수를 별도의 스레드나 비동기 함수 호출로 처리해도 됩니다.

func()
{
  data.change(xxx);
  thread.doAsync(() = >
  {
      db.write(xxx);
  });
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.