본문으로 바로가기

통합 테스트의 마이그레이션 replay를 fail-closed로 만들기

통합 테스트가 스키마를 만들지 못했는데도 entity 테스트를 계속하면 실패가 지연되어 원인을 잃는다. 마이그레이션 디렉터리 누락, SQL 파일 0개, 파일 읽기 실패, 개별 SQL 오류는 모두 테스트 bootstrap 실패다.

4회 조회약 2분 읽기
X에 공유 새 창에서 열림
목차

통합 테스트가 스키마를 만들지 못했는데도 entity 테스트를 계속하면 실패가 지연되어 원인을 잃는다. 마이그레이션 디렉터리 누락, SQL 파일 0개, 파일 읽기 실패, 개별 SQL 오류는 모두 테스트 bootstrap 실패다.

false green을 막는 replay

입력 확인

SSOT 디렉터리와 SQL 파일 1개 이상을 요구합니다.

결정적 읽기

파일을 정렬하고 UTF-8로 읽습니다.

원자적 적용

첫 SQL 오류에서 전체 transaction을 중단합니다.

스키마 증명

대표 테이블·컬럼·제약 probe 뒤에만 본 테스트를 시작합니다.

안전한 replay 규칙

  • 저장소 SSOT 경로를 찾지 못하면 즉시 예외를 발생시킨다.
  • 디렉터리 안에 SQL이 없으면 성공으로 표시하지 않는다.
  • 정렬된 SQL을 UTF-8로 읽고 첫 실행 오류에서 중단한다.
  • seed도 동일한 규칙을 따르며, 적용 개수만으로 성공을 추정하지 않는다.

이 계약은 “테스트가 실행됐다”와 “실제 스키마에서 실행됐다”를 구분한다. 운영 migration 자체의 중복 실행 안전성과는 별개로, 테스트 harness가 실패를 숨기지 않는 것이 먼저다.

bootstrap 상태표

입력 상태 잘못된 처리 안전한 처리
디렉터리 없음 빈 목록으로 진행 경로와 함께 즉시 실패
SQL 0개 적용 0건 성공 구성 오류로 실패
UTF-8 읽기 실패 해당 파일 skip 파일명을 남기고 중단
세 번째 SQL 실패 앞의 두 개만으로 테스트 transaction rollback
seed 실패 entity 테스트에서 발견 bootstrap에서 실패
경로 → SQL 1개 이상 → 정렬 → UTF-8 읽기 → transaction replay → schema probe
 └──────── 어느 단계든 실패하면 entity test를 시작하지 않는다 ────────┘

마지막 probe는 적용 개수가 아니라 대표 테이블·컬럼·제약을 확인합니다. 잘못된 디렉터리의 SQL을 읽었거나 드라이버가 일부 문장을 무시한 false green까지 잡기 위해서입니다.

판정 질문

마이그레이션 파일이 실제로 읽혔는지, 첫 SQL 오류가 원인과 함께 남았는지, 적용 개수만으로 성공을 표시하고 있지 않은지를 확인해야 합니다.

관련 강좌: 부분 실패·복구·플랫폼 경계를 교차 서비스 계약으로 닫기

이 글에서 만나는 용어

quality 카테고리의 다른 글

카테고리 전체 보기 →

이 글이 도움이 되었나요?