본문 바로가기
WIKI 기술 지식 베이스

Knex를 사용한 수동 롤백

원문 보기 위키 갱신

Knex를 사용한 수동 롤백 (Manual Rollback using Knex)

Knex를 직접 사용하는 가장 흔한 경우는 Backstage 인스턴스를 업그레이드할 때 적용된 마이그레이션을 롤백하고 싶고 어떤 문제로 인해 다운그레이드하려는 경우입니다. migrate:down 명령으로 특정 마이그레이션을 롤백할 수 있습니다. 또한 migrate:rollback 명령으로 마지막 마이그레이션 배치를 롤백할 수도 있습니다.

출처: 문서

본문

Knex를 직접 사용하는 가장 흔한 경우는 Backstage 인스턴스를 업그레이드할 때 적용된 마이그레이션을 롤백하고 싶고 어떤 문제로 인해 다운그레이드하려는 경우입니다. migrate:down 명령으로 특정 마이그레이션을 롤백할 수 있습니다. 또한 migrate:rollback 명령으로 마지막 마이그레이션 배치를 롤백할 수도 있습니다. 이것은 필요합니다. 롤백 없이 Backstage 인스턴스를 다운그레이드하려고 하면 Knex가 마이그레이션을 손상된(corrupted) 것으로 표시하기 때문입니다. 이러한 명령을 새 버전의 Backstage 인스턴스에서 실행해야 낮은 버전에 대해 손상된 마이그레이션을 피할 수 있음을 유의하세요.

롤백 없이 다운그레이드를 시도하면 다음과 같은 메시지를 받을 가능성이 높습니다.

Backend failed to start up Error: The migration directory is corrupt, the following files are missing: 20230428155633_sessions.js

현재 데이터베이스에 어떤 마이그레이션과 어떤 플러그인이 적용되었는지 확인할 간단한 방법은 없지만, 이 이슈를 따라가면 더 많은 정보를 얻을 수 있습니다. 이 가이드는 Knex를 사용해 마이그레이션을 롤백하는 간단한 방법을 다룹니다. Backstage CLI에서 이를 지원할 계획(이슈)이 있지만, 지금은 필요한 경우 Knex CLI를 사용해 마이그레이션을 관리할 수 있습니다.

시작하려면 두 가지가 필요합니다: 데이터베이스 접근과 처리하려는 플러그인 마이그레이션 디렉터리입니다. 데이터베이스에 접근하기 위해 환경 변수를 사용할 것이며, 예시로 @backstage/plugin-catalog-backend 플러그인을 사용하겠습니다. 대부분의 경우 플러그인 패키지 루트에 migrations 디렉터리가 있지만, 디렉터리를 확인하려면 package.json 파일을 확인할 수 있습니다. Backstage가 데이터베이스를 처리하는 방법에 대한 자세한 내용은 Configuring Plugin Databases에서 얻을 수 있습니다. 이 튜토리얼은 Knex 마이그레이션 가이드의 정보를 따르므로 거기서 명령에 대한 자세한 내용을 얻을 수 있습니다.

프로젝트 루트에서 아래 명령을 실행하여 Knex와 상호작용할 수 있습니다.

마이그레이션 상태를 확인하려고 합니다.

$ node_modules/.bin/knex migrate:status --connection "postgresql://$POSTGRES_USER:***@$POSTGRES_HOST/backstage_plugin_catalog" --client pg --migrations-directory node_modules/@backstage/plugin-catalog-backend/migrations/Using environment: productionFound 2 Completed Migration file/files.20211229105307_init.js20240113144027_assets-namespace.jsNo Pending Migration files Found.

이제 20240113144027_assets-namespace.js라는 특정 마이그레이션을 롤백해 봅시다.

$ node_modules/.bin/knex migrate:down 20240113144027_assets-namespace.js --connection "postgresql://$POSTGRES_USER:***@$POSTGRES_HOST/backstage_plugin_catalog" --client pg --migrations-directory node_modules/@backstage/plugin-catalog-backend/migrations/Using environment: productionBatch 2 rolled back the following migrations:20240113144027_assets-namespace.js

이제 마이그레이션 상태를 다시 확인해 롤백을 확인할 수 있습니다.

$ node_modules/.bin/knex migrate:status --connection "postgresql://$POSTGRES_USER:***@$POSTGRES_HOST/backstage_plugin_catalog" --client pg --migrations-directory node_modules/@backstage/plugin-catalog-backend/migrations/Using environment: productionFound 1 Completed Migration file/files.20211229105307_init.jsFound 1 Pending Migration file/files.20240113144027_assets-namespace.js

이제 현재 마이그레이션 버전을 검색하는 migrate:currentVersion을 사용해 봅시다. 아직 실행된 마이그레이션이 없으면 "none"을 반환합니다.

$ node_modules/.bin/knex migrate:currentVersion --connection "postgresql://$POSTGRES_USER:***@$POSTGRES_HOST/backstage_plugin_catalog" --client pgUsing environment: productionCurrent Version: 20240113144027

더 알아보기 (Learn more)