ETC/Tip

Tip :: 게임의 데이터 관련 이슈

VallistA2015. 6. 2. 11:57

 - 데이터 용량 이슈

 

 데이터가 많은 커넥트 게임의 경우 패킷이 계속 전달됨에 따라서 용량 최적화 이슈가 존재한다.

 보통 스마트폰 게임의 경우 웹서버로 서버를 구축해서 데이터만 전송하는 간단한 서버가 되는데, 전송하는 데이터들은 보통 Json으로 묶어서 전달하게 된다. (Json이 아니라 다르게 전달도 할 수 있다) 하지만 이렇게 전달하게 되면 용량의 이슈가 등장한다. Json의 경우 텍스트의 줄이 많아짐에 따라서 용량이 매우 증가하며, 용량이 증가하면 한 회에 전달되는 패킷량이 많아진다. 그러면 게임을 플레이하는 유저는 엄청 많은 요금 손해를 볼 것이고 이 것은 심각한 문제를 초래하는데 그에따라서 최적화를 해줘야한다.

 

먼저 Json 데이터 째로 보내지 않는다. Json째로 보내면 용량적 문제가 있기 때문에 비교적 가벼워 지는 바이너리를 이용한다.

서버에서 바이너리 데이터를 받고 그 바이너리 데이터를 해제 시킨후 그 데이터를 클라이언트에서 쓸 곳에 넣는다.

이러한 일련의 과정을 거치면 훌륭한 메모리 가공이 된다. 클라이언트 에서는 이것을 읽는 비용이 발생한다.


 - 데이터 파싱 이슈

 

 서버에서 받는 데이터를 최적화 해서 데이터 전송이 정말 원활해졌다.

 근데 이제 클라이언트에서 압축된 데이터를 풀어야 하는데 이 데이터를 압축하는 비용이 존재할 것이다.

 이 압축하는 비용의 경우를 생각해두고 xml 같이 구조체를 만들어서 넣어주는 것은 올바르지 않다.

 어떤 느낌이냐면. 데이터를 바로 메모리에 올리는 느낌처럼 소스코드를 짜면 될 것이다.

 

 근데 이제 메모리에 올리면 이슈가 또 존재하는데..

 

 - 데이터 메모리 암호화 이슈

 

 데이터를 메모리에 아이템을 생으로 올릴 경우에는 당연히 메모리를 조작하여 데이터를 만들어버리는 꼼수가 존재해서 여러가지 크랙으로 뚫리는 경우가 허다하다. 이러한 메모리를 보호하기 위해서 우리는 무엇을 해야할 것인가?

당연히 간단한 메모리 암호화를 하는게 필요하다.

 

http://www.slideshare.net/innover/revival-20109213

[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규

 

굉장히 도움이 될만한 PPT 라고 생각한다.

 

 - 로컬 데이터 암호화 이슈

 

보통 데이터를 세이브 하는 Android나 IOS의 경우 SQLite를 이용하여 하게되는데, 그 과정에서 암호화가 들어가야 한다.

암호화를 무엇을 사용하냐면 C#에서 지원하는 AES Rijndael를 사용해서 해도 성공적이다.

 

불과 몇년전 까지만 해도 Rijndael은 미국 국방부에서도 쓸 정도였으니... (말다함)

Rijndael은 간편하고 푸는속도도 빠르기 때문에 게임에 쓰길 권장한다.

 

데이터 -> 암호화 -> 암호화된 데이터를 저장

암호화된 데이터 -> 암호 해제 -> 데이터

 

생각나는대로 추가를 하도록 하자..

댓글

VallistA

병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.
현재는 이 블로그를 운영하지 않습니다.
vallista.kr 로 와주시면 감사하겠습니다!

자고 싶습니다. ㅠㅠ

Github      :: 링크

궁금한점 문의 주시면 답변드리도록 하겠습니다

VISITED

Today :

Total :

SNS

  • 페이스북아이콘
  • 카카오톡아이콘
  • 트위터아이콘

Lately Post

Lately Comment