feat: 초기 마이그레이션에 베이스라인 가드 추가(기존 스키마 DB 자동 처리)

이미 스키마가 존재하는 DB(과거 synchronize 로 생성·데이터 보존)에 배포해도
부팅이 실패하지 않도록, up() 진입 시 핵심 테이블(users) 존재를 확인해 DDL 을
건너뛰고 마이그레이션을 '적용됨'으로만 기록한다(데이터/스키마 보존). 빈 DB 는
기존대로 전체 스키마를 생성한다.

검증: 빈 DB 전체 생성 / 스키마 존재 DB(이력 없음) 건너뛰고 기록·데이터 보존 /
재실행 멱등(No migrations pending) 모두 확인.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-22 02:06:50 +09:00
parent 034bcf9bc7
commit 791c74f388
@@ -4,6 +4,13 @@ export class CreateInitialSchema1782060613058 implements MigrationInterface {
name = 'CreateInitialSchema1782060613058';
public async up(queryRunner: QueryRunner): Promise<void> {
// 베이스라인 가드 — 이미 스키마가 존재하는 기존 DB(과거 synchronize 로 생성·데이터 보존)면
// 초기 마이그레이션을 '베이스라인'으로 간주하고 DDL 을 건너뛴다. 마이그레이션은 '적용됨'으로
// 기록되어 다음 변경 마이그레이션부터 정상 진행되며, 기존 데이터/스키마는 보존된다.
// (빈 DB 면 이 가드를 통과해 아래 DDL 로 전체 스키마를 생성한다.)
if (await queryRunner.hasTable('users')) {
return;
}
// uuid_generate_v4() 기본값에 필요한 확장 — 신규(빈) 운영 DB 에서도 보장
await queryRunner.query(`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`);
await queryRunner.query(