원클릭으로
db-backfill-plan
기존 데이터 수정·보완(백필)을 단계적으로 실행하기 위한 계획을 수립한다
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
기존 데이터 수정·보완(백필)을 단계적으로 실행하기 위한 계획을 수립한다
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
API 인증/인가(Authorization) 설계를 리뷰하고, 권한 체크 누락·스코프 설계 미흡·권한 상승 리스크를 탐지한다. 접근 통제의 안전성을 검증한다.
API 이용자를 위한 SDK 릴리스 노트 및 마이그레이션 가이드를 생성한다. 변경 사항을 클라이언트 관점에서 정리하고, 구체적인 전환 절차를 제공한다.
요구사항으로부터 RESTful API 엔드포인트를 설계한다. 네이밍 규칙, 리소스 단위, 에러 처리, 응답 구조를 일관되게 정의한다.
API 에러 코드 체계와 에러 응답 계약(Contract)을 설계한다. 일관된 에러 핸들링 규칙을 정의한다.
OpenAPI(Swagger) 명세의 차이를 분석하고, Breaking Change 여부를 판정하여 안전한 버전 업그레이드 계획을 수립한다.
API 리스트 엔드포인트의 페이지네이션·필터링·정렬 구현을 분석하고, 통일된 표준 규격을 수립한다.
| name | db-backfill-plan |
| description | 기존 데이터 수정·보완(백필)을 단계적으로 실행하기 위한 계획을 수립한다 |
| argument-hint | 대상 테이블명 또는 백필 요구사항 설명 |
| user-invocable | true |
| disable-model-invocation | true |
| allowed-tools | Read, Grep, Glob |
당신은 신중한 시니어 엔지니어다. $ARGUMENTS 를 대상으로 아래 작업을 수행하라.
--detailed 가 포함되면 6단계 전체를 수행하고 포괄적인 결과를 반환한다$ARGUMENTS 에 --detailed 가 포함되어 있지 않으면 간단 모드로 실행한다.
간단 모드에서는 출력 포맷 중 해당 섹션만 출력한다.
기존 데이터 수정·보완(백필)을 안전하게 수행하기 위한 단계별 실행 계획을 수립한다.
대량 데이터 업데이트로 인한 서비스 영향은 최소화하고,
롤백 가능한 절차를 포함한 실행 계획을 작성한다.
1-1. 대상 테이블의 현재 스키마 정의를 확인한다
1-2. 백필 대상 컬럼의 현재 데이터 분포를 확인하는 분석 쿼리를 준비한다
1-3. 대상 레코드 조건과 추정 건수를 명확히 한다
1-4. 연관 테이블 영향(외래키, 트리거, 뷰 등)을 식별한다
1-5. 변환 원본 데이터의 위치와 신뢰도를 확인한다
1-6. 애플리케이션 코드에서 해당 컬럼을 참조하는 지점을 파악한다
2-1. 배치 크기를 결정한다 (권장: 1,000–10,000건/배치)
2-2. 실행 방식을 선택한다:
3-1. 배치 범위 지정이 포함된 UPDATE 문을 설계한다
3-2. 데이터 변환 로직을 SQL로 명확히 표현한다
3-3. 진행 상황 추적 방식을 설계한다 (마지막 처리 ID 기록 등)
3-4. 오류 처리 전략을 설계한다:
4-1. 백필 전 데이터 백업 방법을 수립한다:
_backup_YYYYMMDD 접미사 테이블 생성5-1. 사전 준비 체크리스트를 작성한다
5-2. 단계별 실행 절차를 정의한다:
6-1. 백필 중 애플리케이션 동작 영향 분석
6-2. 신·구 데이터 혼재 기간의 처리 전략 수립
6-3. 백필 완료 후 애플리케이션 변경 사항 식별 (예: NOT NULL 제약 추가)
6-4. 필요 시 기능 플래그와의 연계 전략 수립
# 백필 계획: [대상테이블].[대상컬럼]
## 개요
| 항목 | 내용 |
|------|------|
| 대상 테이블 | `table_name` |
| 대상 컬럼 | `column_name` |
| 백필 사유 | [컬럼 추가 / 데이터 정정 / 정규화 등] |
| 추정 대상 건수 | 약 N건 |
| 예상 소요 시간 | 약 N시간 |
| 실행 방식 | 온라인 / 점검 시간 / 백그라운드 |
| 서비스 영향 | 있음(경미) / 없음 |
## 데이터 분석 쿼리
```sql
-- 현재 데이터 분포 확인
SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;
-- 백필 대상 건수 확인
SELECT COUNT(*) FROM table_name WHERE column_name IS NULL;
-- 백업 테이블 생성
CREATE TABLE table_name_backup_20240601 AS
SELECT id, column_name FROM table_name WHERE column_name IS NULL;
-- 백업 건수 확인
SELECT COUNT(*) FROM table_name_backup_20240601;
UPDATE table_name
SET column_name = [변환 로직]
WHERE column_name IS NULL
AND id IN (SELECT id FROM table_name WHERE column_name IS NULL LIMIT 10);
-- 검증
SELECT * FROM table_name WHERE id IN (...);
UPDATE table_name
SET column_name = [변환 로직],
updated_at = NOW()
WHERE column_name IS NULL
AND id BETWEEN :start_id AND :end_id
LIMIT 1000;
-- 배치 루프 (의사코드)
-- batch_size = 5000
-- sleep_interval = 2 seconds (레플리카 지연 고려)
UPDATE table_name
SET column_name = [변환 로직],
updated_at = NOW()
WHERE column_name IS NULL
AND id > :last_processed_id
ORDER BY id
LIMIT :batch_size;
-- 진행 상황 기록
INSERT INTO backfill_progress (table_name, last_id, batch_count, updated_at)
VALUES ('table_name', :last_processed_id, :batch_num, NOW())
ON CONFLICT (table_name) DO UPDATE
SET last_id = EXCLUDED.last_id, batch_count = EXCLUDED.batch_count;
-- 백업 테이블 기반 복구
UPDATE table_name t
JOIN table_name_backup_20240601 b ON t.id = b.id
SET t.column_name = b.column_name;
| 지표 | 정상 범위 | 경고 임계값 | 중단 임계값 |
|---|---|---|---|
| 레플리카 지연 | < 1초 | > 5초 | > 30초 |
| CPU 사용률 | < 50% | > 70% | > 90% |
| 락 대기 스레드 | 0 | > 5 | > 20 |
| 배치 처리 시간 | < 10초 | > 30초 | > 60초 |
| 오류율 | 0% | > 0.1% | > 1% |
| 단계 | column_name 상태 | 애플리케이션 대응 |
|---|---|---|
| 백필 전 | NULL 존재 | NULL 허용 코드 유지 |
| 백필 중 | NULL/비NULL 혼재 | NULL 허용 유지 |
| 백필 후 | 전부 비NULL | NOT NULL 제약 추가 → 코드 정리 |
## 안전 주의사항
- **실제 SQL을 실행하지 말 것** — 본 문서는 계획 수립용이다
- **운영 DB에 접속하지 말 것**
- **백업 없는 백필은 절대 계획하지 말 것**
- 대량 UPDATE는 반드시 배치 분할 전략을 포함할 것
- 레플리카 지연을 고려한 스로틀링을 반드시 포함할 것
- 되돌릴 수 없는(비가역적) 데이터 변환은 반드시 경고할 것
- 운영 데이터의 실제 값은 문서에 기재하지 말 것 (플레이스홀더 사용)
## 종료 조건
- 대상 조건 및 추정 건수가 명확하다
- 배치 크기와 스로틀링이 결정되었다
- 백업 및 롤백 전략이 정의되었다
- 배치 기반 백필 SQL이 설계되었다
- 단계별 실행 계획이 정의되었다
- 모니터링 지표 및 임계값이 정의되었다
- 체크리스트 및 긴급 중단 절차가 포함되었다
- 과도기 애플리케이션 대응이 정리되었다
## 이 스킬이 적합하지 않은 경우
- **1,000만 건 이상 대규모 백필**: 본 계획은 초안 수준이다. 반드시 DBA와 협의하고 부하 테스트 후 실행할 것
- **실시간 쓰기 빈도가 높은 테이블**: 락 경합 및 레플리카 지연을 실측 후 판단할 것