코어 주도 아키텍처: 유지보수 및 확장 가능한 .NET 애플리케이션 구조화
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
아키텍처 패턴
대상자
.NET 개발자 및 유지보수/확장성 중심의 애플리케이션 설계에 관심 있는 중급 이상 개발자
(난이도: 중간 - 아키텍처 패턴 이해 및 도메인 분리 기술 필요)
핵심 요약
- 코어 주도 아키텍처는 도메인 로직이 기술 구현과 완전히 분리된 구조로, 유지보수성, 확장성, 테스트 가능성을 극대화
- 도메인 계층(
Core
)은IOrderRepository
와 같은 인터페이스에 의존하며, 프레임워크/인프라 의존성 제거 - 애플리케이션 계층(
Application
)은ICreateOrderUseCase
와 같은 사용 사례 기반 로직을 처리하고, 도메인과 인프라 간 중개 역할 수행
섹션별 세부 요약
1. 아키텍처 개요
- 코어 주도 아키텍처는 Clean Architecture, Onion, Hexagonal 등과 유사하지만, 실용성과 SOLID 원칙의 균형을 강조
- 도메인 계층(
Core
)은 기술 구현과 완전히 분리되어야 하며, 인터페이스 주입을 통해 외부 의존성 차단 - 인프라 계층(
Infrastructure
)은SqlOrderRepository
와 같은 데이터베이스/외부 API 어댑터 역할 수행
2. 계층 구조 및 예시 코드
- 엔트리 포인트(
Program.cs
)
- WebApplication.CreateBuilder
로 DI 컨테이너 구성
- ICreateOrderUseCase
와 IOrderRepository
인터페이스 주입
- 애플리케이션 계층
- CreateOrderUseCase
는 IOrderRepository
를 통해 도메인 엔티티 생성 및 저장
- Order.Create()
메서드는 도메인 규칙을 직접 구현
- 인프라 계층
- SqlOrderRepository
는 AppDbContext
를 통해 데이터베이스와의 상호작용
3. 마이그레이션 전략
- 모듈별 점진적 전환이 가능 (예:
Core
프로젝트로 비즈니스 로직 추출) - 6단계 마이그레이션
- 컨트롤러/서비스 내 산만한 로직 식별
Core
프로젝트에 엔티티/규칙 추출Core
계층에 외부 서비스 인터페이스 정의- 새로운
Application
계층에서 사용 사례 정의 - 인프라 코드를 외부 프로젝트 이동
Program.cs
에서 의존성 주입 설정
4. 테스트 가능성 강화
- 단위 테스트는
Order.Create()
와CreateOrderUseCase.Execute()
만 사용 - 예시:
```csharp
[Fact]
public void CreateOrder_Succeeds() {
var order = Order.Create("client123", new[] { "product1", "product2" });
Assert.NotNull(order);
}
```
- 모의 객체(
Mock
) 사용으로 외부 의존성 제거
5. 적합한 사용 시나리오
- 복잡한 로직/장기 유지 애플리케이션에 적합
- MVP나 간단한 CRUD 앱에는 과도한 구조 복잡성 발생 가능
- EF Core, HttpClient 등은
Core
계층에 사용 금지 (도메인 독립성 유지)
결론
- 코어 주도 아키텍처는 도메인 중심 설계로 장기 유지 시스템에 적합하며, 테스트 가능성과 확장성을 극대화
- 점진적 마이그레이션을 통해 기존 프로젝트에 적용 가능, 단 초기 개발 시간이 다소 증가
- 핵심 원칙:
Core
계층은 인터페이스에 의존, 컨트롤러는 로직 대신 사용 사례 위임