Files
portfolio-hub/docs/batches/bat-021_20260628_req047-step2-integration-and-runbook/planning.md
T
genichin 3e1b571906 feat(bat-021): REQ-047 Step2 동반 코드 수정 + 실 DB 통합검증 + 런북
- ensure_schema() broker_credentials: daemon_id NOT NULL, PK=(daemon_id,broker)로 갱신
- _row_to_broker_credential: Step2 컬럼 순서(daemon_id 선두)로 갱신
- upsert_broker_credential: ON CONFLICT (daemon_id,broker)로 수정, fallback try/except 제거
- list_broker_credentials: fallback 제거, SELECT 컬럼 순서 갱신
- test_bat020_broker_credential_domain.py: AC-3/AC-4 행 순서를 Step2 포맷으로 갱신
- tests/test_bat021_step2_ensure_schema_and_upsert.py: 12개 신규 테스트
- docs/runbooks/bat-021-req047-step2-migration-runbook.md: 운영 적용 런북
- docs/batches/bat-021: batch 문서(index/planning/design/implementation/verification)

실 PostgreSQL 통합검증(AC-1~7 전건 PASS):
  Step1 upgrade → backfill → Step2 upgrade → downgrade 시나리오 포함
  NULL 사전검증(upgrade 거부) 및 downgrade 안전장치(중복 시 RuntimeError) 확인

521 passed, 0 failed (기존 509 + 신규 12)
2026-06-28 10:19:27 +09:00

2.1 KiB

BAT-021 Planning

DoR 확인

  • REQ-047: Approved 상태 확인
  • BAT-020 코드 머지 (d4acfd4) — Step1/Step2 revision 존재
  • dev PostgreSQL (Docker) 가동 확인
  • 동반 수정 TODO 2건 식별 완료 (verification.md 미해결 사항 1, 2)

작업 분해

# 작업 파일 비고
T-1 ensure_schema() broker_credentials 갱신 app/repositories/postgres.py daemon_id NOT NULL, PK=(daemon_id,broker)
T-2 upsert_broker_credential ON CONFLICT 수정 app/repositories/postgres.py (daemon_id,broker) + fallback 제거
T-3 list_broker_credentials fallback 제거 app/repositories/postgres.py Step2 이후 컬럼 항상 존재
T-4 Step1 alembic upgrade 실 DB 검증 dev PostgreSQL AC-1, AC-2
T-5 backfill CLI 실행 (테스트 데이터) pfhub CLI AC(REQ-048)
T-6 Step2 alembic upgrade 실 DB 검증 dev PostgreSQL AC-3, AC-4, AC-5
T-7 downgrade 실 DB 검증 (Step2 → Step1 → base) dev PostgreSQL AC-6, AC-7
T-8 단위 테스트 추가/갱신 tests/test_bat021_*.py ensure_schema 정합, ON CONFLICT 행동
T-9 운영 런북 작성 docs/runbooks/bat-021-runbook.md 백업→Step1→backfill→Step2→verify→rollback
T-10 batch 문서 완성 docs/batches/bat-021 implementation.md, verification.md

Design Gate

Design 필요: 코드 수정 범위가 명확(T-1/T-2/T-3 — 두 함수 내 SQL 수정)하나 fallback 패턴 제거 및 ensure_schema 스키마 정합성 확인이 필요하므로 design.md를 작성한다.

위험

  • R-1: Step2 upgrade 중 NULL 행 있으면 revision 코드가 RuntimeError 발생 → 사전에 backfill 완료 확인 필수
  • R-2: ensure_schema() 변경 후 Step2 미적용 DB에서 실행 시 NOT NULL/PK 불일치 → ensure_schema는 Step2 적용 후 동작 환경에서만 호출 (런북에 명시)
  • R-3: fallback 제거 시 Step1 미적용 DB에서 upsert 호출 시 오류 → 이 batch는 Step2 이후 세계를 목표로 하므로 Step1 이전 환경 지원 불필요 (런북에 명시)