EF Core DbContextOptionsBuilder 사용 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
ASP.NET Core 및 EF Core 프로젝트에서 환경별 데이터베이스 설정을 구성하는 개발자
난이도: 중급 이상 (EF Core 및 ASP.NET Core 기초 지식 필요)
핵심 요약
- DbContextOptionsBuilder는 Program.cs 코드 정리 및 개발/생산 환경별 구성을 분리하는 두 가지 주요 목적을 가진다.
- 일반적인 DbContext 설정은
UseSqlServer
,LogTo
,EnableSensitiveDataLogging()
메서드를 사용한다. - 환경별 구성을 일반화하기 위해 제네릭
DbContextOptionsBuilder
를 사용하는 것이 권장된다. - NuGet 패키지(
EntityCoreFileLogger
)를 사용해 생산 환경 로깅을 처리할 수 있다.
섹션별 세부 요약
1. 환경별 설정 구성
appsettings.json
에서DefaultConnection
연결 문자열을 설정한다.Program.cs
에서AddDbContext
를 사용해UseSqlServer
,LogTo
등 메서드를 통해 DbContext를 구성한다.- 개발 환경에서는
Debug.WriteLine
을 사용해 로그를 출력하고, 생산 환경에서는DbContextToFileLogger
를 사용해 파일로 로깅한다.
2. DbContextOptionsBuilder 클래스 설계
ContextOptions
클래스는 특정 DbContext에 결합되어 있으나, 다중 DbContext 프로젝트에는 적합하지 않다.- 제네릭
DbContextOptionsBuilder
를 사용해 모든 프로젝트에서 재사용 가능한 구성을 제공한다. Development
및Production
메서드는UseSqlServer
와LogTo
를 통해 환경별 설정을 처리한다.
3. NuGet 패키지 통합
EntityCoreFileLogger
패키지를 프로젝트에 추가해 생산 환경 로깅을 활성화한다.- 프로젝트 파일에
PackageReference
를 추가해야 한다. - 디버깅 환경에서는 로그가 생성되지만, 생산 환경에서는 실제 로깅이 수행된다.
4. 클래스 프로젝트 및 NuGet 패키지 생성
- 클래스 프로젝트를 생성해
ContextOptions
클래스를 공유할 수 있다. - 로컬 NuGet 패키지를 생성해 여러 프로젝트에서 쉽게 사용할 수 있다.
NorthWind2024
데이터베이스를 LocalDb에 생성하고 스크립트로 데이터를 채운다.
결론
- 제네릭
DbContextOptionsBuilder
를 사용해 환경별 설정을 일반화하고, NuGet 패키지로 로깅 기능을 통합하면 모든 프로젝트에서 일관된 DbContext 구성이 가능하다. - 로컬 NuGet 패키지 생성은 팀 내 공유 및 재사용성을 높이는 효과적인 방법이다.