[일반지식] 게임 서비스 구성 시나리오별 아이펀 엔진 사용 예(2016-06-05, ifunengine)

asked 2016-11-30 17:20:28 +0900

inkeun.kim gravatar image

이 문서에서는 게임 서비스 구성 시나리오별로 어떻게 아이펀 엔진을 사용해서 서비스를 구축할 수 있는지에 대해서 간략하게 설명합니다.

  1. 비동기 게임 콘텐츠만 가지고 있는 경우

이 경우는 전형적인 초창기 모바일 게임 형태이며, 클라-서버 통신에는 HTTP 를 사용하고, 서버는 웹 서버 혹은 웹 서버에 대응하는 프레임워크로 구성하기도 했었습니다. PHP, Node.js, Java Servlet, .Net, Python Django, Python Flask 등의 기술이 기존에 사용되었습니다.

만일 이런 기존 웹 서비스 구축에 사용되는 기술에 익숙하시다면, 그냥 계속해서 그 기술을 쓰시는 것도 괜찮은 선택이라고 생각합니다. 그러나 기존 기술들을 사용함에 있어서 다음과 같은 귀찮은 점 때문에 아이펀 엔진을 대안으로 고려하실 수도 있을 겁니다.

성능: 아이펀 엔진은 C++ 코드로 작성됩니다. .Net 이나 Java 가 아닌 경우들에 비해서 더욱 많은 사용자를 처리할 수 있습니다. DB 처리 간소화: 아이펀 엔진은 ORM 을 통해 DB 에서 접근해야되는 게임 오브젝트 코드를 자동으로 생성합니다. 그리고 이렇게 생성되는 코드에서 필요한 DB query 를 자동으로 수행하며, 심지어 서버가 여러대 존재하는 경우 서버간에 DB 접근에 필요한 순서 조율 등을 DB 까지 가기 전에 게임 서버 수준에서 마치게 되므로 보다 효율적입니다. 만일 기존 방식이 이런 ORM 을 지원하지 않는다면 DB 접근에 대한 코드를 작성하셔야 되는데, 이를 간편하게 하기 위해서 아이펀 엔진을 사용하실 수 있습니다. 구현 해야되는 코드 감축: 아이펀 엔진은 인증, 결제 중에서 많이 사용되는 경우들을 기본 내장하고 있습니다. 그리고 게임 내 랭킹이나 채팅, 매치메이킹 등 게임서비스에서 일반적으로 많이 쓰는 기능들이 이미 구현되어있습니다. 만일 이들을 일일히 구현하는게 귀찮으시다면 아이펀 엔진을 활용하시면 편리합니다.

그림1: 아이펀 엔진을 이용하여 비동기 게임 서버를 구축하는 경우 2. 실시간 게임 콘텐츠만 가지고 있는 경우

실시간 게임 콘텐츠를 지원하기 위해서는 HTTP 기반의 기존 기술들은 사용이 불가능합니다. (클라가 서버에게 끊임없이 polling 하는 방식을 생각할 수도 있지만, 이는 서버쪽에 엄청난 부하를 유발합니다) 그렇기 때문에 직접 소켓 서버를 작성하셔야 됩니다. 소켓 서버 자체를 만드는 것이 그렇게 어려운 작업은 아니지만, 안정적인 소켓 서버를 만들기 위해서는 상당한 시간이 소모될 수 밖에 없고, 검증에도 시간이 걸릴 수 밖에 없습니다. 아이펀 엔진은 앞의 비동기 게임 콘텐츠에서 아이펀 엔진을 사용할 때의 잇점 외에도 실시간 게임 콘텐츠에서도 많은 잇점을 제공합니다.

세션 기반의 소켓 서버: 무선 네트워크 환경은 기존 PC 온라인의 유선 네트워크 환경보다 더 잦은 네트워크 불안정 상황을 겪게 됩니다. 그 때문에 UDP 와 같은 연결 지향적이지 않은 프로토콜을 쓰거나, TCP 를 쓴다면 일시적인 네트워크 문제로 연결이 끊겨도 이를 복원 할 수 있어야 됩니다. 아이펀 엔진은 UDP 나 TCP 를 덜렁 쓰게 하는 것이 아니라, 그 위에 세션 계층을 제공하고 TCP 에서의 연결 불안정도 해결해줍니다. 또한 세션 만료 시간 등 세션 관련된 커스터마이징을 지원합니다. 다양한 프로토콜 지원: 아이펀 엔진은 UDP, TCP 를 지원하며, 이 프로토콜에 대해서 추가적인 reliability (안정성) 을 제공합니다. 즉, UDP 의 경우 reliable UDP 로 쓰실 수도 있습니다. TCP 의 경우 TCP 자체가 안정적이긴 하지만 TCP 연결이 끊어져서 재연결을 하는 경우, 마지막에 전송한 내용이 제대로 전달되었는지는 보장하기 어렵습니다. 그때문에 세션 수준에서의 추가적인 reliability 가 요구됩니다. 이런 reliability 는 설정 파일을 조작하는 간단한 작업만으로 끄고 켜는 것이 가능합니다. 서버 확장 대비: 만일 서버를 추가하고 서버간에 통신을 해야된다면, 별도로 서버간 RPC 를 구현하거나 DB 와 같은 저장소 (in-memory DB 든, 그냥 SQL DB 든) 등을 이용해서 동기화 작업을 하셔야 될 겁니다. 아이펀 엔진은 서버간 RPC 가 기본 구현되어 있으며, DB 접근의 경우 DB 까지 ... (more)

edit retag flag offensive close merge delete