문제와 원인
스키마 0561을 적용한 DB에 0560을 기대하는 앱을 연결하면 health가 degraded, HTTP 503을 반환한다. 0561 마이그레이션은 개인학습 테이블·인덱스·트리거를 추가하고 app_schema_state를 0561로 갱신한다. 기존 행을 보존하는 추가형 변경이어도 앱의 정확 일치 검사는 기대 버전과 다른 값을 실패로 처리한다.
현재 코드
schema-contract.mjs
이전 빌드의 기대 버전:
좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
export const EXPECTED_SCHEMA_VERSION = "0560";
개인학습 추가 빌드의 기대 버전:
좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
export const EXPECTED_SCHEMA_VERSION = "0561";
readHealthDiagnostics
두 빌드의 health는 같은 동등 비교를 사용한다.
좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
const healthy = operational.databaseReachable
&& operational.schema?.migration_version === __BAEUMZIP_SCHEMA_VERSION__
&& missingObjects.length === 0
&& (!groupExamEnabled || groupExam.ready);
진단 결과
원본 health 함수
Node.js에서 원본 readHealthDiagnostics와 GET 함수를 실행했다. DB 도달 가능·필수 객체 존재·그룹 시험 비활성의 합성 repository 입력을 고정하고, 기대 버전 2개와 적용 스키마 4개를 조합별 1회씩 총 8회 비교했다.
좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
| 적용 스키마 | 0560 기대 빌드 | 0561 기대 빌드 |
|---|---|---|
| 0560 | ok · HTTP 200 | degraded · HTTP 503 |
| 0561 | degraded · HTTP 503 | ok · HTTP 200 |
| 0562 | degraded · HTTP 503 | degraded · HTTP 503 |
| 스키마 행 없음 | degraded · HTTP 503 | degraded · HTTP 503 |
로컬 HTTP 응답
Swagger UI·1280×720 CSS px·DPR 2에서 두 조합을 각 1회 요청했다. 요청마다 메모리 SQLite의 app_schema_state를 SELECT하고 원본 health·GET 함수로 상태를 계산했다. 필수 객체·그룹 시험 조건은 합성 대역이며, 개발 adapter가 진단 본문을 표시한다.
좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
| 기대 / 적용 스키마 | HTTP 상태 | 진단 본문 |
|---|---|---|
| 0560 / 0561 | 503 | status: degraded, schema.expected: 0560, schema.applied: 0561 |
| 0561 / 0561 | 200 | status: ok, schema.expected: 0561, schema.applied: 0561 |
0560을 기대하는 빌드에 0561 스키마를 연결한 요청은 HTTP 503·degraded를 반환했다.
같은 응답의 schema 값은 기대 버전 0560·적용 버전 0561이었다.
0561을 기대하는 빌드로 요청하면 HTTP 200·ok를 반환했다.
진단 본문의 기대 버전과 적용 버전도 모두 0561로 일치했다.