# DB Cache 서버와 클라이언트

ProudNet DB 시스템의 DB cache는 게임 데이터베이스의 읽기/쓰기를 위한 서브 시스템으로, 데이터베이스 내용은 서버 메모리에 cache 되기 때문에 DBMS 에 걸리는 부하를 줄일 수 있습니다.

게임 서버나 인증 서버 등의 여타 서버들은 DB cache client를 갖고 있어야 하며, DB cache client 는 DB cache server 에 접속해서, 주로 <mark style="color:orange;">stored procedure</mark>를 통해 간접적으로 게임 DBMS를 접근합니다.

<figure><img src="https://786252296-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlVa8RtbdMu1r7zocyjxZ%2Fuploads%2F1TBD9g5JzUDybN0ERjXb%2Fdb_server_client.png?alt=media&#x26;token=e9b9de77-d69a-4dd6-9573-70f552117af0" alt=""><figcaption><p>ProudDB cache 서버 및 클라이언트 구성도</p></figcaption></figure>

## DB Cache 서버

DB cache server 는 게임 DBMS에 직접 접근하는 유일한 프로세스입니다. 이러한 이유는 DB cache의 최신 내용이 아직 게임 DBMS에 반영되지 않을 수 있기 때문입니다.&#x20;

DB cache 가 접근 중인 게임 DBMS의 내용을 다른 곳에서도 변경을 가하려면 [**비독점적 데이터 접근**](https://docs.proudnet.com/proudnet/proudnet/db_system/theory#id-3) 을 사용하시기 바랍니다.

## DB cache 클라이언트

DB cache client 에서는 게임 DBMS 의 객체 정보를 load합니다. 그리고 그 정보는 DB cache client 에서 DBMS의 부하 없이 얼마든지 읽기를 할 수 있습니다. \
만약 DB cache client 에서 load한 정보에 [**일방적 데이터 변경**](https://docs.proudnet.com/proudnet/proudnet/db_system/theory#id-1) 으로 수정하면 그 내용은 DB cache server로 전송됩니다. \
DB cache 시스템은 DB cache client로부터 수정 요청이 들어오면 바로 DBMS에 기록하지 않는 대신 DB cache server의 메모리에서 값을 갱신해 둡니다. 일정 시간이나 중요 시점(서버 사용자가 정의한) 이 도래하면 DBMS에 기록합니다.
