migrations이 추가되고 나면, database에 적용해야 한다. production 환경 또는 development lifecycle에 더 적합하게 처리하기 위한, 여러가지 전략이 있다.
배포 전략이 무엇이던 간에, 운영 db에 적용하기 전 항상 생성된 migrations을 검수하고 테스트해야 한다. migration을 drop column을 할 수 있으며, 배포 시 여러이유로 실패할 수 있다.
SQL scripts
운영DB에 migrations을 적용하기 위한 방법으로 추천되는 것은 SQL scripts이다. 이 전략은 다음의 장점을 가진다.
- SQL scripts는 정확성을 위해 검토할 수 있다. schema 변경을 운영DB에 적용하는 것은, 데이터 손실을 가져올 수 있는 위험한 작업이기 때문에 이것은 중요하다.
- 가끔, 운영DB의 특정 요구사항에 맞게 scripts를 수정할 수 있다.
- SQL scripts는 배포 기술과 함께 연동해서 사용할 수 있다. 심지어, CI 프로세스의 일부로 생성될 수 있다.
- SQL scripts는 DBA에게 제공하여, 별도로 관리될 수 있다.
기본 사용법
아래는 blank DB에서 최근 migration까지의 SQL script를 생성한다.
Script-Migration
아래는 주어진 migration에서 최근 migration까지의 SQL script를 생성한다.
Script-Migration AddNewTables
아래는 특정 migration에서 특정 migration까지의 SQL script를 생성한다.
Script-Migration AddNewTables AddAuditTable
rollback script를 생성하기 위해, to보다 최신인 from을 사용할 수 있다.
Script 생성은 생성되어야 하는 migrations의 범위를 가리키는 아래 두 arguments를 전달받는다.
- from : db에 최종으로 적용된 migration이다. 적용된 migrations이 없으면 0(default)으로 한다.
- to : db에 적용해야 하는 마지막 migration이다. 기본값은 프로젝트의 마지막 migration이다.
Idempotent SQL scripts
위에 생성된 SQL scripts는 한 migration에서 또 다른 migration으로 schema를 변경시킬 뿐이며, script를 알맞게 apply하여 db를 정확한 migration state에 있도록 하는 것은 당신의 책임이다. EF Core는 어떠한 migrations이 이미 적용되었는지 내부적으로 체크하는 idempotent scripts를 지원한다. 정확히 어떤 migration이 마지막으로 적용되었는지 모를 때나, 다른 migrations에 있는 여러개의 db에 배포할때 유용하다.
Script-Migration -Idempotent
Command-line tools
EF command-line tools은 db에 migrations을 적용하기 위해 사용된다. 이 방법은 production db관리에는 적합하지 않다.
로컬 개발이나, migrations 테스트용으로 사용한다.
- SQL commands는 tool에 의해 바로 적용되므로, production 환경에 사용하기에 위험하다.
- .NET SDK와 EF tool이 설치되어야 한다.
최신 migration으로 db를 업데이트 한다.
Update-Database
주어진 migration으로 db를 업데이트 한다.
Update-Database AddNewTables
이전 migration으로 rollback하는데도 사용된다.
'Entity Framework Core' 카테고리의 다른 글
Entity Framework Core] Custom Migrations Operations (0) | 2023.07.20 |
---|---|
Entity Framework Core] 팀 개발 환경에서 Migrations (0) | 2023.07.20 |
Entity Framework Core] Migrations 관리 (0) | 2023.07.20 |
Entity Framework Core] transactions (0) | 2023.07.14 |
Entity Framework Core] Loading pattern (0) | 2023.07.14 |
댓글