입력했던 할 일이 사라졌을 때 곧바로 사이트 데이터를 지우면 원인을 찾을 단서도 없어집니다. 먼저 다른 저장 공간을 보고 있는지, 저장 요청이 실패했는지, 저장된 내용을 읽지 못하는지를 나누세요. 이 글은 오늘의 세 가지 실습 앱을 기준으로 설명합니다. 계정 서버에서 복원하는 앱의 절차와는 다릅니다.
처음 확인할 것은 주소와 브라우저입니다
어제 사용한 브라우저와 프로필, 주소를 확인하세요. 같은 HTML이라도 다운로드한 파일과 웹사이트는 같은 저장소를 공유한다고 가정할 수 없습니다. HTTP와 HTTPS도 별개입니다. 비공개 창을 닫은 뒤에는 기록이 유지되지 않을 수 있습니다. 파일을 직접 여는 방식의 저장 동작은 브라우저마다 다를 수 있다는 점도 MDN localStorage 설명에 명시돼 있습니다. 확인일은 2026년 9월 22일입니다.
| 보이는 증상 | 먼저 할 확인 | 피할 행동 |
|---|---|---|
| 새 기기에서 빈 목록 | 원래 기기·프로필에서 같은 주소 열기 | 동기화가 된다고 가정하기 |
| 저장 불가 안내 | 차단 설정과 현재 임시 사용 안내 읽기 | 중요한 기록을 계속 입력하기 |
| 읽기 실패 안내 | 남아 있는 텍스트와 재현 순서 별도 기록 | 전체 사이트 데이터부터 삭제하기 |
| 두 탭의 내용이 다름 | 마지막으로 저장한 탭 확인 | 두 탭에서 번갈아 편집하기 |
이 실습에는 계정 동기화, 휴지통, 서버 백업이 없습니다. 없어진 데이터를 운영자가 되살려 줄 수 있는 구조가 아닙니다. 아직 화면에 내용이 남아 있다면 다른 메모에 옮겨 두고, 시험은 별도 로컬 복사본으로 진행하세요.
정상 저장부터 한 번만 재현합니다
- 실습 앱에
시험 A를 입력합니다. - 체크박스를 선택해 완료 상태로 만듭니다.
- 새로고침하고 내용과 체크가 함께 남는지 봅니다.
- 앞뒤 공백이 있는 같은 문장을 다시 넣어 중복 항목이 생기지 않는지 확인합니다.
개발자는 개발자 도구의 Application → Local Storage에서 현재 출처를 선택하고 nts-today-three-v1 값을 확인할 수 있습니다. 위 입력의 저장 형태는 다음과 같습니다. 이 예시는 개인 기록이 아닌 시험 데이터입니다.
[{"text":"시험 A","done":true}]
문자열만 저장되고 done이 빠졌다면 완료 상태는 복원되지 않습니다. 정상 JSON이어도 앱이 기대하는 배열·문자열·불리언 구조인지 따로 검사해야 합니다.
손상된 기록을 빈 목록으로 바꾸는 것은 복구가 아닙니다
개발용 복사본에서만 저장값을 {broken처럼 잘못된 JSON으로 바꿔 보세요. 이 앱은 읽기 실패를 알리고 빈 목록으로 시작합니다. 화면이 멈추지 않도록 한 처리이며, 원래 내용을 찾아낸 것은 아닙니다. 현재 구현은 초기화 때 빈 배열을 다시 저장하므로 손상된 원문을 보존하는 도구도 아닙니다.
실서비스를 만든다면 손상된 원문을 덮어쓰기 전에 별도 보관하거나 사용자가 내보낼 수 있게 하는 설계가 필요합니다. 다만 원문에 개인정보가 있을 수 있으므로 오류 수집 서버로 무조건 보내는 방식은 피해야 합니다.
어디까지 확인했나요
2026년 9월 22일 로컬 Chrome 자동 검사에서 공백 정리·중복 차단·체크 상태의 새로고침 복원·손상된 JSON의 빈 목록 처리를 재현했습니다. 실제 사용자의 사라진 기록을 복구한 경험이나 모든 브라우저에서 같은 결과를 보장하는 설명은 아닙니다.
앱을 처음 구현하는 과정은 할 일 앱 완성형 프롬프트로, 문제가 반복되어 도움을 요청하려면 재현 가능한 오류 제보 작성법으로 이어집니다.