# 이전 저장 형태를 의도적으로 마이그레이션

> 이전 게임 버전에서 저장한 데이터를 읽는 방법을 정하고, 알려진 형식은 사용하기 전에 마이그레이션합니다.

- URL: https://oneshotgems.ai/ko/topics/local-storage-game-versioning
- 카테고리: 게임 개발자용
- 유형: 가이드
- 업데이트일: 2026년 10월 5일

저장 상태 테스트에서는 의도한 값이 지속되는지 여부를 묻습니다. 버전 관리는 다른 질문에 답합니다. 최신 게임 빌드가 이전 빌드에서 작성된 데이터를 읽으면 어떻게 되나요? 버전 1이 최고 점수를 숫자로 저장하고 버전 2가 프로필 개체를 저장하는 경우 이전 모양을 새로운 것처럼 읽으면 메뉴가 중단되거나 진행 상황이 자동으로 취소될 수 있습니다. 저장된 데이터 옆에 버전을 배치하고 알려진 이전 형태에 대한 명시적 마이그레이션을 작성합니다.

## 값을 작고 버전이 지정된 데이터 객체에 저장하세요

240과 같은 단순한 점수를 저장하는 대신 { version: 2, bestScore: 240, settings: { sound: true } }와 같은 JSON 개체를 저장하세요. 로드 시 텍스트를 구문 분석하고, 개체인지 확인하고, 필드를 사용하기 전에 해당 버전을 검사하세요. JSON.parse는 잘못된 JSON에 대해 SyntaxError를 발생시킬 수 있으므로 플레이어가 시작되기 전에 시작이 중지되도록 허용하는 대신 정의된 폴백을 사용하여 잘못된 형식의 텍스트를 처리하세요.

데이터 객체를 간결하게 유지하고 각 버전의 의미를 문서화하세요. 버전 번호만으로 유효성이 보장된다고 여기지 마세요. 버전 2로 표시된 값도 불완전하거나 유형이 잘못되었을 수 있습니다. 현재 빌드가 실제로 사용하는 필드를 검사하세요. 예를 들어 bestScore는 유한한 음이 아닌 숫자여야 하고, 사운드 설정은 불리언 값이어야 합니다.

## 지원하는 각 이전 형식에 대한 마이그레이션을 작성하세요

버전 1 마이그레이션은 이전 숫자를 새 데이터 객체로 변환하고 기본 설정을 채운 뒤 버전 2 형식으로 저장할 수 있습니다. 여러 과거 버전을 지원한다면 버전 1에서 2로, 이어서 2에서 3으로 순차적으로 마이그레이션하세요. 키 누락, 잘못된 JSON, 알 수 없는 미래 버전, 부분적으로 기록된 값을 포함해 각 테스트 사례를 독립적으로 확인하세요. 알 수 없는 데이터를 보존, 무시, 초기화 중 어떻게 처리할지 정하고 필요한 경우 복구 메시지를 표시하세요.

## 브라우저 저장소의 한계를 고려하세요

MDN은 localStorage를 브라우저 세션을 넘어 유지될 수 있는 출처별 데이터라고 설명합니다. 그러나 저장소를 사용할 수 있는지, 어떤 내용이 남는지는 계정 백업으로 보장되지 않습니다. 비밀이나 신뢰가 필요한 결정을 저장하지 마세요. 게임이 저장 데이터를 읽지 못하면 정의된 새 게임 상태를 허용하고, 매번 시작할 때 같은 실패한 마이그레이션을 다시 시도하지 마세요.

## 자주 묻는 질문

**형식이 변경되면 모든 저장 내용을 지워야 합니까?** 그것이 명시적인 제품 결정인 경우에만 가능합니다. 중요한 값을 안전하게 매핑할 수 있는 경우 소규모 테스트 마이그레이션을 통해 해당 값을 보존할 수 있습니다. 그렇지 않으면 명확한 대체를 정의하고 재설정을 설명하십시오.

**버전 필드가 localStorage 데이터를 안정적으로 만들어 주나요?** 아니요. 게임이 이를 마이그레이션하거나 거부할 수 있도록 예상되는 모양을 식별합니다. 데이터가 여전히 누락되거나, 형식이 잘못되었거나, 오래되었거나, 사용할 수 없을 수 있으므로 사용하기 전에 유효성을 검사하십시오.

## 궁금한 것을 더 찾아보세요

- [브라우저 게임에서 저장 상태 테스트](https://oneshotgems.ai/ko/topics/testing-game-save-state): 브라우저 게임이 무엇을 저장하는지, 무엇을 재설정하는지, 그리고 저장된 데이터가 누락되거나, 오래되었거나, 세션 간에 변경될 때 어떻게 작동하는지 확인하세요.
- [소규모 게임을 위한 회귀 테스트 루프](https://oneshotgems.ai/ko/topics/game-regression-testing): 메커니즘, 채점, 재시작 및 주변의 극단적인 사례에 초점을 맞춘 짧은 회귀 체크리스트를 사용하여 수정 후 작동하는 게임 루프를 보호하세요.

## 추가 읽을거리

- [MDN 로컬스토리지](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)
- [MDN JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)

---
대표 페이지: https://oneshotgems.ai/ko/topics/local-storage-game-versioning
