AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

코어 주도 아키텍처: 유지보수 및 확장 가능한 .NET 애플리케이션 구조화

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

아키텍처 패턴

대상자

.NET 개발자 및 유지보수/확장성 중심의 애플리케이션 설계에 관심 있는 중급 이상 개발자

(난이도: 중간 - 아키텍처 패턴 이해 및 도메인 분리 기술 필요)

핵심 요약

  • 코어 주도 아키텍처도메인 로직이 기술 구현과 완전히 분리된 구조로, 유지보수성, 확장성, 테스트 가능성을 극대화
  • 도메인 계층(Core)은 IOrderRepository와 같은 인터페이스에 의존하며, 프레임워크/인프라 의존성 제거
  • 애플리케이션 계층(Application)은 ICreateOrderUseCase와 같은 사용 사례 기반 로직을 처리하고, 도메인과 인프라 간 중개 역할 수행

섹션별 세부 요약

1. 아키텍처 개요

  • 코어 주도 아키텍처Clean Architecture, Onion, Hexagonal 등과 유사하지만, 실용성과 SOLID 원칙의 균형을 강조
  • 도메인 계층(Core)은 기술 구현과 완전히 분리되어야 하며, 인터페이스 주입을 통해 외부 의존성 차단
  • 인프라 계층(Infrastructure)은 SqlOrderRepository와 같은 데이터베이스/외부 API 어댑터 역할 수행

2. 계층 구조 및 예시 코드

  • 엔트리 포인트(Program.cs)

- WebApplication.CreateBuilderDI 컨테이너 구성

- ICreateOrderUseCaseIOrderRepository 인터페이스 주입

  • 애플리케이션 계층

- CreateOrderUseCaseIOrderRepository를 통해 도메인 엔티티 생성 및 저장

- Order.Create() 메서드는 도메인 규칙을 직접 구현

  • 인프라 계층

- SqlOrderRepositoryAppDbContext를 통해 데이터베이스와의 상호작용

3. 마이그레이션 전략

  • 모듈별 점진적 전환이 가능 (예: Core 프로젝트로 비즈니스 로직 추출)
  • 6단계 마이그레이션
  1. 컨트롤러/서비스 내 산만한 로직 식별
  2. Core 프로젝트에 엔티티/규칙 추출
  3. Core 계층에 외부 서비스 인터페이스 정의
  4. 새로운 Application 계층에서 사용 사례 정의
  5. 인프라 코드를 외부 프로젝트 이동
  6. 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 계층은 인터페이스에 의존, 컨트롤러는 로직 대신 사용 사례 위임