[유니티] 유저 데이터 저장 방법 고민

sobokii·2024년 3월 20일
0

유니티

목록 보기
6/11

1. 문제 상황

초기엔 간단한 숫자 몇개 정도를 저장할 것이라 생각해
PlayerPrefs 기능을 사용 중이었으나,
저장해야할 데이터가 복잡해지면서 Dictionary등 PlayerPrefs에서 직접 지원하지 않는 형태의 자료 저장이 필요해졌다.
(List로 변환하고 어쩌고 저쩌고... 하면 되긴 하지만 좀 더 근본적인 해결책을 찾아보기로 함)

2. System.IO 기능 사용

File.WirteAllText(path, json 파일)
File.ReadAllText(path)

이 메서드를 사용하기로 하였다.
애초에 알고나니 이게 더 간편한 방법인 것 같은데 애초에 왜 PlayerPrefs를 선택했던걸까?

그것은... 그게 유명해서.
그렇담 뭐가 좋은 건지 고민해보자

3. 비교 분석

PlayerPrefs

장점:

간편함: 간단한 API로 쉽게 사용할 수 있으며, 초기 설정이나 추가적인 구성 없이 바로 사용할 수 있습니다.
플랫폼 독립성: 다양한 플랫폼(Windows, macOS, iOS, Android 등)에서 동일하게 작동하여, 플랫폼 간 이식성이 좋습니다.
적합한 사용 사례: 게임 설정, 소량의 사용자 선호도 데이터, 간단한 진행 상황 등 비교적 소규모의 데이터를 저장하기에 적합합니다.
단점:

보안 문제: 데이터가 암호화되지 않아 사용자나 다른 앱에 의해 쉽게 접근 및 수정될 수 있습니다.
데이터 용량 제한: 대량의 데이터나 복잡한 데이터 구조를 저장하기에는 적합하지 않습니다.
데이터 타입 제한: 기본적으로 string, int, float 타입만 저장할 수 있으며, 복잡한 데이터 구조는 추가 처리 없이는 저장할 수 없습니다.

System.IO 파일 시스템 저장
장점:

유연성: 거의 모든 타입의 데이터를 저장할 수 있으며, 복잡한 데이터 구조도 직렬화를 통해 쉽게 저장하고 불러올 수 있습니다.
데이터 용량: 대용량 데이터를 저장할 수 있으며, 게임의 저장 파일이나 사용자 생성 콘텐츠 등을 관리하기에 적합합니다.
보안: 필요한 경우 데이터를 암호화하여 보안을 강화할 수 있습니다.
단점:

구현 복잡성: PlayerPrefs에 비해 사용 방법이 복잡하며, 파일 경로 관리, 오류 처리, 데이터 직렬화/역직렬화 등을 직접 구현해야 합니다.
플랫폼 특성 고려: 파일 시스템의 경로나 접근 권한 등이 플랫폼마다 다를 수 있어, 플랫폼별 특성을 고려한 추가 작업이 필요할 수 있습니다.
데이터 무결성 관리: 사용자에 의한 데이터 변경이나 파일 손상의 가능성을 고려한 추가적인 검증 로직이 필요할 수 있습니다.

4. 결론

비교해보면 결국 데이터 보안이 되지 않는 것은 똑같은 단점
플랫폼간 이식성이 좋다는데 현재 프로젝트는 PC만을 타겟으로 하고 있으니 PlayerPrefs의 장점 상쇄
다양한 자료형을 저장할 수 있다는 것은 System.IO의 장점

그리하여 현재 프로젝트에는 System.IO가 비교 우위에 있다고 판단!

이제 코드 수정하자 ㅎㅎ

profile
직장 구하고 있습니다.

0개의 댓글