본문 바로가기

유니티/Performance

Unity - Json 비교

이번 글은 유니티 엔진에서 사용하는 Json들의 비교 논문을 보고 필요 내용들을 가져와봤다.

 

Unity Engine에서 게임 데이터 처리와 관리를 위해 자주 사용되는 JSON 라이브러리인 JsonUtility, LitJson, Newtonsoft.Json의 성능을 비교하였다.

 

가장 중요한 지표인 직렬화 및 역 직렬화 속도에 초점을 맞춰 애플리케이션을 구성하여 측정하였으며, PC와 Smart Phone 플랫폼에서 각 라이브러리의 성능을 평가하였다. 실험 결과, 기기 성능에 따라 각 라이브러리의 성능은 비례했으며, JsonUtility가 PC에서는 4배, 스마트폰에서는 5~6배 빠른 성능을 보였다. 하지만, JsonUtility는 기본적인 데이 터 타입만 지원하고 있어 추가 작업이 필요하며, 간단한 기능만 제공되기 때문에 작업 상황에 맞춰 JSON 라이브러리를 선택해야 한다. 본 연구에서 분석한 결과를 참고하여 게임 제작 시 효율적인 데이터 처리와 관리에 대한 자료로 활용되기를 기대한다.

 

데이터 교환 형식 중 하나인 JSON (JavaScript Object Notation)이 현재 게임 제작에서 많이 사용되고 있다. JSON은 경량화된 데이터 형식으로서, 구조화 된 데이터를 간결하고 효율적으로 표현하는데 적합한 포맷이 므로, 게임에서는 JSON을 사용하여 캐릭터 속성, 게임 설정, 임무 수행 등 다양한 정보를 저장하고 전달하는 데 활용된다.

 

효율적인 데이터 처리와 관리를 위한 방법으로 주로 JSON 라이브러리를 활용하는데, 이러한 다양한 종류의 JSON 라이브러리는 객체에 저장된 데이터를 출력을 위해 연속적인 데이터로 변환하는 직렬화직렬화된 데이터를 JSON 형식으로 변환하는 역 직렬화의 속도가 가장 중요한 요소 중 하나 이다. 또한, 각자의 특징과 성능을 가지고 있어, 게임 제작 시 에는 상황에 맞게 최적의 라이브러리를 선택해야 한다.

 

게임 제작에서 일반적으로 데이터 처리와 관리를 위한 방법으로 파일 시스템과 데이터베이스를 많이 사용하는데, 데이터베이스의 경우는 중요한 사용자 정보나 아이템 등을 관리 하는 데 사용되고, 간단한 게임 내의 객체에 대한 정보는 텍스트, 바이너리, XML, JSON과 같은 파일 시스템이 주로 사용된다. Binary, JSON, XML을 비교한 결과 파일 용량이 중요시되는 게임이나 데이터를 빈번하게 전송해야 하는 게임에서는 Binary 형식이 효율적이고, Save와 Load를 많이 해야 하는 게임에서는 JSON 형식이 효율적이라는 결론을 얻었다

 

JSON은 가벼운 DATA 교환 형식이다. 텍스트를 사용하기 때문에 사람이 쉽게 이해하고, 읽고 쓸 수 있는 장점이 있다.

 

1) JsonUtility Unity Engine 5.3버전부터 엔진 자체에 내장되어, JSON 데이터와 Unity 객체 간의 직렬화 및 역 직렬화를 위한 기본 기능을 제공하고 있다. 경량이며 쉽게 사용할 수 있는 특징이 있지만, 좀 더 복잡한 JSON 데이터 구조에 대해서는 제한이 있다.

2) LitJson Unity Engine 용으로 설계된 인기 있는 JSON 라이브러리 중 하나이며, 간단하고 쉽게 사용할 수 있음에도 가볍고 빠르 다. JSON 데이터의 직렬화 및 역 직렬화를 처리할 수 있고, JSON 데이터를 Unity 객체로 변환하거나 반대로 JSON 데이 터로 변환하는 기능을 제공한다.

3) Newtonsoft.Json .NET 기반의 JSON 라이브러리이며, 다양한 플랫폼에서 사용할 수 있고, 많은 기능을 제공하여 인기가 있다. Unity Engine과 함께 사용할 수도 있지만, 일부 추가 구성이 필요 할 때도 있다. JSON 데이터를 객체로 직렬화 및 역 직렬화하 는데 강력한 기능을 제공하며, Unity Engine의 Mono 프레 임워크와 호환성은 뛰어나지만, 때에 따라 약간의 성능 저하 가 있을 수 있다.

4) 기타 JSON 라이브러리 JSON 라이브러리는 프로그래밍 언어와 플랫폼에 따라 다 양하게 사용되는데, Python에서는 ‘json’ 라이브러리가 내장 되어 있어 주로 사용하고, Java에서는 Jackson, Gson을 많 이 사용하며, C#에서는 Newtonsoft.Json을 주로 사용한다. 이 외에도 다양한 라이브러리가 있고, 프로젝트의 개발환경과 요구 사항에 따라 일반적으로 적절한 라이브러리를 선택하여 사용한다.

 

Smart Phone 환경에서는 JsonUtility가 5~6배 정도 더 나은 성능을 보였고, PC 환경에서처럼 Newtonsoft.Json 이 LitJson에 비해 약간의 나은 성능을 보였다.

PC와 Smart Phone 환경 모두 JsonUtility가 LitJson과 Newtonsoft.Json 보다 4~6배 정도 빠르다는 결과를 얻었다.

게임 제작 시에 주로 사용되는 JSON의 용도 중 에 게임 데이터 저장 및 로드 하는 용도나 퀘스트 및 스토리 데이터 관리 용도와 같이 직렬화, 역 직렬화가 빈번하게 발생 하고, 속도가 중요한 용도에는 JsonUtility를 사용하는 것이 효과적이다.

 

결과

직렬화, 역 직렬화의 속도가 중요한 용도일 때는 JsonUtility를 사용하고, 기본적인 데이터 타입 이외에 가볍게 추가 기능이 필요한 용도로는 LitJson을 사용하며, 더 많은 기능이 필요할 때는 Newtonsoft.Json 을 최적화하여 사용하기를 제안한다.

 

----

 

게임이라는 컨텐츠는 시간이 지날 수록 더욱 방대하고 다양한 데이터를 저장하게 될 것 이다. 그랬을 때 우리는 항상 그랬듯이 최적의 방법을 찾기 마련이다.

우리는 데이터를 저장할 때 Json을 사용하는건 알고 있지만 이렇게 어떤게 더 좋은지 어떤걸 선택해야 더 나은지 생각해보진 않았을 것 이다. 

 

게임 개발 산업에 상용 엔진은 계속해서 발전하고, 더욱 편한 환경을 제공한다. 그랬을 때 우리는 이러한 정보들을 기반으로 최적의 게임을 만드는게 중요할 것 같다.

 

게임이라는 컨텐츠는 게임이 재밌다는 걸 기본으로 깔아도 유저가 다운로드를 받고, 초반 부정적인 경험을 겪으면 삭제하는 확률이 높기 때문에 최적화에 계속해서 신경쓰면 좋을 것 같다. 이상!!!

 

 

출처 : 디지털콘텐츠학회논문지

728x90