본문으로 건너뛰기

Functorium 가이드

비즈니스 로직과 기술 코드가 뒤섞여 변경이 어렵고, 테스트하기 힘든 경험을 해본 적이 있나요? Functorium은 DDD 전술적 설계와 함수형 프로그래밍을 결합하여 관심사를 명확히 분리하고, 프로젝트에 필요한 아키텍처·구현 패턴·관측성까지 모든 가이드를 제공합니다.

개발 현장에서 이런 고민을 마주한 적이 있을 것입니다.

  • 비즈니스 규칙이 인프라 코드 사이에 흩어져 변경할 때마다 어디를 수정해야 할지 파악하기 어렵지 않았나요?
  • 도메인 로직을 단위 테스트하려면 데이터베이스나 외부 서비스를 함께 준비해야 하는 부담을 느낀 적이 없나요?
  • 프로젝트가 커질수록 레이어 간 의존성이 꼬여 한 곳을 고치면 다른 곳이 깨지는 악순환을 경험하지 않았나요?

Functorium은 이러한 문제를 DDD 전술적 설계 패턴으로 관심사를 분리하고, 함수형 프로그래밍으로 부수효과를 통제하여 해결합니다.

  1. 내부 아키텍처 설계 원칙 — 관심사 분리, 레이어 구조, 의존성 방향의 근거
  2. DDD 전술적 설계 빌딩블록 — Value Object, Entity, Aggregate, Domain Event, Specification
  3. Application/Adapter 계층 구현 — Use Case, Port, Adapter, Pipeline, DI
  4. 테스트 전략 — 단위 테스트, 통합 테스트, 테스트 라이브러리
  5. 관측성(Observability) — 로깅, 메트릭, 트레이싱 사양과 구현

Functorium 가이드는 WHY → WHAT → HOW 순서로 구성되어, 각 개념이 왜 필요한지 이해한 후 구현으로 나아갈 수 있도록 안내합니다.

Functorium은 DDD 전술적 설계 패턴과 함수형 프로그래밍을 결합한 프레임워크입니다. 가이드 문서는 DDD 빌딩블록 순서로 배치되어 있으며, 각 문서는 WHY → WHAT → HOW 구조를 따릅니다.

[00] 00-writing-guide.md ─── 문서 작성 가이드
Architecture
├── [00] 00-architecture-design-principles.md ─── 내부 아키텍처 설계 원칙
├── [01] 01-project-structure.md ─── 프로젝트 구조
├── [02] 02-solution-configuration.md ─── 솔루션 구성
├── [02b] 02b-ci-cd-and-versioning.md ─── CI/CD 워크플로우 및 버전 관리
└── [03] 03-dotnet-tools.md ─── .NET 도구
[04] 04-ddd-tactical-overview.md ─── DDD 전술적 설계 개요
├── Domain Layer
│ ├── [05a] 05a-value-objects.md ─── 값 객체 (핵심 개념·검증·구현 패턴)
│ ├── [05b] 05b-value-objects-validation.md ─── 값 객체 (열거형·실전·FAQ)
│ ├── [05c] 05c-union-value-objects.md ─── 값 객체: Union 타입
│ │ └── [06a] 06a-aggregate-design.md ─── Aggregate 설계 (WHY + WHAT)
│ │ ├── [06b] 06b-entity-aggregate-core.md ─── Entity/Aggregate 핵심 패턴 (HOW)
│ │ └── [06c] 06c-entity-aggregate-advanced.md ─── Entity/Aggregate 고급 패턴
│ │ └── [07] 07-domain-events.md ─── 도메인 이벤트
│ ├── [08a] 08a-error-system.md ─── 에러 시스템: 기초와 네이밍
│ ├── [08b] 08b-error-system-domain-app.md ─── 에러 시스템: Domain/Application 에러
│ ├── [08c] 08c-error-system-adapter-testing.md ─── 에러 시스템: Adapter 에러와 테스트
│ ├── [09] 09-domain-services.md ─── 도메인 서비스
│ └── [10] 10-specifications.md ─── Specification 패턴
├── Application Layer
│ └── [11] 11-usecases-and-cqrs.md ─── Use Case와 CQRS
├── Adapter Layer
│ ├── [12] 12-ports.md ─── Port 정의
│ ├── [13] 13-adapters.md ─── Adapter 구현
│ ├── [14a] 14a-adapter-pipeline-di.md ─── Pipeline, DI
│ ├── [14b] 14b-adapter-testing.md ─── 단위 테스트
│ └── [14c] 14c-repository-query-implementation-guide.md ─── Repository & Query 구현 가이드
├── Testing
│ ├── [15] 15a-unit-testing.md ─── 단위 테스트
│ ├── [15b] 15b-integration-testing.md ─── 통합 테스트
│ └── [16] 16-testing-library.md ─── 테스트 라이브러리
├── DTO 전략
│ └── [17] 17-dto-strategy.md ─── DTO 전략
├── Observability
│ ├── [18a] → spec/08-observability.md ─── 사양 (spec으로 이동)
│ ├── [18b] 18b-observability-naming.md ─── 네이밍
│ ├── [19] 19-observability-logging.md ─── 로깅
│ ├── [20] 20-observability-metrics.md ─── 메트릭
│ └── [21] 21-observability-tracing.md ─── 트레이싱
├── 진단
│ └── [22] 22-crash-diagnostics.md ─── 크래시 덤프
└── Appendix
├── [A01] A01-vscode-debugging.md ─── VSCode 디버깅
├── [A02] A02-git-reference.md ─── Git 참조
├── [A03] A03-response-type-evolution.md ─── FinResponse 타입 진화
└── [A04] A04-architecture-rules-coverage.md ─── 아키텍처 규칙 검증 커버리지

빠른 참조 (작업별 가이드 바로가기)

섹션 제목: “빠른 참조 (작업별 가이드 바로가기)”

새 서비스를 시작할 때 프로젝트 구조, 빌드 구성, CI/CD를 어떻게 잡을지 안내합니다.

하고 싶은 작업참조 문서
아키텍처 설계 원칙 이해하기00-architecture-design-principles.md
프로젝트 구성/폴더 구조01-project-structure.md
솔루션 구성 파일/빌드 스크립트02-solution-configuration.md
CI/CD 워크플로우 및 버전 관리02b-ci-cd-and-versioning.md
도구 사용법 (커버리지/스냅샷/ER 다이어그램)03-dotnet-tools.md

비즈니스 개념을 코드로 옮기는 과정 — 값 객체로 시작해 Aggregate로 묶고, 이벤트와 에러로 상호작용을 표현합니다.

하고 싶은 작업참조 문서
DDD 빌딩블록 개요/네이밍/용어집04-ddd-tactical-overview.md
값 객체 만들기 (검증, 동등성)05a-value-objects.md
열거형(SmartEnum) 패턴05b-value-objects-validation.md
Union 값 객체 (Discriminated Union)05c-union-value-objects.md
Aggregate 경계 설계하기06a-aggregate-design.md
Entity/Aggregate 구현 (생성 패턴 포함)06b-entity-aggregate-core.md
Cross-Aggregate 관계, 부가 인터페이스06c-entity-aggregate-advanced.md
도메인 이벤트 정의/발행/핸들러07-domain-events.md
에러 타입 정의 및 테스트08a08b08c
도메인 서비스 만들기09-domain-services.md
Specification 만들기10-specifications.md

도메인 모델을 외부에 노출하는 유스케이스를 정의하고, Command/Query 책임을 분리합니다.

하고 싶은 작업참조 문서
Usecase 만들기 (CQRS)11-usecases-and-cqrs.md
DTO 전략/재사용 규칙17-dto-strategy.md

도메인이 외부 세계와 만나는 경계 — Port로 계약을 정의하고 Adapter로 구현합니다.

하고 싶은 작업참조 문서
Port 인터페이스 정의하기12-ports.md
Adapter 구현 (Repository, API, Messaging)13-adapters.md
Pipeline/DI 등록, Options 패턴, 캐싱14a-adapter-pipeline-di.md
Adapter 단위 테스트14b-adapter-testing.md
Repository & Query 구현 (페이지네이션, Dapper)14c-repository-query-implementation-guide.md

도메인 순수성이 테스트를 단순하게 만듭니다. 단위 테스트부터 통합 테스트까지의 전략입니다.

하고 싶은 작업참조 문서
단위 테스트 (명명, AAA, MTP)15a-unit-testing.md
통합 테스트 (HostTestFixture)15b-integration-testing.md
테스트 라이브러리 (로그/아키텍처/소스생성기/Job)16-testing-library.md
아키텍처 규칙 커버리지 매트릭스A04-architecture-rules-coverage.md

개발과 운영의 언어를 통일합니다. 구조화된 로깅, 메트릭, 트레이싱 사양과 크래시 진단입니다.

하고 싶은 작업참조 문서
Observability 사양08-observability.md
크래시 덤프 설정/분석22-crash-diagnostics.md
구분형식설명
규칙 구현 코드실제 C# 코드컴파일 가능한 수준의 코드 (타입, 메서드, 패턴 예시)
아키텍처 흐름 설명pseudo-code 허용반드시 pseudo-code 또는 개념 코드 라벨을 코드 블록 앞에 표기
코드 블록 언어 태그항상 명시```csharp, ```xml, ```bash, ```promql

관심사 분리, 레이어 구조, 의존성 방향의 근거를 먼저 이해하고, 프로젝트 폴더 구성과 빌드 구성으로 구체화합니다. 새 서비스를 만들 때 가장 먼저 참조하는 영역입니다.

문서설명
00-architecture-design-principles.md내부 아키텍처 설계 원칙 (관심사 분리, 레이어 구조, 의존성 방향)
01-project-structure.md서비스 프로젝트 구성 (폴더, 네이밍, 의존성)
02-solution-configuration.md솔루션 루트 구성 파일 및 빌드 스크립트
02b-ci-cd-and-versioning.mdCI/CD 워크플로우 및 버전 관리 (GitHub Actions, NuGet 패키지, MinVer, 버전 제안 커맨드)
03-dotnet-tools.md.NET 도구 가이드 (CLI 도구, 소스 생성기, 파일 기반 스크립트)

DDD 전술적 설계 (번호순 학습 경로)

섹션 제목: “DDD 전술적 설계 (번호순 학습 경로)”

비즈니스 규칙이 인프라에 의존하지 않도록 순수한 도메인 모델을 구축합니다. 값 객체로 불변 검증을 보장하고, Aggregate로 트랜잭션 경계를 설정하며, 도메인 이벤트로 느슨한 결합을 실현합니다.

번호문서설명
0404-ddd-tactical-overview.mdDDD 전술적 설계 개요, 빌딩블록 맵, Functorium 타입 매핑
05a05a-value-objects.md값 객체 (핵심 개념, 기반 클래스, 검증 시스템, 구현 패턴)
05b05b-value-objects-validation.md값 객체 (열거형 패턴, 실전 예제, Application 검증, FAQ)
05c05c-union-value-objects.md값 객체: Union 타입 (Discriminated Union, 상태 전이, Match/Switch)
06a06a-aggregate-design.mdAggregate 설계 (WHY + WHAT: 설계 규칙, 경계 설정, 안티패턴)
06b06b-entity-aggregate-core.mdEntity/Aggregate 핵심 패턴 (HOW: 클래스 계층, ID, 생성 패턴, 이벤트)
06c06c-entity-aggregate-advanced.mdEntity/Aggregate 고급 패턴 (Cross-Aggregate 관계, 부가 인터페이스, 실전 예제)
0707-domain-events.md도메인 이벤트 정의, 발행, 핸들러 구현
08a08a-error-system.md에러 시스템: 기초와 네이밍 (WHY, Fin 패턴, 네이밍 규칙)
08b08b-error-system-domain-app.md에러 시스템: Domain/Application 에러 (Domain/Application/Event 에러 정의와 테스트)
08c08c-error-system-adapter-testing.md에러 시스템: Adapter 에러와 테스트 (Adapter 에러, Custom 에러, 테스트 모범 사례, 체크리스트)
0909-domain-services.md도메인 서비스 (교차 Aggregate 순수 로직, IDomainService)
1010-specifications.mdSpecification 패턴 (비즈니스 규칙 캡슐화, 조합, Repository 통합)

도메인 모델을 애플리케이션 경계에 노출하는 유스케이스를 정의합니다. CQRS로 쓰기와 읽기 책임을 분리하고, DTO로 레이어 간 데이터 전달 규칙을 명확히 합니다.

번호문서설명
1111-usecases-and-cqrs.mdUse Case 구현 (CQRS Command/Query)
1717-dto-strategy.mdDTO 전략 (레이어별 소유권, 재사용 규칙, 변환 패턴)

도메인이 외부 세계와 만나는 경계입니다. Port로 계약을 정의하고 Adapter로 구현하며, Pipeline과 DI로 조립합니다. Repository, 외부 API, 메시징 등 구체적인 인프라 구현이 이 영역에 위치합니다.

번호문서설명
1212-ports.mdPort 아키텍처, IObservablePort 계층, Port 정의 규칙
1313-adapters.mdAdapter 구현 (Repository, External API, Messaging, Query)
14a14a-adapter-pipeline-di.mdPipeline 생성, DI 등록, Options 패턴
14b14b-adapter-testing.mdAdapter 단위 테스트, E2E Walkthrough
14c14c-repository-query-implementation-guide.mdRepository & Query 구현 가이드

도메인 레이어의 순수성이 단위 테스트를 단순하게 만들고, Adapter 분리가 통합 테스트의 경계를 명확하게 합니다. Functorium.Testing 라이브러리는 아키텍처 규칙 검증, 구조화된 로그 테스트, 소스 생성기 테스트를 위한 도구를 제공합니다.

문서설명
15a-unit-testing.md단위 테스트 규칙 (명명, AAA 패턴, MTP 설정)
15b-integration-testing.md통합 테스트 (HostTestFixture, 환경 설정)
16-testing-library.mdFunctorium.Testing 라이브러리 (로그/아키텍처/소스생성기/Job 테스트)

개발과 운영이 같은 언어로 소통할 수 있도록 관측성 사양을 정의합니다. Field/Tag 네이밍부터 구조화된 로깅, 메트릭, 분산 트레이싱까지 일관된 관측성 체계를 구축합니다.

문서설명
08-observability.mdObservability 사양 (Field/Tag, Meter, 메시지 템플릿)
18b-observability-naming.mdObservability 네이밍 가이드 (코드, Logger 메서드)
19-observability-logging.mdObservability 로깅 상세
20-observability-metrics.mdObservability 메트릭 상세
21-observability-tracing.mdObservability 트레이싱 상세

프로덕션 환경의 비정상 종료를 사후 분석하기 위한 크래시 덤프 수집과 분석 가이드입니다.

문서설명
22-crash-diagnostics.md크래시 덤프 핸들러 설정 및 분석 가이드
문서설명
A01-vscode-debugging.mdVSCode 디버깅 및 개발 환경 설정
A02-git-reference.mdGit 명령어 참조 및 Git Hooks
A03-response-type-evolution.mdFinResponse 타입 진화 기록
A04-architecture-rules-coverage.md아키텍처 규칙 검증 커버리지 매트릭스
문서설명
dto-strategy-review.mdDTO 매핑 전략 리뷰 (DDD & Hexagonal Architecture 관점)
문서설명
book-writing-guide.md서적 집필 가이드
00-writing-guide.md문서 작성 가이드 (가이드 문서 작성 규칙)