마이그레이션 개요Migrations Overview

실제 프로젝트에서 데이터 모델은 기능이 구현될 때 변경됨: 새 엔터티 또는 속성이 추가 및 제거되며 데이터베이스 스키마는 애플리케이션과 계속 동기화되도록 적절히 변경되어야 합니다.In real world projects, data models change as features get implemented: new entities or properties are added and removed, and database schemas needs to be changed accordingly to be kept in sync with the application. EF Core의 마이그레이션 기능은 데이터베이스 스키마를 증분 방식으로 업데이트하여 애플리케이션 데이터 모델과의 동기 상태를 유지하면서 데이터베이스에 기존 데이터를 보존하는 방법을 제공합니다.The migrations feature in EF Core provides a way to incrementally update the database schema to keep it in sync with the application's data model while preserving existing data in the database.

높은 수준에서 마이그레이션은 다음 방식으로 작동합니다.At a high level, migrations function in the following way:

  • 데이터 모델 변경이 도입되면 개발자는 EF Core 도구를 사용하여 데이터베이스 스키마를 계속 동기화하는 데 필요한 업데이트를 설명하는 해당 마이그레이션을 추가합니다. EF Core는 현재 모델을 이전 모델의 스냅샷과 비교하여 차이점을 확인하고 마이그레이션 소스 파일을 생성합니다. 다른 소스 파일처럼 프로젝트의 소스 제어에서 해당 파일을 추적할 수 있습니다.When a data model change is introduced, the developer uses EF Core tools to add a corresponding migration describing the updates necessary to keep the database schema in sync. EF Core compares the current model against a snapshot of the old model to determine the differences, and generates migration source files; the files can be tracked in your project's source control like any other source file.
  • 새 마이그레이션이 생성된 후에는 다양한 방법으로 데이터베이스에 적용할 수 있습니다.Once a new migration has been generated, it can be applied to a database in various ways. EF Core는 적용된 모든 마이그레이션을 특수 기록 테이블에 기록하므로 적용된 마이그레이션과 적용되지 않은 마이그레이션을 알 수 있습니다.EF Core records all applied migrations in a special history table, allowing it to know which migrations have been applied and which haven't.

이 페이지의 나머지 부분은 마이그레이션 사용에 관한 단계별 초보자 가이드입니다.The rest of this page is a step-by-step beginner's guide for using migrations. 더 자세한 내용은 이 섹션의 다른 페이지를 참조하세요.Consult the other pages in this section for more in-depth information.

시작Getting started

다음 간단한 모델을 포함하는 첫 번째 EF Core 애플리케이션을 방금 완료했다고 가정하겠습니다.Let's assume you've just completed your first EF Core application, which contains the following simple model:

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
}

개발하는 동안 API 만들기 및 삭제를 사용하여 필요에 따라 모델 변경을 빠르게 반복했을 수 있습니다. 하지만 이제 애플리케이션이 프로덕션 환경으로 이동하므로 전체 데이터베이스를 삭제하지 않고 스키마를 안전하게 발전시키는 방법이 필요합니다.During development, you may have used the Create and Drop APIs to iterate quickly, changing your model as needed; but now that your application is going to production, you need a way to safely evolve the schema without dropping the entire database.

도구 설치Install the tools

먼저 EF Core 명령줄 도구를 설치해야 합니다.First, you'll have to install the EF Core command-line tools:

  • 일반적으로 모든 플랫폼에서 작동하는 .NET Core CLI 도구를 사용하는 것이 좋습니다.We generally recommend using the .NET Core CLI tools, which work on all platforms.
  • Visual Studio 내에서 작업하는 것이 더 익숙하거나 EF6 마이그레이션을 사용한 적이 있는 경우 패키지 관리자 콘솔 도구를 사용할 수도 있습니다.If you're more comfortable working inside Visual Studio or have experience with EF6 migrations, you can also use the Package Manager Console tools.

첫 번째 마이그레이션 만들기Create your first migration

이제 첫 번째 마이그레이션을 추가할 준비가 되었습니다.You're now ready to add your first migration! EF Core에 InitialCreate라는 마이그레이션을 만들도록 지시합니다.Instruct EF Core to create a migration named InitialCreate:

dotnet ef migrations add InitialCreate

EF Core는 프로젝트에서 Migrations라는 디렉터리를 만들고 일부 파일을 생성합니다.EF Core will create a directory called Migrations in your project, and generate some files. 정확히 EF Core가 생성한 항목을 검사하고 가능한 경우 수정하는 것이 좋지만, 지금은 이 작업을 건너뜁니다.It's a good idea to inspect what exactly EF Core generated - and possibly amend it - but we'll skip over that for now.

데이터베이스 및 스키마 만들기Create your database and schema

이제 EF를 통해 데이터베이스를 만들고 마이그레이션에서 스키마를 만들 수 있습니다.At this point you can have EF create your database and create your schema from the migration. 다음을 통해 이 작업을 수행할 수 있습니다.This can be done via the following:

dotnet ef database update

이제 새 데이터베이스에서 애플리케이션을 실행할 준비가 되었으며 단 한 줄의 SQL도 작성할 필요가 없었습니다.That's all there is to it - your application is ready to run on your new database, and you didn't need to write a single line of SQL. 이 마이그레이션 적용 방법은 로컬 개발의 경우 적합하지만 프로덕션 환경의 경우 적합하지 않습니다. 자세한 내용은 마이그레이션 적용 페이지를 참조하세요.Note that this way of applying migrations is ideal for local development, but is less suitable for production environments - see the Applying Migrations page for more info.

모델 발전Evolving your model

며칠이 지났고 블로그에 만들기 타임스탬프를 추가하라는 메시지가 표시되었습니다.A few days have passed, and you're asked to add a creation timestamp to your blogs. 애플리케이션에 필요한 변경을 완료했으며 이제 모델은 다음과 같이 표시됩니다.You've done the necessary changes to your application, and your model now looks like this:

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime CreatedTimestamp { get; set; }
}

모델 및 프로덕션 데이터베이스가 동기화되지 않았습니다. 데이터베이스 스키마에 새 열을 추가해야 합니다.Your model and your production database are now out of sync - we must add a new column to your database schema. 이를 위한 새 마이그레이션을 만들어 보겠습니다.Let's create a new migration for this:

dotnet ef migrations add AddBlogCreatedTimestamp

나중에 프로젝트 기록을 더 쉽게 이해할 수 있도록 마이그레이션에 설명이 포함된 이름을 지정합니다.Note that we give migrations a descriptive name, to make it easier to understand the project history later.

프로젝트의 첫 번째 마이그레이션이 아니기 때문에 EF Core는 이제 열이 추가되기 전에 업데이트된 모델을 이전 모델의 스냅샷과 비교합니다. 모델 스냅샷은 마이그레이션을 추가할 때 EF Core에서 생성된 파일 중 하나이며 소스 제어에 체크 인됩니다.Since this isn't the project's first migration, EF Core now compares your updated model against a snapshot of the old model, before the column was added; the model snapshot is one of the files generated by EF Core when you add a migration, and is checked into source control. 해당 비교에 따라 EF Core는 열이 추가되었는지 검색하고 적절한 마이그레이션을 추가합니다.Based on that comparison, EF Core detects that a column has been added, and adds the appropriate migration.

이제 이전처럼 마이그레이션을 적용할 수 있습니다.You can now apply your migration as before:

dotnet ef database update

이제 EF는 기존 데이터베이스가 있는지 검색합니다.Note that this time, EF detects that the database already exists. 또한 위에서 첫 번째 마이그레이션이 적용되었을 때 이 팩트는 데이터베이스의 특수 마이그레이션 기록 테이블에 기록되었습니다. 이를 통해 EF는 새 마이그레이션만 자동으로 적용할 수 있습니다.In addition, when our first migration was applied above, this fact was recorded in a special migrations history table in your database; this allows EF to automatically apply only the new migration.

다음 단계Next steps

위의 내용은 마이그레이션의 간단한 소개일 뿐입니다.The above was only a brief introduction to migrations. 마이그레이션 관리, 마이그레이션 적용 및 기타 측면을 자세히 알아보려면 다른 설명서 페이지를 참조하세요.Please consult the other documentation pages to learn more about managing migrations, applying them, and other aspects. .NET Core CLI 도구 참조에도 다른 명령에 관한 유용한 정보가 포함되어 있습니다.The .NET Core CLI tool reference also contains useful information on the different commands