Web 서버 방식의 게임 서버에서는 Web API를 사용하여 서버를 구축
API
Application Programming Interface의 약자로 응용프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만드는 인터페이스를 뜻함
일종의 규약으로 애플리케이션 개발자들이 다른 애플리케이션을 사용할 수 있도록 표준화된 방법을 제공
즉 프로그램들과 데이터베이스, 기능들의 상호 통신 방법을 규정하고 도와주는 매개체로 사용됨
REST
REpresentational State Transfer의 약자로 웹 기반의 소프트웨어 아키텍처 스타일 중 하나
웹 리소스를 사용하여 클라이언트와 서버 간의 통신을 수행하는 방법을 규정
HTTP URI를 통해 자원(Resource)을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD Operation을 적용함
- 리소스 / 행위 / 표현으로 구성
- 리소스 : HTTP URI 형태를 가지고있으며 모든 데이터를 고유한 식별자인 URI를 가진 리소스로 표현
- 행위 : HTTP Method를 사용
- 표현 : 하나의 자원이 JSON / XML / TEXT 등 여러 형태의 응답으로 나타내질 수 있음
- HTTP 프로토콜 기반이므로 Stateless 성격을 가짐
- CRUD Operations
- Create : 데이터 생성 - POST
- Read : 데이터 조회 - GET
- Update : 데이터 수정 - PUT
- Delete : 데이터 삭제 - DELETE
- 장점
- HTTP 프로토콜의 인프라를 그대로 활용할 수 있음
- HTTP 표준을 따르는 모든 플랫폼에서 사용이 가능하기 때문에 특정 언어나 기술에 종속되지 않음
- HTTP의 캐싱 기능을 적용하여 서버의 응답을 클라이언트에 저장할 수 있음
- 다중 계층으로 구성하여 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있음
- 단점
- REST 자체의 표준이 존재하지 않음
- 사용할 수 있는 메소드에 제한이 존재
REST API
REST 기반으로 구현한 서비스 API로, 최근에는 API를 제공하는 업체 대부분이 REST API를 제공
일반적으로 REST 아키텍처를 구현하는 서비스를 나타내기 위해 RESTful이라는 용어를 사용하기도 함
- 이는 공식 용어는 아니며, 단순히 REST를 REST답게 쓰기 위한 REST 원리를 따르는 시스템을 지칭할 때 쓰임
- REST 원리 - CRUD의 기능을 전부 활용 / URI에 자원과 id 정보만 들어가있어야 함
- 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 목표이기때문에 반드시 RESTful한 API를 구현할 필요는 없음
게임 서버에서의 웹 서버
게임 서버에서 웹 서버를 사용할 수 있는 경우
- 대부분의 컨텐츠가 자신의 데이터에만 접근할 경우
즉, 거래 / 실시간 PVP / 실시간 레이드 등의 인터랙션 요소가 없는 경우 - 일부 컨텐츠의 모든 처리가 클라이언트에서 이루어지고, 서버에서는 검증만 하면 되는 경우
- 게임 서버가 단순히 데이터 관리만 하는 경우
웹 서버의 장점
낮은 복잡도가 유지 가능하기 때문에 실수나 버그의 소지가 적음API 서버가 메인인 게임 서버라면 복잡도가 낮지 않으며, 소켓 서버와는 다른 방면으로 구현의 어려움이 존재- 웹 서버의 메모리에 올라온 데이터 자체는 휘발성이기 때문에 스케일 인/아웃이 유연
웹 서버의 단점
- DB에 동시 접근시 데이터 무결성이 깨질 수 있음
- 게임 서버와의 연동에서는 캐시 사용이 가능한 컨텐츠가 한정되어있음
게임 서버에서 웹 서버를 사용하는 이유
- 개발이 편리 (다루기 쉬운 언어 사용, 자료 / 라이브러리 등이 많음)
- 기본적으로 분산 처리이기 때문에 서버 오류 발생시 전체가 아닌 일부에만 문제가 발생
- 모든 데이터는 DB 기준으로 처리하여 서버 다운의 롤백이 없음
- 데이터는 DB에서만 처리하는 Stateless 서버이기 때문에 확장이 쉬움 (단 그만큼 DB 분산, 설계가 중요함)
'개인공부 > Web API 게임 서버 공부' 카테고리의 다른 글
배경지식 - Redis (0) | 2023.04.20 |
---|---|
배경지식 - ORM (1) | 2023.04.20 |
배경지식 - C# (0) | 2023.04.20 |
배경지식 - ASP.NET (0) | 2023.04.19 |
배경지식 - HTTP (1) | 2023.04.19 |
댓글