Files
core_ng/docs/Component.md
T
2024-03-01 12:16:15 +00:00

3.7 KiB

마지막수정일
마지막수정일
2024-03-01

Component 구성

컴포넌트 구성과 역할을 설명합니다.

객체

서버 내에 객체는 다음 그림과 같습니다.

구조

MongoDB

메인 DB는 MongoDB입니다.

Collection은 다양하나, 게임 엔진에 필요한 값과 게임 엔진에 필요하지 않은 값이 분리됩니다.

분리되는 예시는 다음과 같습니다.

  • 게임 내부 Collection

    • 장수의 능력치
    • 장수의 금/쌀
    • 장수의 수비 켬/끔 여부
    • 도시의 현재 스탯
    • 국가의 금/쌀, 전략 수치
    • 국가의 게임 내 정책(세율, 지급률)
  • 게임 외부 Collection

    • 장수의 메시지함
    • 국가의 방침 게시물
    • 국가의 회의록
    • 국가간 외교 메시지
    • 로그인 정보, 벌점
    • 유니크 경매장 진행상태

게임 엔진

턴 실행과 관련된 게임 핵심 로직을 처리하는 엔진 컴포넌트이며, 게임 내부 Collection에 대한 쓰기 명령은 게임 엔진에서만 가능합니다.

게임 엔진은 예외적인 경우에 게임 외부 Collection의 쓰기 명령을 할 수 있지만, 게임 내부에 영향을 주지 않는 경우여야만 합니다. 만약 예전에는 게임 외부 Collection에 기록되는 데이터였다 할지라도, 게임 엔진에서 다루기 시작한다면 게임 내부 Collection으로 이관됩니다.

명령 처리 순서

명령처리순서

게임 엔진은 내부적으로 세개의 처리 큐를 가집니다.

  • 장수 처리 Queue: 턴마다 처리되는 장수 명령 처리 Queue입니다.
  • NPC Action Queue: NPC의 명령을 처리하는 Queue입니다.
    • NPC 명령 선택기의 입력 요청이 이곳에 쌓입니다.
  • 유저 Action Queue: 유저의 명령을 처리합니다.
    • API 처리기를 통해 전달됩니다.

세개의 처리 큐는 장수 처리 Queue > NPC Action Queue > 유저 Action Queue 순의 우선순위를 가집니다.

DB 반영 시점

MongoDB에 데이터가 기록되는 시점은 Queue의 아이템 하나를 해소했을 때 이루어집니다. 즉, 장수의 턴 하나가 완전히 실행되었을 때에만 DB에 반영된다고 할 수 있습니다.

게임 엔진 내에서 변경되는 내용은 메모리 내의 저장소에만 담아두고, 처리를 마치는 시점에 변경된 내용을 정리하여 한번에 쓰기 작업을 수행하여 Transaction을 모사합니다.

NPC 명령 선택기

NPC 명령 선택기는 NPC가 어떤 턴을 실행해야할지만을 연산하는 컴포넌트입니다.

NPC의 실행턴보다 일정 시간 이전에 적절한 턴이 무엇인지 계산하고, 게임 엔진으로 결과값을 전송합니다.

이때 명령의 규격은 일반 유저가 내리는 명령 규격과 유사한 형태를 갖습니다.

Note

기존 삼모전 PHP에서는 명령 선택기가 게임 엔진과 동기적으로 구성되어있었습니다.

API 처리기

API 처리기는 유저의 명령을 받아 1차적으로 처리합니다.

게임 외부 데이터에 대한 처리라면 읽기/쓰기를 모두 수행하며, 게임 내부 데이터이면 읽기 작업은 직접할 수 있습니다.

턴 입력 등 쓰기 작업이 요구되는 경우라면 게임 엔진에 해당 작업을 요청하고, 작업이 끝날때까지 기다린 다음, 엔진으로부터 결과값을 받아 반환합니다.

Warning

어떠한 경우에도 게임 내부 DB에 직접 쓰기를 해서는 안됩니다.

게임 엔진은 메모리 cache에 강력히 의존하므로, 내부 DB에 직접 쓰는 작업은 게임 엔진의 처리 결과를 훼손할 것입니다.