피드로 돌아가기
Soft-deleting Postgres rows without losing the URL slug
Dev.toDev.to
Database

슬러그 리네이밍을 통한 UNIQUE 제약 조건 유지 및 Soft-delete 구현

Soft-deleting Postgres rows without losing the URL slug

Daniel Rusnok2026년 4월 10일4intermediate

Context

Postgres의 UNIQUE NOT NULL 제약 조건과 Soft-delete 요구사항 간의 충돌 발생. 기존의 Partial Unique Index나 별도 아카이브 테이블 방식은 인덱스 관리 비용 증가 및 쿼리 복잡도 상승이라는 한계를 가짐.

Technical Solution

  • 아카이브 처리 시 slug 값 뒤에 Date.now() 기반의 타임스탬프를 추가하여 식별자 변경
  • 기존 slug의 Namespace를 즉시 해제함으로써 동일한 slug를 가진 새로운 데이터 INSERT 허용
  • 복잡한 Partial Index 없이 표준 UNIQUE 제약 조건을 유지하여 스키마 단순화 달성
  • 비즈니스 로직 6줄의 코드로 인프라 수준의 제약 사항을 애플리케이션 레이어에서 해결
  • revalidatePath 호출을 통한 ISR 캐시 갱신으로 데이터 변경 사항의 즉각적인 반영
  • 데이터 삭제 없이 상태값(status='archived') 변경을 통한 원본 데이터 보존 및 복구 가능성 확보

1. UNIQUE 제약 조건과 Soft-delete 충돌 시 Partial Index 도입 전 리네이밍 전략 검토

2. 타임스탬프 기반 접미사 추가로 분산 환경 내 식별자 충돌 가능성 최소화

3. 복구 로직 설계 시 기존 슬러그 점유 여부에 따른 충돌 처리 전략(예: 409 Conflict 반환) 수립

4. SEO 및 법적 유지 필요성에 따라 404 반환 또는 Tombstone 페이지 제공 여부 결정

원문 읽기