용어집
Aggregate Root (집합체 루트)
섹션 제목: “Aggregate Root (집합체 루트)”도메인 모델에서 일관성 경계(consistency boundary)를 정의하는 최상위 엔티티. 외부에서는 Aggregate Root를 통해서만 내부 엔티티에 접근합니다. Functorium에서는 AggregateRoot<TId>로 구현합니다.
public class Order : AggregateRoot<OrderId>{ public void AddItem(Product product, int qty) { /* ... */ }}AggregateRoot<TId>
섹션 제목: “AggregateRoot<TId>”Functorium의 Aggregate Root 추상 클래스. Entity<TId>를 상속하며, 도메인 이벤트 관리 기능을 포함합니다.
AuditableEntity (감사 가능 엔티티)
섹션 제목: “AuditableEntity (감사 가능 엔티티)”IAuditable 인터페이스를 구현한 엔티티. 생성 시간, 수정 시간 등 감사 정보를 자동으로 추적합니다.
Command (명령)
섹션 제목: “Command (명령)”시스템의 상태를 변경하는 요청. 값을 반환하지 않거나 결과만 반환합니다. CQRS에서 쓰기 작업을 담당합니다.
CQS (Command Query Separation)
섹션 제목: “CQS (Command Query Separation)”Bertrand Meyer가 정의한 원칙. 메서드를 Command(상태 변경, 반환 없음)와 Query(상태 변경 없음, 값 반환)로 분리합니다.
CQRS (Command Query Responsibility Segregation)
섹션 제목: “CQRS (Command Query Responsibility Segregation)”Greg Young이 CQS를 아키텍처 수준으로 확장한 패턴. 읽기 모델과 쓰기 모델을 분리하여 각각 최적화합니다.
CursorPagedResult<T>
섹션 제목: “CursorPagedResult<T>”Cursor 기반 페이지네이션 결과를 담는 타입. 다음 페이지를 가리키는 커서 값을 포함합니다.
CursorPageRequest
섹션 제목: “CursorPageRequest”Cursor 기반 페이지네이션 요청. 이전 페이지의 마지막 커서 값과 페이지 크기를 포함합니다. Offset 방식보다 deep page에서 성능이 우수합니다.
Dapper
섹션 제목: “Dapper”경량 ORM(Object-Relational Mapper). SQL을 직접 작성하면서 객체 매핑을 제공합니다. Query 측 어댑터에서 읽기 성능 최적화에 사용합니다.
DapperQueryBase
섹션 제목: “DapperQueryBase”Functorium의 Dapper 기반 Query 어댑터 추상 클래스. SQL을 생성하여 IQueryPort를 구현합니다.
Domain Event (도메인 이벤트)
섹션 제목: “Domain Event (도메인 이벤트)”도메인에서 발생한 의미 있는 사건을 나타내는 객체. IDomainEvent 인터페이스를 구현합니다.
public record OrderCreatedEvent(OrderId OrderId) : IDomainEvent;DomainEventCollector
섹션 제목: “DomainEventCollector”도메인 이벤트를 수집하고 발행하는 서비스. Aggregate Root에서 추가된 이벤트를 트랜잭션 커밋 후 발행합니다.
DTO (Data Transfer Object)
섹션 제목: “DTO (Data Transfer Object)”계층 간 데이터 전달을 위한 객체. CQRS에서 Query 측은 DTO를 반환하여 읽기에 최적화합니다.
EF Core (Entity Framework Core)
섹션 제목: “EF Core (Entity Framework Core)”Microsoft의 ORM 프레임워크. Command 측 Repository 구현에 사용합니다.
EfCoreRepositoryBase
섹션 제목: “EfCoreRepositoryBase”Functorium의 EF Core 기반 Repository 추상 클래스. ToDomain/ToModel 변환 메서드를 통해 도메인 모델과 DB 모델을 분리합니다.
Entity<TId>
섹션 제목: “Entity<TId>”Functorium의 엔티티 추상 클래스. ID로 식별되는 도메인 객체의 기본 클래스입니다.
Fin<T>
섹션 제목: “Fin<T>”LanguageExt의 Result 타입. 성공(T) 또는 실패(Error)를 표현합니다. IsSucc/IsFail로 상태를 확인합니다.
FinResponse<T>
섹션 제목: “FinResponse<T>”Functorium의 Usecase 반환 타입. Fin<T>를 기반으로 하며 Mediator 파이프라인과 호환됩니다.
FinT<IO, T>
섹션 제목: “FinT<IO, T>”LanguageExt의 모나드 변환자. IO<Fin<T>>를 래핑하여 함수형 합성을 지원합니다. Repository 메서드의 반환 타입입니다.
guard()
섹션 제목: “guard()”LanguageExt의 함수. 조건이 충족되지 않으면 FinT 파이프라인을 실패시킵니다.
from _ in guard(order.CanCancel(), Error.New("취소 불가"))IAuditable
섹션 제목: “IAuditable”감사 정보(생성 시간, 수정 시간 등)를 추적하는 인터페이스.
ICommandRequest<TSuccess>
섹션 제목: “ICommandRequest<TSuccess>”Command Usecase의 요청 인터페이스. ICommand<FinResponse<TSuccess>>를 상속합니다.
ICommandUsecase<TCommand, TSuccess>
섹션 제목: “ICommandUsecase<TCommand, TSuccess>”Command Usecase의 핸들러 인터페이스. ICommandHandler를 상속합니다.
IDomainEvent
섹션 제목: “IDomainEvent”도메인 이벤트의 마커 인터페이스.
IDomainEventCollector
섹션 제목: “IDomainEventCollector”도메인 이벤트를 수집하고 추적하는 인터페이스. Track 메서드로 Aggregate의 이벤트를 수집합니다.
ICacheable
섹션 제목: “ICacheable”Usecase 응답 캐싱을 위한 인터페이스. CacheKey와 Expiration을 정의하면 UsecaseCachingPipeline이 자동으로 응답을 캐시합니다.
IEntityId<TId>
섹션 제목: “IEntityId<TId>”Entity ID의 인터페이스. Ulid 기반으로 구현됩니다.
InMemoryQueryBase
섹션 제목: “InMemoryQueryBase”Functorium의 InMemory 기반 Query 어댑터 추상 클래스. 테스트용으로 사용합니다.
InMemoryRepositoryBase
섹션 제목: “InMemoryRepositoryBase”Functorium의 InMemory 기반 Repository 추상 클래스. ConcurrentDictionary를 사용하여 메모리에 데이터를 저장합니다.
LanguageExt의 순수 함수형 IO 효과 타입. 부수 효과를 명시적으로 표현합니다.
IObservablePort
섹션 제목: “IObservablePort”Observability를 위한 마커 인터페이스. RequestCategory 속성으로 Command/Query를 구분하여 메트릭 수집에 사용합니다. IRepository와 IQueryPort가 모두 상속합니다.
IQueryPort<TEntity, TDto>
섹션 제목: “IQueryPort<TEntity, TDto>”Query 측 어댑터 인터페이스. Specification 기반 검색, 페이지네이션, 스트리밍을 지원합니다.
IQueryRequest<TSuccess>
섹션 제목: “IQueryRequest<TSuccess>”Query Usecase의 요청 인터페이스. IQuery<FinResponse<TSuccess>>를 상속합니다.
IQueryUsecase<TQuery, TSuccess>
섹션 제목: “IQueryUsecase<TQuery, TSuccess>”Query Usecase의 핸들러 인터페이스. IQueryHandler를 상속합니다.
IRepository<TAggregate, TId>
섹션 제목: “IRepository<TAggregate, TId>”Command 측 Repository 인터페이스. Aggregate Root 단위의 8개 CRUD 메서드를 정의합니다.
ISoftDeletable
섹션 제목: “ISoftDeletable”논리 삭제를 지원하는 인터페이스. 물리적으로 삭제하지 않고 삭제 플래그를 설정합니다.
IUnitOfWork
섹션 제목: “IUnitOfWork”작업 단위 인터페이스. SaveChanges()로 변경사항을 영속화하고, BeginTransactionAsync()로 명시적 트랜잭션을 시작합니다.
IUnitOfWorkTransaction
섹션 제목: “IUnitOfWorkTransaction”명시적 트랜잭션 스코프 인터페이스. CommitAsync()로 커밋하며, Dispose 시 미커밋 트랜잭션은 자동 롤백됩니다.
Mediator 패턴
섹션 제목: “Mediator 패턴”요청과 핸들러 사이의 직접적인 의존성을 제거하는 패턴. Functorium은 Mediator 라이브러리를 사용하여 Command/Query를 디스패치합니다.
PagedResult<T>
섹션 제목: “PagedResult<T>”Offset 기반 페이지네이션 결과를 담는 타입. 전체 건수, 현재 페이지, 페이지 크기, 데이터 목록을 포함합니다.
PageRequest
섹션 제목: “PageRequest”Offset 기반 페이지네이션 요청. 페이지 번호와 페이지 크기를 포함합니다.
Pipeline (파이프라인)
섹션 제목: “Pipeline (파이프라인)”Mediator의 요청 처리 파이프라인. 검증, 로깅, 트랜잭션 등의 횡단 관심사를 처리합니다.
Query (질의)
섹션 제목: “Query (질의)”시스템의 상태를 변경하지 않고 데이터를 반환하는 요청. CQRS에서 읽기 작업을 담당합니다.
Query Adapter (질의 어댑터)
섹션 제목: “Query Adapter (질의 어댑터)”IQueryPort의 구현체. InMemoryQueryBase, DapperQueryBase 등이 있습니다.
Repository 패턴
섹션 제목: “Repository 패턴”데이터 접근 로직을 추상화하는 패턴. CQRS에서 Command 측의 Aggregate Root 영속화를 담당합니다.
SortDirection
섹션 제목: “SortDirection”정렬 방향을 나타내는 SmartEnum. SortDirection.Ascending(오름차순)과 SortDirection.Descending(내림차순) 두 값을 가집니다.
SortExpression
섹션 제목: “SortExpression”정렬 조건을 표현하는 타입. private 생성자를 가지며 팩터리 메서드로 생성합니다.
SortExpression.Empty— 정렬 없음 (기본값)SortExpression.By("Name")— 단일 필드 오름차순SortExpression.By("Price", SortDirection.Descending)— 단일 필드 내림차순.ThenBy("Name")— 2차 정렬 추가
Specification<T>
섹션 제목: “Specification<T>”비즈니스 규칙을 캡슐화하는 추상 클래스. IsSatisfiedBy 메서드로 후보 객체의 충족 여부를 판단합니다. IQueryPort의 검색 조건으로 사용됩니다.
var spec = new ActiveOrderSpec() & new OrderByCustomerSpec(customerId);var result = await query.Search(spec, page, sort).RunAsync();Stream
섹션 제목: “Stream”IQueryPort의 스트리밍 조회 메서드. IAsyncEnumerable<TDto>를 반환하여 대량 데이터를 메모리에 전체 적재하지 않고 건별 처리합니다.
ToFinResponse()
섹션 제목: “ToFinResponse()”Fin<T>를 FinResponse<T>로 변환하는 확장 메서드. Repository 계층에서 Usecase 계층으로의 타입 변환에 사용합니다.
Transaction Pipeline (트랜잭션 파이프라인)
섹션 제목: “Transaction Pipeline (트랜잭션 파이프라인)”Command Usecase 실행 후 자동으로 SaveChanges를 호출하고 도메인 이벤트를 발행하는 파이프라인.
Ulid
섹션 제목: “Ulid”Universally Unique Lexicographically Sortable Identifier. Functorium의 Entity ID는 Ulid 기반입니다. UUID보다 정렬 가능하고 시간순으로 생성됩니다.
Unit of Work (작업 단위)
섹션 제목: “Unit of Work (작업 단위)”여러 Repository 작업을 하나의 트랜잭션으로 묶는 패턴. IUnitOfWork.SaveChanges()로 일괄 커밋합니다.
Value Object (값 객체)
섹션 제목: “Value Object (값 객체)”ID가 아닌 값으로 식별되는 도메인 객체. 불변이며 동등성 비교가 가능합니다.
추가 학습을 위한 서적, 온라인 리소스, 관련 라이브러리를 확인합니다.