---
id: [[P-Reinforce|P-Reinforce]]-AUTO-DDTS-001
category: Unified
confidence_score: 0.98
tags: [auto-reinforced, ddd, type-safety, typescript, domain-model, constraint, [[Reliability|Reliability]], engineering]
last_reinforced: 2026-04-20
---

# [[DDD-Type-Safety|DDD-Type-Safety]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> "비즈니스의 수학적 증명: '주문 수량은 음수가 될 수 없다'거나 '승인된 사용자만 글을 쓸 수 있다'는 비즈니스의 제약 조건을 함수와 타입으로 설계하여, 실수로 잘못된 데이터를 넣으려 할 때 컴파일러가 빨간 줄을 띄워 막아주는 극강의 안정성."

## 📖 구조화된 지식 (Synthesized Content)
도메인 주도 설계의 타입 안전성(DDD-Type-Safety)은 도메인 모델의 불변성(Invariants)을 타입 시스템을 통해 강제하는 일련의 패턴입니다.

1.  **구체적 기법**:
    *   **Branded Types (Nominal Typing)**: 단순 `number`가 아니라 `OrderId`라는 고유 타입을 만들어 실수로 다른 숫자와 섞이지 않게 함. (Nominal-Typing와 연결)
    *   **Validation through Construction**: 생성자나 팩토리 함수에서 검증을 완료한 후 '불변 객체'를 반환하여, 일단 생성된 객체는 항상 유효함을 보장.
    *   **Exhaustive Checks**: 모든 비즈니스 상태 정책을 `[[Discriminated Unions|Discriminated Unions]]`로 정의하여 모든 케이스 정책을 누락 없이 처리. ([[Discriminated-Unions|Discriminated-Unions]]와 연결)
2.  **왜 중요한가?**:
    *   버그가 런타임이 아닌 '코드를 쓰는 시점'에 발견되며, 문서가 아닌 '코드 그 자체'가 가장 정확한 비즈니스 명세서 정책이 되기 때문임. ([[Specification|Specification]]와 연결)

## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- **과거 데이터와의 충돌**: 과거에는 런타임에 `if` 문 정책을 덕지덕지 붙여 방어 코드를 짜는 방식이었으나, 현대 정책은 'Make impossible [[State|State]]s unrepresentable(불가능한 상태를 표현조체 못하게 만들기)'이라는 철학 정책을 통해 타입 시스템 정책의 한계까지 안정성 정책을 밀어붙임(RL Update).
- **정책 변화(RL Update)**: 이제는 단순 데이터 보호 정책을 넘어, 비즈니스 프로세스(Workflow)의 순서 정책조차 타입을 통해 강제하는 '기능적 파이프라인 정책' 설계로 진화 중임. (Standard-Operating-Procedure와 연결)

## 🔗 지식 연결 (Graph)
- Nominal-Typing, [[Discriminated-Unions|Discriminated-Unions]], [[Specification|Specification]], [[Standard-Operating-Procedure|Standard-Operating-Procedure]], [[Reliability|Reliability]], [[Refinement|Refinement]]
- **Key [[Philosophy|Philosophy]]**: Make illegal states unrepresentable.
---
