Skip to content

Story: Product 테이블 스키마 변경 (Soft Delete)

메타

항목
Story IDE-09-S-01
EpicE-09 미사용 상품 정리
상태ready-for-dev
우선순위P0
규모S
담당 개발자BE (DB)

사용자 스토리

As a 시스템,
I want 상품 삭제 상태를 추적하고 싶다,
So that Soft Delete와 복구 기능을 지원할 수 있다.


수락 기준 (Acceptance Criteria)

AC-01: 스키마 변경

항목내용
GivenProduct 테이블에
When마이그레이션을 실행하면
Thendeleted_at, deleted_by 컬럼이 추가된다

AC-02: 인덱스 추가

항목내용
Givendeleted_at 컬럼에
When인덱스를 생성하면
ThenSoft Delete 필터 쿼리 성능이 보장된다

AC-03: 기본값 설정

항목내용
Given기존 상품 데이터에
Whendeleted_at이 NULL이면
Then삭제되지 않은 상품으로 조회된다

태스크 분해

Task 1: 스키마 변경

  • [ ] 1.1: deleted_at 컬럼 추가
    sql
    ALTER TABLE Product ADD COLUMN deleted_at DATETIME NULL;
  • [ ] 1.2: deleted_by 컬럼 추가
    sql
    ALTER TABLE Product ADD COLUMN deleted_by VARCHAR(50) NULL;
    -- 'seller': 셀러 직접 삭제
    -- 'system': 시스템 자동 삭제

Task 2: 인덱스 생성

  • [ ] 2.1: deleted_at 복합 인덱스
    sql
    CREATE INDEX idx_product_deleted ON Product (seller_id, deleted_at);
  • [ ] 2.2: 기존 인덱스 영향도 분석

Task 3: 마이그레이션

  • [ ] 3.1: 마이그레이션 스크립트 작성
  • [ ] 3.2: 롤백 스크립트 준비
  • [ ] 3.3: 스테이징 환경 테스트

개발 노트

스키마 변경 상세

sql
-- Product 테이블 변경
ALTER TABLE Product
  ADD COLUMN deleted_at DATETIME NULL,
  ADD COLUMN deleted_by VARCHAR(50) NULL;

-- 인덱스 추가 (셀러별 삭제 상품 조회용)
CREATE INDEX idx_product_deleted ON Product (seller_id, deleted_at);

-- 영구 삭제 배치용 인덱스
CREATE INDEX idx_product_deleted_at ON Product (deleted_at);

주의사항

⚠️ Product 테이블 특성
• 658만 row, 8.9GB
• Full scan 절대 금지
• ALTER TABLE 시 Online DDL 사용 권장
• 피크 타임 피해서 작업

이벤트 로깅

이벤트파라미터
schema_migration_startedtable_name, columns
schema_migration_completedtable_name, duration

생성일: 2026-01-20

장사왕 Product Team