유니티/공통

유니티 - JSON을 이용하여 데이터를 저장해보자. #1 저장과 암호화

근본넘치는개발자 2024. 10. 1. 21:18

 

유니티에서 데이터를 저장하는 방식은

크게 PlayerPrefs와 JSON을 활용하는 방식 2가지로 나뉩니다.

 

PlayerPrefs의 경우 이전에 다루어 봤기에,

오늘은 JSON을 통해 데이터를 저장하는 방법에 대해 소개해 드리고자 합니다.

 

2024.09.13 - [유니티/공통] - 유니티 - PlayerPrefs를 이용하여 데이터를 저장해보자

 

 

JSON을 통해 데이터를 저장하는 방법을 소개하기에 앞서서

이 과정을 이해하려면

 

"직렬화(Serializable)/역직렬화(Deserialization)", "JSON"

 

에 대한 사전 지식이 필요합니다.

 

이전에 정리한 글이 있으니 링크를 참고해 주시면 감사하겠습니다.

 

2024.09.30 - [알아보자 시리즈] - 직렬화(Serialization)/ 역직렬화(Deserialization) (feat. JSON, CSV, XML, YAML) 에 대해 알아보자

 

왜 유니티에서 JSON을 사용하는가?

 

간단하게 요약하자면 PlayerPrefs는

데이터를 로컬에 저장해 보안에 취약하다는 문제점이 있었습니다.

 

그래서 이를 해소하고자 데이터를 JSON 형식으로 저장한 후,

서버와의 통신을 통해 데이터를 주고받음으로써

보안성을 높이는 방식으로 주로 사용합니다.

 

사용법 

유니티에서는 기본적으로 JSON을 코드에서 다루고 있는 것을 확인하실 수 있습니다.

 

 

 

 

데이터를 어떻게 저장할지 내용을 클래스로 간단하게 만들어 주었습니다.

PlayerData 클래스 위에 Serializable 속성을 사용한 것을 확인할 수 있는데요,

이는 직렬화한 정보를 인스펙터 창에서 확인/수정할 수 있도록 도와주는 역할을 합니다.

 

Serializeble은 클래스 뿐 아니라 구조체에도 사용이 가능합니다.

 

추가로 SerializeField 속성을 활용하여

private 또는 protected 필드를 직렬화하여 인스펙터 창에 노출시킬 수도 있습니다.

 

사전 준비가 끝났으므로 이제 JSON을 활용해 데이터를 다뤄보겠습니다.

 

JSON 파일 로드, 세이브

 

데이터를 JSON의 형식으로 바꾸는 방법은

JsonUtility.ToJson()을,

 

JSON을 다시 데이터 형식으로 바꾸는 방법은

JsonUtility.FromJson<타입>()을 사용하면 손쉽게 가능합니다.

 

아래 내용은 데이터 저장과 불러오는 코드 내용 입니다.

 

 

 

지금까지는 데이터를 JSON 형식의 파일로 저장하는 내용을 다뤘습니다.

그런데 여기까지만 진행하면 타인이 외부에서 파일에 접근해

수정할 수 있는 가능성이 생깁니다.

 

그래서 이를 알아보기 어렵게 암호화하는 내용을 거치겠습니다.

 

암호화를 하는 방법은 여러 가지가 있겠지만

오늘은 그중 XOR을 활용한 암호화 기법에 대해 소개해 드리고자 합니다.

 

XOR ? 

두 개의 입력에 대해 입력값이 같으면 0, 다르면 1을 출력하는 방식입니다.

이렇게만 말씀드리면 이해가 안 가실 것 같아서 예시를 가져왔습니다.

 

'A'를 키 'K'로 암호화해 보겠습니다.

  1. 'A'의 ASCII 값은 65이고, 이진수로 01000001 입니다.
  2. 'K'의 ASCII 값은 75이고, 이진수로 01001011 입니다.

이 두 이진수를 XOR 연산하면:

 

A: 01000001

K: 01001011

 

XOR: 00001010

 

결과인 00001010은 10진수로 10이며, 이는 ASCII에서 줄바꿈(LF) 문자입니다.

이렇게 XOR 연산을 사용하여 'A'를 'K'로 암호화하면 줄바꿈 문자가 됩니다.

복호화도 같은 과정을 거칩니다:

 

암호문: 00001010

K: 01001011

 

XOR: 01000001 (다시 'A'가 됩니다)

 

단점

키가 노출되면 쉽게 해독될 수 있습니다.

 

 

코드 예

 

아래는 암호화한 값을 넣어 저장과 불러오는 내용의 코드입니다.

Keypassword는 임의로 아무값이나 넣어주었습니다.

 

 

오늘은 간단하게 데이터를 JSON 형식으로 저장하는 방법과

암호화하는 방법에 대해 다뤘습니다.

 

글에서는 XOR을 활용하여 비교적 간단하게 암호화를 진행해 보았습니다.

 

실제 프로젝트에 적용하실 때는 상황에 맞게 응용하여

더 복잡한 암호화를 만들거나 에셋 등을 활용하여 진행하시는 걸 권합니다.  

아마 이대로 본 프로젝트에 적용하여 출시한다면 장담하건대 금방 뚫릴 것입니다.

 

참고한(혹은 참고하면 좋을) 자료 

 

https://www.youtube.com/watch?v=abwOVy5qTO4

 

https://youtu.be/_memCJ487u0?si=LqYjGaHB9y8C3LcE

https://youtu.be/kEu_AQ_Es-8?si=LkJXtMMvjgg4Palk