
목차
## ❶ 트러블슈팅
① manifest.json
② 깃헙 롤백 - 체리픽
## ❷ 새로 알게된 내용
① JsonUtility
## ❸ Git 정복하기
## ❹ 다음 시도 과제
❶ 트러블 슈팅
< 기존 코드 >
using System.IO;
using Newtonsoft.Json;
using UnityEngine;
// 저장/불러오기
public static class SaveManager
{
private static string savePath = Application.persistentDataPath + "/save.json"; // 저장 경로
// 저장
public static void Save(GameProgressData data)
{
string json = JsonConvert.SerializeObject(data, Formatting.Indented);
File.WriteAllText(savePath, json);
}
// 불러오기
public static GameProgressData Load()
{
if (!File.Exists(savePath)) return null; // 파일 없으면 null 반환 (예외 방지)
string json = File.ReadAllText(savePath);
return JsonConvert.DeserializeObject<GameProgressData>(json);
}
}
① manifest.json 관련 트러블슈팅 정리
문제
- 외부 패키지 Newtonsoft.Json for Unity 설치 중 오류 발생
- manifest.json에 "com.jillejr.newtonsoft.json-for-unity": "13.0.103" 추가했지만
- 다음과 같이 정상적으로 설치되지 않았다는 문구가 뜨면서 오류 발생
Package [com.jillejr.newtonsoft.json-for-unity@13.0.103] cannot be found
- 수동 설치 위해 .tar.gz 파일 다운로드 후 "file:Packages/경로" 방식 시도했으나
- using Newtonsoft.Json; 를 실행하기 위한 적합한 방법은 아니었음
pgsql
복사편집
package.json not found
시도한 방법
- Unity Package Manager 수동 설치 경로 지정 (file: 방식)
- GitHub 릴리즈 페이지에서 다양한 .tgz, .tar.gz, .zip 다운로드 후 시도
- 경로 오류 및 package.json 누락으로 Unity에서 패키지 인식 실패
최종 해결
- Unity 내장 JsonUtility를 활용한 방식으로 변경
- 외부 패키지 필요 없이 Json 변환 기능 정상 구현
알게 된 점
| Newtonsoft.Json | Unity에서 외부 패키지로 따로 설치해야 하는 JSON 변환 라이브러리 |
| manifest.json | Unity 프로젝트에서 사용하는 패키지 목록 및 버전 관리 파일 |
| 문제 원인 | Unity에서 수동 패키지 설치 시 package.json 파일이 없는 압축 파일 사용 |
| 해결 포인트 | Unity 기본 내장 기능인 JsonUtility는 외부 설치 없이 사용 가능 |
| 대체 이유 | 빠르고 안전하게 기본 기능으로 문제 해결하기 위해 |
DataManager.cs 정리
| PlayerData | 플레이어 체력, 인벤토리 저장용 | Serializable |
| GameData | 현재 레벨, 퍼즐 클리어 상태 + PlayerData 포함 | Serializable |
| DataManager | GameData를 담고 관리하는 실질적 저장소 | MonoBehaviour + 싱글톤 |
JSON(직렬화(텍스트화)) 저장을
-> PlayerData와 GameData에 [Serializable] 붙이기
② 체리픽 이용해서 롤백하기
🍒 체리픽이란?
특정 브랜치에서 원하는 커밋(commit)만 골라 다른 브랜치에 적용하는 기능
문제
- main 브랜치를 dev 브랜치에 병합함으로써,
dev 브랜치의 기존 작업 내용이 초기화(덮어쓰기) 되는 문제가 발생
시도한 방법
- git reset --hard 및 git reset --hard HEAD를 통해 과거 상태로 되돌리기 시도
→ 그러나 이미 덮어쓴 커밋 기준이라 복구 불가
최종 해결

- 라이더 우측 하단 "변경 내역"에서 우클릭 > 체리픽 가능 혹은 🔽
- git log --all을 통해 이전 커밋 해시 탐색
- 복구가 필요한 커밋을 git cherry-pick <해시> 명령어로 선택하여
→ 현재 브랜치에 필요한 커밋만 선택적으로 복구
알게 된 점
| git log --oneline -all | 모든 브랜치의 커밋 로그를 한 줄씩 요약해서 보여줌 → 커밋 해시 + 메시지만 출력, 브랜치 구분도 확인 가능 |
| git reset --hard | 작업 중인 파일과 커밋 상태를 마지막 커밋 상태로 강제로 되돌림 → 수정한 파일, 스테이징 된 파일 전부 사라짐 (주의!) |
| git push | 로컬 커밋을 원격 저장소(GitHub 등)로 업로드 |
| git add . | 현재 폴더 이하 모든 변경 파일을 스테이징 영역에 추가 → "이 파일들 커밋할 거야"라고 지정 |
| git commit -m "Project Finish" | 스테이징한 파일들을 하나의 커밋으로 기록 → "Project Finish"라는 메시지로 저장 |
| git checkout -b ev | 현재 브랜치에서 새로운 브랜치 ev를 생성하고 이동 → git branch ev + git checkout ev 동시 실행 |
| :wq | Vim(vi 에디터)에서 "저장하고 종료" → :w = write(저장), :q = quit(종료) |
커밋 해시를 알면 대부분의 실수는 완전히 복구 가능하다.
❷ 새로 알게된 내용
JsonUtility
Unity가 제공하는 내장 JSON 직렬화 도구
기능
- 객체 ↔ JSON 문자열 간 변환 가능
- 간단한 Save/Load에 적합
- Unity 프로젝트 내에서 별도 설치 없이 바로 사용 가능
사용법 예시
string json = JsonUtility.ToJson(myObject); // 객체 → JSON 문자열
MyClass obj = JsonUtility.FromJson<MyClass>(json); // JSON 문자열 → 객체
주의사항
- Dictionary는 지원하지 않음
- 반드시 [System.Serializable] 속성이 클래스에 붙어 있어야 함
- public 필드만 직렬화 대상
❸ Git 정복하기
Git 주요 명령어
| push | 로컬 → 원격 | 서버 (GitHub 등) |
내 로컬 브랜치의 커밋을 원격 저장소로 업로드 | git push origin main |
병합 ❌ |
| pull | 원격 → 로컬 | 로컬 브랜치 | 원격 브랜치에서 가져온 커밋을 로컬 브랜치에 자동 병합 |
git pull origin main |
자동 병합 |
| merge | 로컬 → 로컬 | 로컬 브랜치끼리 | 두 로컬 브랜치를 병합 (ex: feature → main) | git merge feature | 수동 병합 |
| fetch | 원격 → 로컬 | 원격 정보만 | 원격 브랜치의 최신 정보를 가져오지만 병합은 안 함 |
git fetch origin | 병합 ❌ |
| commit | 로컬 → 로컬 |
로컬 저장소 | 변경사항을 로컬에 저장 (버전 기록) | git commit -m "설명" | 병합 ❌ |
1. git push
- 내 로컬 브랜치의 커밋 → GitHub 등 원격 서버에 반영
- "업로드"의 개념
- 병합 없음, 그냥 반영
2. git pull
- 원격 브랜치의 변경 사항을 로컬로 가져오고, 내 브랜치에 병합까지 자동 수행
- fetch + merge 를 한 번에 수행
3. git merge
- 다른 로컬 브랜치의 커밋을 현재 브랜치에 통합
- 예: main에서 git merge feature → feature의 변경을 main에 병합
4. git fetch
- 원격 저장소의 최신 커밋 정보만 가져옴 (병합 X)
- 안전하게 비교하거나 변경 내용 확인하고 싶은 경우 사용
- fetch 후 diff, merge로 분리 관리 가능
❹ 다음 시도 과제
- Shell 단축키 익히기
- 자주 쓰는 명령어 위주로 연습
- 히스토리 탐색, 자동완성 등 활용
- Unity 파일 정리하기
- 개인 폴더에서 실사용하는 파일만 선별
- 전체 프로젝트 폴더로 구조 이동 및 정리
- Git 이슈 Open/Close 사용해보기
- 이슈 생성 및 마감 과정 실습
- 커밋 메시지에서 Fixes #이슈번호 사용법 익히기