입력했던 할 일이 사라졌을 때 곧바로 사이트 데이터를 지우면 원인을 찾을 단서도 없어집니다. 먼저 다른 저장 공간을 보고 있는지, 저장 요청이 실패했는지, 저장된 내용을 읽지 못하는지를 나누세요. 이 글은 오늘의 세 가지 실습 앱을 기준으로 설명합니다. 계정 서버에서 복원하는 앱의 절차와는 다릅니다.

처음 확인할 것은 주소와 브라우저입니다

어제 사용한 브라우저와 프로필, 주소를 확인하세요. 같은 HTML이라도 다운로드한 파일과 웹사이트는 같은 저장소를 공유한다고 가정할 수 없습니다. HTTP와 HTTPS도 별개입니다. 비공개 창을 닫은 뒤에는 기록이 유지되지 않을 수 있습니다. 파일을 직접 여는 방식의 저장 동작은 브라우저마다 다를 수 있다는 점도 MDN localStorage 설명에 명시돼 있습니다. 확인일은 2026년 9월 22일입니다.

보이는 증상먼저 할 확인피할 행동
새 기기에서 빈 목록원래 기기·프로필에서 같은 주소 열기동기화가 된다고 가정하기
저장 불가 안내차단 설정과 현재 임시 사용 안내 읽기중요한 기록을 계속 입력하기
읽기 실패 안내남아 있는 텍스트와 재현 순서 별도 기록전체 사이트 데이터부터 삭제하기
두 탭의 내용이 다름마지막으로 저장한 탭 확인두 탭에서 번갈아 편집하기

이 실습에는 계정 동기화, 휴지통, 서버 백업이 없습니다. 없어진 데이터를 운영자가 되살려 줄 수 있는 구조가 아닙니다. 아직 화면에 내용이 남아 있다면 다른 메모에 옮겨 두고, 시험은 별도 로컬 복사본으로 진행하세요.

정상 저장부터 한 번만 재현합니다

  1. 실습 앱에 시험 A를 입력합니다.
  2. 체크박스를 선택해 완료 상태로 만듭니다.
  3. 새로고침하고 내용과 체크가 함께 남는지 봅니다.
  4. 앞뒤 공백이 있는 같은 문장을 다시 넣어 중복 항목이 생기지 않는지 확인합니다.

개발자는 개발자 도구의 Application → Local Storage에서 현재 출처를 선택하고 nts-today-three-v1 값을 확인할 수 있습니다. 위 입력의 저장 형태는 다음과 같습니다. 이 예시는 개인 기록이 아닌 시험 데이터입니다.

[{"text":"시험 A","done":true}]

문자열만 저장되고 done이 빠졌다면 완료 상태는 복원되지 않습니다. 정상 JSON이어도 앱이 기대하는 배열·문자열·불리언 구조인지 따로 검사해야 합니다.

손상된 기록을 빈 목록으로 바꾸는 것은 복구가 아닙니다

개발용 복사본에서만 저장값을 {broken처럼 잘못된 JSON으로 바꿔 보세요. 이 앱은 읽기 실패를 알리고 빈 목록으로 시작합니다. 화면이 멈추지 않도록 한 처리이며, 원래 내용을 찾아낸 것은 아닙니다. 현재 구현은 초기화 때 빈 배열을 다시 저장하므로 손상된 원문을 보존하는 도구도 아닙니다.

실서비스를 만든다면 손상된 원문을 덮어쓰기 전에 별도 보관하거나 사용자가 내보낼 수 있게 하는 설계가 필요합니다. 다만 원문에 개인정보가 있을 수 있으므로 오류 수집 서버로 무조건 보내는 방식은 피해야 합니다.

어디까지 확인했나요

2026년 9월 22일 로컬 Chrome 자동 검사에서 공백 정리·중복 차단·체크 상태의 새로고침 복원·손상된 JSON의 빈 목록 처리를 재현했습니다. 실제 사용자의 사라진 기록을 복구한 경험이나 모든 브라우저에서 같은 결과를 보장하는 설명은 아닙니다.

앱을 처음 구현하는 과정은 할 일 앱 완성형 프롬프트로, 문제가 반복되어 도움을 요청하려면 재현 가능한 오류 제보 작성법으로 이어집니다.