개발이야기/AspNet&C#

Clean Architecture with ASP.NET Core 8 review

Roslyn 2024. 3. 17. 17:32
반응형

닷넷의 발전 속도는 감히 따라가기 힘들 만큼 빠르게 변화하고 있습니다.

클린 아키텍처에 대한 이야기야 이전에도 많이 나왔지만, 닷넷은 아직 어려움을 겪고 있는 이들에게 좀 더 명확한 방향성을 제시해 주고 있습니다.

 

본 포스트에서 작성된 텍스트는 모두 다음 영상을 기초로 작성되었습니다.

 

 

영상에서는 클린 아키텍처에 대해 그 의존성을 도메인 중심으로 구성함으로써 전통적으로 데이터베이스를 중심으로 소프트웨어를 설계하는 것보다 도메인 중심으로 설계하는 것이 더 유리하다는 점을 강조하고 있습니다.

이를 통해 인프라 의존성을 최소화하고 소프트웨어를 테스트하거나 의존성을 변경하는 것이 쉬워집니다.

클린 아키텍처는 도메인 주도 설계를 따르고, 비즈니스 로직이 복잡한 경우에 적합하다고 이야기 하고 있습니다.

 

영상에서 이야기 하는 클린 아키텍처의 주요 규칙은 다음과 같습니다.

1. 모든 비즈니스 규칙과 엔티티는 코어 프로젝트 내에 모델링 되어야 합니다.

2. 모든 종속성은 코어 프로젝트로 향해야 합니다.

3. 내부 프로젝트는 외부 프로젝트에서 구현되는 인터페이스를 정의해야 합니다.

 

이러한 아키텍처를 구현하기 위해 .NET의 클린 아키텍처 템플릿을 사용할 수 있으며, 이를 통해 프로젝트 구성 및 종속성 설정을 자동화할 수 있다고 이야기 합니다.

 

본 포스트를 작성한 시점(24.3.17)의 1주일 전에 닷넷9 preview.2 가 업로드 되었습니다.(24.3.12)

가장 최신 버전을 설치하여, 이를 기준으로 샘플링을 진행해 보겠습니다.

 

(1) 먼저 Ardalis.CleanArchitecture.Template 의 프리뷰 버전 템플릿을 설치해 줍니다.

dotnet new install Ardalis.CleanArchitecture.Template::9.0.0-preview2

 

(2) 클린 아키텍처 템플릿을 이용해 프로젝트를 생성해 줍니다.

dotnet new clean-arch -n NimblePros.Sample

 

(3) 프로젝트 폴더로 이동 후, 빌드를 해줍니다.

cd NimblePros.Sample
dotnet build

 

(4) 이제 VisualStudio 로 열어보면 다음과 같은 구조를 보실 수 있습니다.

 

(5) 기본적으로 NimblePros.Sample.Web 프로젝트가 시작프로젝트로 구성되어 있으므로, 시작 버튼을 클릭하여 시작해 볼 수 있습니다.  그럼 다음의 스웨거 화면을 볼 수 있습니다.

 

 

 

예시 솔루션에는 코어 프로젝트(NimblePros.Sample.Core), 인프라스트럭처(NimblePros.Sample.Infrastructure), 유즈케이스(NimblePros.Sample.UseCases), 그리고 웹프로젝트(NimblePros.Sample.Web)로 구성된 걸 볼 수 있습니다.

여기서 각 프로젝트 내에 Contributors에 대한 요소들을 볼 수 있습니다.

 

영상은 클린 아키텍처와 함께 CQRS에 대해 이야기 합니다.

CQRS는 새로운 데이터를 생성하거나 수정하는 등의 작업을 수행하는 Command와 데이터를 검색하거나 조회하는 작업을 하는 Query로 분리함으로써, 각각에 맞는 최적화된 기술과 데이터 모델을 선택하여 운용함으로써 확장성을 향상시키고, 조회 부분에 대한 별도의 최적화와 캐싱이 가능함으로 시스템의 전반적인 성능 향상을 꾀할 수 있는 소프트웨어 아키텍처 패턴 중 하나입니다.

 

 

사용자 인터페이스와 도메인 모델 사이에 UseCases가 있고, 명령(Command)과 조회(Query)를 처리하는 핸들러가 정의됩니다.

이를 통해 각각의 역할을 명확하게 분리하고 어플리케이션을 확장하거나 유지보수하기 쉽게 만듭니다.

 

인프라스트럭처는 어플리케이션의 실제 동작을 담당하며, 외부 API호출, 파일시스템 접근 등을 처리합니다.

이는 리포지토리 패턴 등을 이용하여 데이터베이스와 상호작용을 추상화하고 의존성 주입을 통해 유연하게 처리합니다.

 

이러한 구성요소들을 통해 클린 아키텍처와 CQRS를 적절히 결합하여 어플리케이션을 설계하고 구현할 수 있고, 궁극적으로 소프트웨어의 품질과 유지보수성을 향상시킬 수 있습니다.

 

 

클린 아키텍처나 CQRS가 뭔지 아직 잘 모르거나 어려움을 겪고 계시다면, 클린 아키텍처 템플릿을 통해 좀 더 쉽게 실무적으로 연습해 볼 수 있습니다.

 

반응형