서버와 클라이언트
나는 전문 서버 및 클라이언트 프로그래머가 아니기 때문에 아주 사소한 개념적인 부분에 대한 간단한 기본 지식만을 공유하고자 한다. 이 내용을 기획 이론 부분에서 언급하는 이유는 게임 개발을 처음 접하는 사람들과 대화할 때 서버와 클라이언트의 개념이 없는 사람들을 봐왔기 때문에 간단한 내용을 정리하는 것을 마음먹게 되었다.
서버와 클라언트는 이론적으로 매우 단순하다 하나의 “서버”가 있으며, 사용자는 다수의 클라이언트를 통해 게임을 이용한다. 이때 서버와 클라이언트는 상호 규약에 따른 통신 과정을 통해 정보를 주고받으며, 사용자가 게임을 원활하게 이용할 수 있도록 한다.
▶ 데이터 패킷
패킷(packet)은 네트워크가 전달하는 데이터의 형식화된 블록을 뜻하며, 서버와 클라이언트가 상호 정보를 주고받는데 사용된다.

<유저는 클라이언트를 통해 게임을 이용하고 클라이언트와 서버는 통신을 통해 정보를 공유한다.>
서버는 온라인 게임에서 매우 중요하며, 크게 “데이터 저장”, “데이터 분배”, “데이터 검증”의 주요 역할을 수행하는데 이것은 유저가 직접 손댈 수 없는 환경의 이점으로 비교적 데이터 변조와 해킹에 안전하기 때문이다.
통신은 규약에 따라 이뤄지며, 이를 패킷(packet)이라 한다. 잦은 패킷 교환은 유지 비용 증가 및 최적화 이슈에 영향을 주기 때문에 가급적 최소한의 범위 내 패킷 교환이 발생하도록 시스템을 설계해야 한다.
예를 들어 가방 시스템을 설계할 때 가방 오픈시점에 최대 500개의 아이템이 노출되며, 실시간으로 변동 사항이 즉시 반영되어야 한다면 수천명의 유저가 쉬로 가방을 열고 닫거나 작은 변동 사항 모두 패킷 교환이 발생하면 불필요한 비용 발생과 퍼포먼스에 악영향을 줄 수 있다. 때문에 가급적 기획 단계에서 꼭 필요한 정보만 교환 및 갱신될 수 있도록 고려되어야 할 필요가 있다.
※. 물론 극단적인 예시를 말하기는 했지만 어느정도 무리하지 않은 기획 의도를 전달하기 위해서는 서버와 클라이언트에 대한 최소한의 지식을 보유하고 있는 것이 좋다.
▶ 최초 패킷 교환 시점
최신 정보를 어느 시점에 클라이언트가 제공받을지에 대하여 정의할 수 있다. 예를 들어 가방 내 보유 아이템 정보는 모든 정보를 실시간으로 서버에 반영할 필요가 없다. 이유는 가방을 열기 전에는 자신이 무엇을 보유하고 있는지 알 필요가 없기 때문이다.
▶ 패킷 보유 시점
최신 패킷을 제공받은 이후에 일부 정보를 인스턴스 공간에 보관 후 로컬에서의 변동 사항이 없을 경우 마지막으로 제공받은 정보를 유지하는 것도 최적화의 하나의 방법 중 하나이다. 또한 가방을 오픈한 이후 필터 등 간단한 기능은 보유 정보만 가지고 충분히 처리 가능하다.
▶ 초기 패킷 정보
가방에 보유 아이템이 5000개라고 가정했을 때 한 번에 모든 정보를 받아오는 것은 게임 퍼포먼스에 좋지 않은 영향을 준다. 화면에 50개 정도 노출이 가능하다고 가정한다면 최초 통신 시점에 약 100개의 아이템 정보를 제공받은 후 화면 전환 시점에 따라 추가 정보를 제공받는 것이 더 합리적인 선택이다.
※. 위의 사항은 예시일 뿐이며, 시스템 설계 단계에서 위와 같은 상황을 만들지 않는다. 여기서 기억해야 할 부분은 정보의 갱신과 패킷을 주고받는 시점 정도는 기획 단계에서 고려하는 것이 좋다. (내가 장담하는데 가방 기획할 때 100% 위와 같은 질문을 받게 될 것이다.)
데이터 저장
서버의 주요 역할 중 하나로 다양한 정보를 저장한다. 그리고 필요에 따라 클라이언트에게 제공하거나 새로 발생된 정보와 서버 시뮬레이션을 통해 생성된 정보를 기존 데이터에 갱신하기도 한다. 이러한 데이터 저장 기능을 DB(Data Base)라 하며, 게임 서버와 다르게 별도 서버로 구성해서 사용하는 경우가 많다.
DB는 매우 중요한 정보를 저장하며, 이곳에 문제가 생길 경우 게임 정보가 최신으로 저장되지 않아 데이터가 롤백 되는 사건 사고가 발생하기도 한다.
※. 서버는 단순하게 하나만을 구성하지 않는다. 다양한 역할이 있듯이 서버 또한 월드, 전투, DB, 채팅등 역할에 따라 서버를 구분해서 개발 및 관리한다.
데이터 분배(브로드 캐스팅)
온라인 상에서 서버와 클라이언트 통신이 상호 통신한다면 내 주변 사람들은 나에 대한 정보를 실시간으로 확인할 수 없다. 예를 들어 내가 스킬을 사용했을 때 주변 다른 유저들이 나의 현재 정보를 알 수 없다면 나는 그냥 가만히 서있는 상태(또는 화면상에 보이지 않는 상태)가 된다. 이렇든 나와 그 주변 정보를 제공받기 위해 서버는 동일 정보를 일정 영역에 다수의 사용자에게 제공하는데 이를 브로드 캐스팅(Broadcasting)이라 한다. MMORPG를 비롯한 다중 접속 게임의 핵심 기술 중 하나로 동시에 네트워크에 연결된 다수의 호스트에게 동일 정보를 전송하는 기술을 뜻하지만 일반적으로 최적화를 위해 유저 중심 일정 범위내 대상에게만 한정적으로 적용한다.
※. 브로드 캐스팅 기술을 이용하여 우리는 온라인 상에서 내 주변 사람들의 정보를 실시간으로 확인할 수 있으며, 접속한 모든 사용자를 대상으로 하는 것이 아니라 내가 볼 수 있는 영역을 기준으로 제한된 공간에서 정보를 분배한다.

<특정 객체를 중심으로 범위내 모든 동일 객체에게 같은 정보를 제공하는 기능>
데이터 검증
서버는 실시간(또는 특정 주기) 클라이언트를 통해 발생된 정보를 검사하고 정상적인 데이터인지 확인하는 역할 또한 수행한다. 이러한 검증은 전투, 아이템 획득, 소모, 쿨 타임 등 게임 내 밸런스와 PLC에 영향을 주는 매우 주요 정보들의 변조를 막고 안정적인 게임 서비스를 위해 꼭 필요한 기능이다.
이러한 정보가 변조(해킹)될 경우 게임은 매우 큰 타격을 받게 될 뿐만 아니라 게임 이용자들 또한 큰 피해를 입을 수 있기 때문에 매우 중요한 서버 역할이다.
※. 과거에는 서버의 시뮬레이션 결과를 클라이언트가 반영하는 형태를 주로 사용했으나 조작감, 반응 속도, 패킷 최적화 이슈 해결을 위해 상호 시뮬레이션 및 검증 과정의 새로운 기술이 사용되고 있다.
▶ 패킷 변조
서버가 아무리 철저하게 통제한다 하더라도 클라이언트에 대한 의존도가 없을 수는 없다. 클라이언트의 잘못된(또는 변조된) 정보를 제공받았을 경우 서버가 이를 검증하지 못하면 현관문을 열어 놓고 외출하는 것과 같다. 기술 구현에 따라 다르지만 서버와 클라이언트 상호 시뮬레이션을 통해 교차 검증 시스템을 많이 사용하며 오차 범위내 정보만을 허용한다. 데이터 검증 과정에서 서버의 시뮬레이션 결과가 가장 높은 우선순위를 가진다.
▶ 서버 중심의 설계
게임의 안전과 검증을 위하여 서버에 모든 것(또는 너무 많은 것)을 의지할 경우 효율적이지 못한 프로젝트가 될 수 있다.
A. 비용 증가
-. 과거 PC온라인 게임의 경우 비용이 다소 적고 네트워크의 안정성이 보장되었지만 모바일, 무선 인터넷의 대중화로 인하여 네이트워크 지연, 통신 비용 증가등의 이슈가 생겨났다.
B. 정적인 게임
-. 서버 의존도가 높아질수록 클라이언트는 수동적으로 반응하며, 이는 게임의 전체 반응 속도를 느리게 하는 원인이 된다. 특이나 실시간 전투의 경우 네트워크 지연 현상은 유저는 치명적인 결함으로 인지하기 때문에 주의해야 한다.
※. 서버 중심 게임 설계의 경우 다양한 문제를 가지고 있지만 현재도 기술이 발전하고 있으며, 기획의 주요 업무 영역이 아니기 때문에 이정도 설명으로 마친다.
알아 두면 좋은 언젠가는 써먹을 용어
게임 업계는 개발 외 다양한 직군과 함께 일하며, 프로젝트 런칭 이후 마케팅과 사업 등 비 개발 직군과의 커뮤니케이션 및 각종 통계 데이터의 활용이 필요하다. 그리고 이러한 데이터는 일반적으로 평소에 접하기 어려운 단어(그리고 약어)를 사용하는 경우가 많기 때문에 기본적인 몇 가지 용어를 알고 있는 것이 좋다.
※. 아래 소개된 단어를 제외하고 많은 용어들이 사용된다. 혹시 자신이 이해하지 못한 용어가 있다면 인터넷 검색을 통해 자세한 정보를 확인할 수 있다. 검색을 이용할 경우 앞에 ‘게임’ 또는 ‘마케팅’을 접두어로 사용하자.
▶ DAU(Daily active users)
-. 일일 활성화 유저로 기준 시간에 앱을 다운로드 후 이용한 사용자를 파악하는 지표. 다른 말로는 일간 동시 접속 자 수(일간 동접)등으로 표현하기도 한다.
▶ ARPPU(Average Revenue Per Paying User)
-. 결제 유저당 평균 매출을 말하며, 특정 기간 동안 유저가 평균적으로 얼마나 많은 수익을 창출하는지 파악하는 측정 지표. 비슷한 지표로는 ARPU(Average Revenue Per User)가 있으며, 이는 일정 기간 동안 유저 한 명당 발생된 평균 수익을 의미한다.
▶ CPC(Cost Per Click)
-. 클릭당 비용으로 유료 온라인 광고를 클릭할 때마다 지불하는 금액을 의미하는 용어로 주로 마케팅과 관련하여 비용 대비 어느정도 효율을 가질 수 있는지 확인하는 지표로 사용된다.
▶ KPI(Key Performance Indicator)
-. 핵심 성과 지표로 개인 또는 조직의 성과(주로 매출) 달성에 필요한 객관적인 기준을 제시하는 지표. KPI 상황에 따라 프로젝트의 업데이트 계획이 수정되거나 BM이 추가되기도 한다.
▶ PLC(Product Life Cycle)
-. 제품 생명 주기를 뜻하며, 게임 업계에서는 내부 콘텐츠의 수명(게임 플레이 시간)을 지칭하는 용어로 많이 사용한다. 새로 개발된 콘텐츠를 완료하기까지 유저가 어느정도 시간을 소비하는지를 지칭.
▶ LTV(Life Time Value)
-. 사용자의 평생 가치를 뜻하는 말로 한 명의 유저가 서비스 이용에서부터 완전 게임에 이탈할 때까지 소요된 전체 기간(시간)에서 만들어 낸 가치를 확인하는 지표. 즉 사용자 기대 수익이 LTV에 해당한다. 게임에서는 프로젝트 오픈 이후 유저 잔존율과 발생된 매출 신규 사용자 유입을 이용하여 계산되며, 서비스 운용에 매우 중요한 요소이다.
▶ Retention
-. 유저 잔존율을 뜻하며, 앱 최초 이용 후 일정 기간이 지난 시점에 다시 앱을 사용하는 빈도를 확인하는 지표로 프로젝트 운용에 매우 중요한 지표로 사용된다. 유저 잔존율과 다양한 사용자 데이터를 기반으로 이탈 현상을 확인하고 프로젝트 개선 방안을 기획할 정도로 매우 중요한 지표이다.
여러분들의 구독과 공감(♥)은 저에게 큰 힘이 됩니다.
질문이 있으시면 방명록에 글을 남겨주세요.
'게임 기획 > 시스템 기획 이론' 카테고리의 다른 글
6. 게임 시스템 기획 개념잡기 (4) | 2024.01.05 |
---|---|
5. 게임 시스템 기획 이론 (2) | 2024.01.03 |
4. 게임 시스템 기획의 데이터적 관점 (2) | 2024.01.03 |
2. 실무 게임의 개발 과정 흐름 (0) | 2023.12.31 |
1. 게임 기획과 업무 영역 (0) | 2023.12.31 |