~/csslab.dev/notes $ ls

// note

로컬스토리지 용량 초과 크래시 → 서버 이관 + 방어적 파싱

  • 대규모 데이터 표의 사용자별 설정(필터·정렬·컬럼 상태) 저장

증상

  • 설정이 쌓이자 앱이 크래시
  • 기기를 바꾸면 설정이 통째로 사라짐

원인

  • localStorage는 오리진당 약 5MB 한계 — 표 설정이 쌓이며 초과
  • 초과 시 쓰기가 QuotaExceededError로 실패하는데 예외를 잡지 않아 화면째 죽음
  • 저장이 브라우저·오리진에 갇혀 있어 기기 간 이동 불가

조치

  • 저장소를 서버 사용자 설정으로 전면 이관 — 용량 한계와 기기 종속을 함께 제거. 임시로 용량을 아끼는 대신 저장 위치 자체를 옮김
  • 레거시 로컬 값이 남아 있으면 서버로 옮기고, 저장 성공을 확인한 뒤에만 로컬 키를 지움 → 이관 중 유실 방지
  • 레거시·구버전 데이터는 형태가 깨져 있을 수 있어 type guard로 판별 + 파서가 예외 대신 항상 유효한 객체를 반환하도록. 누락 필드는 기본값으로 보정
  • 로컬/서버 존재 여부, 유효/무효 객체 등 경계 케이스를 테스트로 박아둠

결과

  • 용량 초과 크래시가 사라지고 설정이 기기를 따라다니게 됨
  • 깨진 데이터가 들어와도 기본값으로 흡수돼 화면이 죽지 않음