Backend & Distributed Systems
삭제 후 재생성을 막는 툼스톤 설계
사용자가 삭제한 기본 항목을 영구 삭제하면서 앱 초기화 로직이 같은 항목을 되살리지 못하게 하는 데이터 설계입니다.
초기 데이터는 첫 실행에 유용하지만 사용자 의도와 충돌할 수 있다. 사용자가 기본 할 일을 삭제했는데 재시작 때 행이 없다는 이유로 다시 삽입되는 문제가 대표적이다. 화면의 레코드는 영구 삭제하고, 해당 기본값만 다시 만들지 말라는 최소 표식을 별도로 남긴다.
모든 필드에 soft delete를 적용하면 사용자가 없애려던 메모까지 남는다. 이 설계는 할 일 행을 지우고 제목 또는 고정 seed ID와 삭제 시각만 저장한다. 초기 삽입은 살아 있는 행과 툼스톤이 모두 없을 때만 실행한다.
삭제와 툼스톤 삽입은 하나의 트랜잭션이어야 한다. 두 작업 사이에 프로세스가 중단되면 다음 시작 때 항목이 복구될 수 있기 때문이다. 규모가 커지면 문구가 바뀌어도 유지되는 seed ID를 쓰는 편이 안전하다.
종단간 검증은 고유한 임시 할 일을 등록하고, 새로고침하고, 상태와 메모를 수정하고, 삭제한 뒤 다시 조회했다. 전체 개수는 원래 값으로 돌아왔고 기존 학업 항목은 유지됐으며 툼스톤만 남았다. 기본값 재생성 경로가 없는 일반 사용자 데이터에는 이 패턴을 불필요하게 적용할 이유가 없다.
관련 글
Backend & Distributed Systems
용량 제한과 잠금을 갖춘 주간 계획 API
마감을 보호하고 주간 시간과 하루 항목 수를 제한하며 승인한 계획을 잠그는 결정론적 주간 계획 API입니다.
Backend & Distributed Systems
충돌을 감지하는 멱등 세션 저장 API
응답 유실 뒤에도 중복 없이 재시도하고 의미가 달라진 요청은 충돌로 차단하는 세션 저장 API 설계를 설명합니다.
Backend & Distributed Systems
CI 디스패치로 연결한 이벤트 기반 비공개 초안
승인된 로컬 원문만 정책으로 거르고 비공개 초안을 만든 뒤 원본을 노출하지 않고 CI를 호출하는 이벤트 경계입니다.