Backend & Distributed Systems
새로고침에 복구되는 클라이언트 타이머
브라우저 새로고침 뒤에도 실행 시간을 복구하고 하나의 요청 ID를 유지해 중복 완료 기록을 막는 타이머 설계입니다.
타이머는 단순한 화면 상태가 아니라 사용자의 실행 의도다. 페이지를 새로고침했다고 경과 시간이 초기화되거나 완료 기록이 두 번 생겨서는 안 된다.
남은 초를 매초 쓰면 불필요한 저장이 늘고 백그라운드 탭 정지 때 오차가 생긴다. 클라이언트는 시작 시각, 전체 시간, 학습 단위, 요청 ID를 저장한다. 복구할 때 현재 시각과 차이로 남은 시간을 계산한다.
{"requestId":"session-generated-on-start","unit":"study-unit","startedAt":"2026-09-13T10:00:00.000Z","durationSeconds":1800}응답을 잃고 다시 로드해도 같은 ID로 완료를 전송해야 서버가 중복을 알아본다. 성공 응답을 받은 뒤에만 로컬 상태를 지운다. 저장 형식은 읽기 전에 검증하고 잘못된 JSON, 음수 시간, 사라진 단위는 안전하게 폐기한다.
브라우저 검증은 시작, 새로고침, 표시 복구, 완료를 확인했다. API 테스트는 동일 재시도와 의미 충돌을 다뤘다. 기기 간 이어하기를 추가하려면 인증된 서버 lease와 동시 타이머 정책이 필요하다.
관련 글
Backend & Distributed Systems
CI 디스패치로 연결한 이벤트 기반 비공개 초안
승인된 로컬 원문만 정책으로 거르고 비공개 초안을 만든 뒤 원본을 노출하지 않고 CI를 호출하는 이벤트 경계입니다.
Backend & Distributed Systems
D1 위에 학습 도메인 원장 확장하기
실행 중인 할 일 앱을 갈아엎지 않고 목표, 계획, 시도, 오답, 복습, 증거 원장을 단계적으로 추가한 사례입니다.
Backend & Distributed Systems
삭제 후 재생성을 막는 툼스톤 설계
사용자가 삭제한 기본 항목을 영구 삭제하면서 앱 초기화 로직이 같은 항목을 되살리지 못하게 하는 데이터 설계입니다.