Devin.KR

재실행과 중복 없는 저장

같은 입력의 재처리와 실패 복구를 검증합니다.

진도 0%

레슨

  1. 저장 키와 충돌 정책

    지역·날짜 키가 충돌하는 입력을 찾아 같은 값 재입력과 수정값 입력을 구분해 출력합니다.

  2. 고유 제약과 원자적 적재

    로컬 SQLite에서 고유 키·트랜잭션·UPSERT로 정제 결과를 적재합니다.

  3. 실패 후 다시 처리

    배치 중간 예외를 주입해 롤백을 확인하고 같은 배치를 다시 처리합니다.

  4. 실행 명령과 작업 기록

    로컬 셸 래퍼로 작업 순서를 고정하고 실행 ID·입력 해시·건수·종료 상태를 기록합니다.

재실행과 중복 없는 저장 결과물 통합

m07-etl-schema 미션 solution 전체를 유지한 ZIP에서 시작합니다. 기존 전체 교체 경로는 보존하고 collect·transform을 재사용하는 incremental.run과 셸 래퍼를 추가합니다. 기본 검사는 네트워크를 사용하지 않습니다.

요구사항

  • m07 파이프라인의 저장 키를 지역·날짜로 정하고 수정 데이터는 해당 키를 갱신합니다.
  • 배치 하나를 트랜잭션으로 처리하고 실패 시 새 결과를 공개하지 않습니다.
  • 재실행 전후 row count·키 목록·합계를 run-audit.json에 기록합니다.
  • bash run.sh로 단일 실행하고 실행 ID·수집 바이트 해시·입력 건수·시각·성공/실패 상태를 run-audit.json의 배열에 추가합니다.
  • 증분 입력의 누락 키는 유지하고 NULL 정정도 반영합니다. 배치 내부 충돌은 거절합니다. 보고서의 성공 자료는 커밋된 DB이며 etl-out은 중간 자료입니다.
  • 최신 정정본은 입력 순서대로 제공된다는 전제를 문서화합니다. 동시 실행·삭제 이벤트·DB와 감사 JSON의 동시 원자성은 지원하지 않음을 기록합니다.

완료 기준

  • 같은 입력을 두 번 적재해 행 수·키·합계가 첫 실행과 같습니다.
  • 수정된 통행량 fixture는 한 키만 갱신하며 중간 실패 fixture는 실행 전 DB 내용으로 롤백됩니다.
  • 기존 기본 80개와 새 증분 8개 테스트가 통과하며 기존 HTTP 선택 통합 9개는 기본 실행에서 skip입니다. starter는 절대값 대신 합산하는 오류 때문에 재처리·정정 검사가 실패합니다.
  • fixtures/correction.csv와 fixtures/failure.csv로 수정과 첫 쓰기 직후 실패를 검사합니다. 실패 시도도 감사 기록에 failed로 남고 정상 재시도 후 성공합니다.
  • 같은 입력 두 번은 실행 ID가 다르고 입력 해시는 같으며 정렬된 전체 행·키·NULL 개수를 함께 비교합니다. 빈 증분은 기존 데이터를 삭제하지 않습니다.
python3 -m unittest discover -s tests -v
미션 시작 코드
모범 답안모범 답안 내려받기

검토 기준

  • 판단 근거와 제외 조건을 데이터와 연결해 설명합니다.
  • 앞 단계 산출물을 재사용하고 원본을 보존합니다.
  • 절대 합계 대입과 이벤트 합산의 차이를 설명하고 DB 트랜잭션 밖 파일 기록 실패의 복구 절차를 제시합니다.