본문으로 건너뛰기

아키텍처 규칙 테스트

Functorium ArchitectureRules 프레임워크를 활용한 아키텍처 테스트 실전 가이드


코드 리뷰에서 반복되는 지적 — sealed 누락, 의존성 방향 위반, 네이밍 규칙 불일치. 매번 사람이 눈으로 확인해야 할까요? 이런 설계 규칙을 컴파일 직후 자동으로 검증하는 테스트가 있다면 어떨까요?

이 튜토리얼은 Functorium ArchitectureRules 프레임워크를 활용한 아키텍처 테스트 구현을 단계별로 학습할 수 있도록 구성된 종합적인 교육 과정입니다. 기본적인 클래스 검증에서 시작하여 실전 레이어 아키텍처 규칙까지, 16개의 실습 프로젝트를 통해 아키텍처 테스트의 모든 측면을 체계적으로 학습할 수 있습니다.

“이 클래스는 sealed여야 합니다” — 코드 리뷰 코멘트가 아니라, 실패하는 테스트가 알려주는 세상을 만들어 봅시다.

수준대상권장 학습 범위
초급C# 단위 테스트 경험이 있고 아키텍처 테스트에 입문하려는 개발자Part 0~1
중급아키텍처 테스트 기본을 이해하고 심화 검증을 원하는 개발자Part 2~3
고급실전 프로젝트에 아키텍처 규칙을 도입하려는 개발자Part 4~5 + 부록

이 튜토리얼을 완료하면 다음을 할 수 있습니다:

  1. 타입 수준 아키텍처 규칙 검증
    • ClassValidator/InterfaceValidator로 가시성, 한정자, 네이밍, 상속 규칙 강제
    • 어셈블리를 로드하여 검증 대상 타입을 자동으로 수집
  2. 멤버 수준 시그니처 검증
    • MethodValidator로 메서드 시그니처, 반환 타입, 파라미터 검증
    • 프로퍼티 불변성과 필드 접근 규칙 강제
  3. 팀 고유의 커스텀 규칙 합성
    • DelegateArchRule/CompositeArchRule로 재사용 가능한 규칙 조합
  4. DDD 레이어 아키텍처 설계 일관성 자동화
    • 도메인/애플리케이션/어댑터 레이어별 규칙 적용
    • ArchUnitNET과 Functorium을 결합한 의존성 방향 검증
  5. 사전 구축 테스트 스위트 활용
    • DomainArchitectureTestSuite / ApplicationArchitectureTestSuite 상속으로 프로젝트에 즉시 적용

아키텍처 테스트의 필요성과 프레임워크를 소개합니다.

ClassValidator의 핵심 검증 메서드를 학습합니다.

주제핵심 학습 내용
1첫 아키텍처 테스트ArchRuleDefinition, ValidateAllClasses, RequirePublic, RequireSealed
2가시성과 수정자RequireInternal, RequireStatic, RequireAbstract, RequireRecord
3네이밍 규칙RequireNameStartsWith, RequireNameEndsWith, RequireNameMatching
4상속과 인터페이스RequireInherits, RequireImplements, RequireImplementsGenericInterface

MethodValidator를 통한 메서드 시그니처 검증을 학습합니다.

주제핵심 학습 내용
1메서드 검증RequireMethod, RequireAllMethods, RequireVisibility, RequireExtensionMethod
2반환 타입 검증RequireReturnType, RequireReturnTypeOfDeclaringClass, RequireReturnTypeContaining
3파라미터 검증RequireParameterCount, RequireFirstParameterTypeContaining
4속성과 필드 검증RequireProperty, RequireNoPublicSetters, RequireNoInstanceFields

불변성 규칙, 중첩 클래스, 인터페이스 검증, 커스텀 규칙을 학습합니다.

주제핵심 학습 내용
1불변성 규칙RequireImmutable, ImmutabilityRule 6차원 검증
2중첩 클래스 검증RequireNestedClass, RequireNestedClassIfExists
3인터페이스 검증ValidateAllInterfaces, InterfaceValidator
4커스텀 규칙DelegateArchRule, CompositeArchRule, Apply

DDD 레이어 아키텍처에 아키텍처 테스트를 적용합니다.

주제핵심 학습 내용
1도메인 레이어 규칙Entity, ValueObject, DomainEvent, DomainService 종합 검증
2애플리케이션 레이어 규칙Command/Query, Usecase, DTO 규칙
3어댑터 레이어 규칙Port Interface, Adapter Implementation, RequireVirtual 규칙
4레이어 의존성 규칙ArchUnitNET 의존성 규칙 + Functorium 규칙 통합
5아키텍처 테스트 스위트DomainArchitectureTestSuite, ApplicationArchitectureTestSuite 상속

베스트 프랙티스와 다음 단계를 안내합니다.


[Part 1] ClassValidator 기초 1장: 첫 아키텍처 테스트 → 2장: 가시성과 한정자 → 3장: 네이밍 규칙 → 4장: 상속과 인터페이스

[Part 2] 메서드와 속성 검증 1장: 메서드 검증 → 2장: 반환 타입 검증 → 3장: 파라미터 검증 → 4장: 속성과 필드 검증

[Part 3] 고급 검증 1장: 불변성 규칙 → 2장: 중첩 클래스 → 3장: 인터페이스 검증 → 4장: 커스텀 규칙

[Part 4] 실전 패턴 1장: 도메인 레이어 → 2장: 애플리케이션 레이어 → 3장: 어댑터 레이어 → 4장: 레이어 의존성 → 5장: 테스트 스위트


  • .NET 10.0 SDK 이상
  • VS Code + C# Dev Kit 확장
  • C# 단위 테스트 기초 경험

architecture-rules/
├── index.md
├── Part0-Introduction/
│ ├── 01-why-architecture-testing.md
│ ├── 02-archunitnet-and-functorium.md
│ └── 03-environment-setup.md
├── Part1-ClassValidator-Basics/
│ ├── 01-First-Architecture-Test/
│ ├── 02-Visibility-And-Modifiers/
│ ├── 03-Naming-Rules/
│ └── 04-Inheritance-And-Interface/
├── Part2-Method-And-Property-Validation/
│ ├── 01-Method-Validation/
│ ├── 02-Return-Type-Validation/
│ ├── 03-Parameter-Validation/
│ └── 04-Property-And-Field-Validation/
├── Part3-Advanced-Validation/
│ ├── 01-Immutability-Rule/
│ ├── 02-Nested-Class-Validation/
│ ├── 03-Interface-Validation/
│ └── 04-Custom-Rules/
├── Part4-Real-World-Patterns/
│ ├── 01-Domain-Layer-Rules/
│ ├── 02-Application-Layer-Rules/
│ ├── 03-Adapter-Layer-Rules/
│ ├── 04-Layer-Dependency-Rules/
│ └── 05-Architecture-Test-Suites/
├── Part5-Conclusion/
│ ├── 01-best-practices.md
│ └── 02-next-steps.md
└── Appendix/
├── A-api-reference.md
├── B-archunitnet-cheatsheet.md
└── C-faq.md

모든 Part의 예제 프로젝트에는 단위 테스트가 포함되어 있습니다. 테스트는 단위 테스트 가이드를 따릅니다.

Terminal window
# 개별 챕터 테스트
dotnet test --project Docs.Site/src/content/docs/tutorials/architecture-rules/Part1-ClassValidator-Basics/01-First-Architecture-Test/FirstArchitectureTest.Tests.Unit
# 전체 솔루션 테스트
dotnet test --solution architecture-rules.slnx
Part테스트 프로젝트
11FirstArchitectureTest.Tests.Unit
12VisibilityAndModifiers.Tests.Unit
13NamingRules.Tests.Unit
14InheritanceAndInterface.Tests.Unit
21MethodValidation.Tests.Unit
22ReturnTypeValidation.Tests.Unit
23ParameterValidation.Tests.Unit
24PropertyAndFieldValidation.Tests.Unit
31ImmutabilityRule.Tests.Unit
32NestedClassValidation.Tests.Unit
33InterfaceValidation.Tests.Unit
34CustomRules.Tests.Unit
41DomainLayerRules.Tests.Unit
42ApplicationLayerRules.Tests.Unit
43AdapterLayerRules.Tests.Unit
44LayerDependencyRules.Tests.Unit
45ArchitectureTestSuites.Tests.Unit
T1_T2_T3
│ │ └─ T3: 조건/시나리오
│ └──── T2: 기대 동작 (ShouldBe, ShouldHave, ShouldNotDependOn)
└─────── T1: 검증 대상 (DomainClasses, ValueObject, Entity)
예시: DomainClasses_ShouldBe_PublicAndSealed

이 튜토리얼의 모든 예제 코드는 Functorium 프로젝트에서 확인할 수 있습니다:

  • 프레임워크 타입: Src/Functorium.Testing/Assertions/ArchitectureRules/
  • 튜토리얼 프로젝트: Docs.Site/src/content/docs/tutorials/architecture-rules/

이 튜토리얼은 Functorium 프로젝트의 실제 아키텍처 테스트 프레임워크 개발 경험을 바탕으로 작성되었습니다.