# WebAPI Server

## 의미

* REST 방식으로 WebAPI를 제공하는 서버
* 요청에 대해 응답하는 주체(서버)를 의미함

## 게임서버에서의 WebAPI Server를 사용하는 경우

1. 실시간 인터렉션 요소가 없는 경우(비 실시간 통신)
2. 빠른 응답성이 중요하지 않은 경우(네트워크 상태 덜 민감)
3. 클라이언트에서 컨텐츠에 대한 모든 처리가 이루어지고, 서버는 그 검증만 맡아도 되는 경우
4. 게임 서버가 단순히 데이터 관리만 하는 경우
5. 대부분의 컨텐츠가 자신의 데이터에만 접근 할 경우

> 대부분의 1인 컨텐츠와 데이터에 적용하며, 일반적인 웹 서버 형태 그대로를 이용함

* 예) \*
  * 랭킹, 전적 등을 보여주는 일시적 지연을 감내할 수 있는 데이터
  * 실시간 통신이 필요한 게임에서도 대기실, 개인 공간에서는 웹서버 방식으로 구현 가능

## 웹서버 방식의 게임서버 장점

* 낮은 복잡도를 유지할 수 있어, 실수나 버그의 소지가 적음 (비교적 구현이 쉬움)
* 게임 클라이언트와 서버 간 통신을 표준화할 수 있음. 클라이언트 개발자와 서버 개발자간 협업이 쉬워지고, 다양한 플렛폼과 클라이언트에서 동일한 API 서버로 요청할 수 있음
* 웹 서버의 특징상 메모리에 올라온 데이터 자체는 휘발성이므로, 스케일 인/아웃이 유연함

## 웹서버 방식의 게임서버 한계

* DB 동시 접근시, 데이터 무결성이 깨질 수 있음
* 요청이 많을 경우 서버의 부하 가능성. 이를 해결하기 위해서는 적절한 로드 밸런싱과 캐싱 전략이 필요.
* API의 오용, 남용, 비정상적인 요청 등으로 인한 보안 문제가 발생 가능. 이를 방지하기 위해 적절한 보안 전략이 필요

> 하나의 게임에서도 웹서버 방식과 소켓서버 방식을 모두 사용합니다. 게임 내의 컨텐츠에 따라 두 가지 방식 중 장점을 활용할 수 있는 것을 택하여 구현하는 경우가 많습니다.

## 참고문헌

* [엘키의 주절 주절](https://elky84.github.io/2022/01/24/web_server_wiith_game_server/)
* [오키](https://okky.kr/articles/277788)
