본문으로 바로가기

Backend & Distributed Systems

삭제 후 재생성을 막는 툼스톤 설계

사용자가 삭제한 기본 항목을 영구 삭제하면서 앱 초기화 로직이 같은 항목을 되살리지 못하게 하는 데이터 설계입니다.

작성 약 1분 읽기
#backend#sqlite#deletion#data-integrity

초기 데이터는 첫 실행에 유용하지만 사용자 의도와 충돌할 수 있다. 사용자가 기본 할 일을 삭제했는데 재시작 때 행이 없다는 이유로 다시 삽입되는 문제가 대표적이다. 화면의 레코드는 영구 삭제하고, 해당 기본값만 다시 만들지 말라는 최소 표식을 별도로 남긴다.

Diagram loads as it approaches the viewport.

모든 필드에 soft delete를 적용하면 사용자가 없애려던 메모까지 남는다. 이 설계는 할 일 행을 지우고 제목 또는 고정 seed ID와 삭제 시각만 저장한다. 초기 삽입은 살아 있는 행과 툼스톤이 모두 없을 때만 실행한다.

삭제와 툼스톤 삽입은 하나의 트랜잭션이어야 한다. 두 작업 사이에 프로세스가 중단되면 다음 시작 때 항목이 복구될 수 있기 때문이다. 규모가 커지면 문구가 바뀌어도 유지되는 seed ID를 쓰는 편이 안전하다.

종단간 검증은 고유한 임시 할 일을 등록하고, 새로고침하고, 상태와 메모를 수정하고, 삭제한 뒤 다시 조회했다. 전체 개수는 원래 값으로 돌아왔고 기존 학업 항목은 유지됐으며 툼스톤만 남았다. 기본값 재생성 경로가 없는 일반 사용자 데이터에는 이 패턴을 불필요하게 적용할 이유가 없다.

관련 글