php버전과의 비교 추가

This commit is contained in:
2024-03-01 12:48:30 +00:00
parent 9120943a1a
commit 2fb1364282
+42
View File
@@ -93,3 +93,45 @@ API 처리기는 유저의 명령을 받아 1차적으로 처리합니다.
> **어떠한 경우에도** 게임 내부 DB에 직접 쓰기를 해서는 안됩니다.
>
> 게임 엔진은 메모리 cache에 강력히 의존하므로, 내부 DB에 직접 쓰는 작업은 게임 엔진의 처리 결과를 훼손할 것입니다.
## 기존 삼국지 모의전투 PHP와 비교하여 달라진 부분
### 게임 엔진
PHP 버전에서 장수 처리 Queue는 `sammo::TurnExecutionHelper`에 해당합니다.
턴 실행 도중에 장수의 행동 또는 국가 정보가 바뀔 수 있으므로, 처리 시점에 DBMS로부터 최신 정보를 가져와 처리하고, 장수 한명의 실행이 마무리되면 모든 cache를 invalidate합니다.
이러한 처리 방법은 장수 처리 Queue 하나만으로 운영되는 형태로 생각할 수 있습니다.
### NPC 명령 선택기
NPC의 실행 턴이 무엇이 될지는 엔진내에 NPC 턴 실행 직전에 결정되므로, 게임 엔진 에서 처리되어있다고 볼 수 있습니다.
`sammo::GeneralAI`가 처리를 전담하고 있으며, `sammo::TurnExecutionHelper``sammo::GeneralAI::chooseNationTurn()`, `sammo::GeneralAI::chooseGeneralTurn()`를 호출하는 방식입니다.
게임 엔진과 분리되어 있지 않으므로, 턴 입력, 세율 조정 등의 작업이 직접 이루어졌습니다.
### API 처리기
유기체 서버 시절에서는 `c_*.php` 계열 함수들이 API를 처리하는 형태였고, 이후 HiDCHe 에서 json web api 처리를 위해 `j_*.php` 계열 함수들이 추가되었습니다.
0.23 버전부터는 `api.php`를 통해 처리하는 (제대로 된)API 처리기가 도입되었습니다.
`api.php?path=**/*`의 경로는 `sammo::API::**::*.php` 이하의 클래스를 생성하고 호출합니다.
이때의 API 처리기는 게임 엔진에서 다루어야 할 데이터 변경도 같이 하고 있어 게임 엔진 측에서 조심해서 DB를 조회하도록 하여야 했습니다.
### DBMS
PHP 버전에서는 MariaDB를 사용하였습니다.
다만, 게임 내의 모든 데이터를 column으로 처리하는 데에는 무리가 있어 크게 두가지 방식으로 나누어 확장 데이터를 처리하였습니다.
- `general`, `city`, `nation` 테이블에 `aux` 필드를 만들어 json으로 처리
- `storage`, `nation_env`와 같은 Key/Value(json) 테이블을 만들어 처리
게임 엔진의 턴 실행과 연계된 부분인가, 유저 API에 연계된 부분인가에 따라서 다르게 저장되고 있어 일관성이 떨어지는 문제가 있었습니다.
"어차피 많은 데이터가 json으로 따로 관리되니, 굳이 RDBMS일 이유가 있는가?"가 DBMS 전환의 가장 큰 이유입니다.