깔끔한 아키텍처: DbContext 직접 주입을 중단한 이유
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
아키텍처 패턴
대상자
ASP.NET Core 및 EF Core를 사용하는 개발자, 테스트 가능성이 높은 중규모 이상 프로젝트에 관심 있는 기술자
핵심 요약
- Repository Pattern + Unit of Work를 통해 DbContext 직접 주입을 대체함
- IOrderRepository 같은 인터페이스를 서비스가 사용하여 데이터 액세스 로직 추상화
- 단위 테스트 용이성, 관심사 분리, 도메인 로직과 EF 코드 분리의 3대 핵심 이점
섹션별 세부 요약
1. 문제점: DbContext 직접 주입
- 테스트 어려움: 직접 주입된 DbContext는 모킹이 복잡함
- 결합도 증가: 인프라스트럭처와 비즈니스 로직이 혼합됨
- 유지보수성 저하: EF Core 특화 코드가 도메인 로직에 스며들음
2. 새로운 접근: Repository + Unit of Work
- 인터페이스 기반 설계:
IOrderRepository
인터페이스를 통해 데이터 액세스 추상화 - 코드 예시:
```csharp
public interface IOrderRepository
Task
void Add(Order order);
```
- Unit of Work 패턴: 트랜잭션 관리 및 데이터 변경 추적을 통합
3. 주요 이점
- 테스트 가독성 향상: Mock 객체를 사용한 유닛 테스트 가능
- 관심사 분리: 도메인 로직과 데이터 저장 로직을 명확히 분리
- EF Core 종속성 제거: 인터페이스를 통해 구현체 교체 용이
결론
- 중규모 이상 프로젝트에서 EF Core를 인터페이스 뒤에 숨기는 것이 유지보수성과 확장성에 유리
- Repository + Unit of Work 패턴은 테스트 가능성과 설계 유연성 향상을 위한 필수적인 아키텍처 전략