- 분야: DB
- 기술 스택: TypeScript · Cloudflare D1 · SQL
문제와 원인
DB의 app_schema_state가 호환 버전 0560 또는 0561을 반환해도 문제은행 활성화 진입 조건에서 오류가 발생했다. 기존 조건은 0559 한 값과의 동등 비교만 허용했다.
수정 전 코드
activateSkctBank
0559 한 값과 일치하는 DB만 다음 검사로 진행했다.
좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
if (schema?.migration_version !== "0559") {
throw new Error(`운영 schema 0559 적용 후에만 SKCT 문제은행을 활성화할 수 있습니다. 현재 ${schema?.migration_version ?? "없음"}`);
}
수정 후 코드
activateSkctBank
호환 버전 0559, 0560, 0561을 개별 문자열로 지정하고 목록 포함 여부를 검사하도록 바꿨다. 목록 밖의 버전과 버전 행이 없는 상태는 기존 오류 경로로 처리한다.
좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
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개와 행이 없는 상태를 수정 전후 각각 비교했다.
좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
app_schema_state 입력 | 기대 판정 | 수정 전 | 수정 후 |
|---|---|---|---|
0558 | 차단 | 차단 | 차단 |
0559 | 통과 | 통과 | 통과 |
0560 | 통과 | 차단 | 통과 |
0561 | 통과 | 차단 | 통과 |
0562 | 차단 | 차단 | 차단 |
| 버전 행 없음 | 차단 | 차단 | 차단 |
호환 버전의 통과는 1/3개에서 3/3개로 늘었고 잘못된 차단은 2개에서 0개로 줄었다.