Skip to content

Internal 아키텍처

Internal 아키텍처 구성도

  • Internal 아키텍처는 시스템을 구성하는 레이어별로 책임, 역할, 그리고 협력을 명확히 정의하고 구조화합니다. 이를 통해 각 레이어가 독립적으로 동작하면서도 유기적으로 협력할 수 있는 기반을 마련합니다.
  • 유스케이스(Application 레이어)가 모든 레이어를 주관합니다.

Internal 아키텍처 범주

Internal 아키텍처 패키지

  • Application 레이어
    • MediatR
      • MediatR.Contracts
  • Adapter 레이어
    • Serilog
      • Serilog.Extensions.Hosting
      • Serilog.Settings.Configuration
      • Serilog.Sinks.Console
      • Serilog.Sinks.File
      • Destructurama.Attributed
      • Serilog.Exceptions
      • Serilog.Sinks.OpenTelemetry
    • Microsoft.Extensions.Hosting.WindowsServices
    • Quartz
      • Quartz.Extensions.Hosting
    • FluentValidation
      • FluentValidation.DependencyInjectionExtensions
    • OpenTelemetry
      • OpenTelemetry.Extensions.Hosting
      • OpenTelemetry.Instrumentation.Runtime
      • OpenTelemetry.Instrumentation.Process
      • OpenTelemetry.Instrumentation.Quartz
      • OpenTelemetry.Exporter.Console
      • OpenTelemetry.Exporter.OpenTelemetryProtocol
  • Unit Test
    • xunit
    • FluentAssertions
    • TngTech.ArchUnitNET.xUnit
  • GitHub Actions
    • actions/checkout
    • actions/setup-dotnet
    • danielpalme/ReportGenerator-GitHub-Action
    • dorny/test-reporter

Internal 아키텍처 비교

Port 비교

구분아키텍처헥사고날 아키텍처
Known 입출력 PortMediator 패턴Strategy 패턴
Unknown 입출력 PortStrategy 패턴Strategy 패턴
  • 헥사고날 아키텍처에서는 Known과 Unknown 외부 입출력을 명시적으로 구분하지 않지만, 우리는 이를 구분하여 Port를 정의합니다.
    • Known 입출력은 Mediator 패턴을 활용하여 메시지 기반으로 처리합니다.
    • Unknown 입출력은 Strategy 패턴을 사용하여 인터페이스를 통해 처리합니다.

Message 비교

  • 데이터 쓰기를 위한 메시지(Command)와 데이터를 읽기 위한 메시지(Query)로 구분합니다.
  • 모든 메시지를 대상으로 부가 기능을 Decorator로 추가합니다.

Adapter 비교

  • Known과 Unknown 외부 입출력을 명시적으로 구분하여 Adapter 위치를 배치합니다.
    • Known 입출력은 Mediator 패턴을 활용하여 메시지 발신과 수신을 구현합니다.
    • Unknown 입출력은 Strategy 패턴을 사용하여 인터페이스을 구현합니다.

Application 비교

  • Application은 동일하게 모두 DDD 전술 설계 패턴에서 제시하는 Application Service 중심으로 구현됩니다.

Domain 비교

  • Domain은 동일하게 모두 DDD 전술 설계 패턴에서 제시하는 Entity와 Value Object 그리고 Domain Service을 중심으로 구현됩니다.