SKCT 문제은행의 호환 스키마 오차단 해결

이 글의 목차 7개 항목
  • 분야: DB
  • 기술 스택: TypeScript · Cloudflare D1 · SQL

문제와 원인

DB의 app_schema_state가 호환 버전 0560 또는 0561을 반환해도 문제은행 활성화 진입 조건에서 오류가 발생했다. 기존 조건은 0559 한 값과의 동등 비교만 허용했다.

수정 전 코드

activateSkctBank

0559 한 값과 일치하는 DB만 다음 검사로 진행했다.

if (schema?.migration_version !== "0559") {
  throw new Error(`운영 schema 0559 적용 후에만 SKCT 문제은행을 활성화할 수 있습니다. 현재 ${schema?.migration_version ?? "없음"}`);
}

수정 후 코드

activateSkctBank

호환 버전 0559, 0560, 0561을 개별 문자열로 지정하고 목록 포함 여부를 검사하도록 바꿨다. 목록 밖의 버전과 버전 행이 없는 상태는 기존 오류 경로로 처리한다.

const schema = await database.prepare(
  "SELECT migration_version FROM app_schema_state WHERE id = 1",
).first<{ migration_version: string }>();
if (!schema?.migration_version || !["0559", "0560", "0561"].includes(schema.migration_version)) {
  throw new Error(`운영 schema 0559 적용 후에만 SKCT 문제은행을 활성화할 수 있습니다. 현재 ${schema?.migration_version ?? "없음"}`);
}

검증 결과

로컬 D1의 여섯 입력 비교

Wrangler의 로컬 D1에서 app_schema_state 값을 바꾸며 활성화 함수의 스키마 조회·검증 부분을 실행했다. 버전 5개와 행이 없는 상태를 수정 전후 각각 비교했다.

app_schema_state 입력기대 판정수정 전수정 후
0558차단차단차단
0559통과통과통과
0560통과차단통과
0561통과차단통과
0562차단차단차단
버전 행 없음차단차단차단

호환 버전의 통과는 1/3개에서 3/3개로 늘었고 잘못된 차단은 2개에서 0개로 줄었다.

버전 0561의 accepted가 false에서 true로 변경원본 보기 (새 창)

버전 0561의 accepted가 false에서 true로 변경

100%원본 보기 (새 창)

확대한 이미지는 상하좌우로 이동할 수 있습니다. 키보드는 이미지 영역에 초점을 두고 방향키를 사용하세요. Esc로 닫습니다.