41 lines
4.5 KiB
Markdown
41 lines
4.5 KiB
Markdown
---
|
|
id: P-REINFORCE-AUTO-9B5D9F
|
|
category: "10_Wiki/💡 Topics/Programming & Language"
|
|
confidence_score: 0.90
|
|
tags: [auto-reinforced]
|
|
last_reinforced: 2026-04-20
|
|
github_commit: "[P-Reinforce] Continuous Worker - 도메인 기반 설계 (DDD) 및 데이터 오염 방지"
|
|
---
|
|
|
|
# [[도메인 기반 설계 (DDD) 및 데이터 오염 방지|도메인 기반 설계 (DDD) 및 데이터 오염 방지]]
|
|
|
|
## 📌 한 줄 통찰 (The Karpathy Summary)
|
|
> 도메인 기반 설계(DDD)에서 데이터 오염 방지는 TypeScript의 구조적 타이핑 한계로 인해 발생하는 '기본 타입에의 집착(Primitive Obsession)' 문제를 해결하기 위한 필수적인 방어 기제입니다 [1]. 브랜디드 타입(Branded Types) 또는 불투명 타입(Opaque Types)을 활용해 구조가 동일한 기본 타입 데이터에 고유한 가상의 식별자를 부여하여 의미가 다른 데이터를 엄격하게 분리합니다 [1]. 이를 통해 오직 사전에 검증된 안전한 데이터만이 시스템의 핵심 비즈니스 로직으로 진입하도록 강제하여 데이터가 섞이거나 오염되는 것을 원천 차단합니다 [2].
|
|
|
|
## 📖 구조화된 지식 (Synthesized Content)
|
|
* **구조적 타이핑의 한계와 데이터 오염의 위험성:**
|
|
TypeScript의 구조적 타이핑은 매우 유연하지만, 이메일 주소와 사용자 이름이 모두 `string` 타입으로 처리되는 것처럼 의미적으로 다른 데이터를 구별하지 못하는 "기본 타입에의 집착(Primitive Obsession)" 문제를 야기합니다 [1]. 컴파일러가 이를 막지 못하기 때문에 잘못된 식별자나 데이터가 전달되는 실수가 발생할 수 있으며, 이는 시스템의 데이터 오염으로 이어집니다 [1].
|
|
|
|
* **브랜디드 타입(Branded Types)을 통한 방어막 구축:**
|
|
데이터 오염을 막기 위해 런타임에는 존재하지 않지만 컴파일 시점에만 존재하는 고유한 속성(예: `__brand`)을 교집합 타입으로 부여하는 브랜디드 타입을 사용합니다 [1]. 이는 명목적 타이핑을 모방하는 기법으로, 외부 침입이나 잘못된 데이터 유입으로부터 성채를 보호하는 일종의 "신분증 시스템" 역할을 수행합니다 [1, 2].
|
|
|
|
* **도메인 엔티티 식별자의 엄격한 분리:**
|
|
도메인 기반 설계(DDD)에서는 `UserId`와 `OrderId`처럼 본질적으로 구조가 같은 타입들을 브랜디드 타입으로 엄격히 분리합니다 [2]. 이렇게 하면 두 식별자 간에 데이터가 실수로 섞이는 것을 방지할 수 있으며, 악의적이거나 잘못된 입력으로부터 안전하다고 확인된 데이터(예: `SanitizedString`)만이 시스템 내부로 들어가도록 통제할 수 있습니다 [2].
|
|
|
|
* **'Parse, Don't Validate' 원칙의 적용:**
|
|
단순히 데이터의 유효성을 체크하는 것을 넘어, "검증하지 말고 파싱하라"는 철학을 적용해야 합니다 [3]. Zod와 같은 파싱 라이브러리를 사용하여 불안정한 런타임 외부 데이터를 신뢰할 수 있는 브랜디드 타입으로 변환(파싱)한 뒤 시스템 내부로 전달함으로써 데이터 무결성을 완벽에 가깝게 보호할 수 있습니다 [3].
|
|
|
|
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
|
|
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
|
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
|
|
|
|
## 🔗 지식 연결 (Graph)
|
|
- **Related Topics:** [[브랜디드 타입 (Branded Types)|브랜디드 타입 (Branded Types)]], [[기본 타입에의 집착 (Primitive Obsession)|기본 타입에의 집착 (Primitive Obsession)]], [[구조적 타이핑 (Structural Typing)|구조적 타이핑 (Structural Typing)]], [[Parse dont validate|Parse, Don't Validate]]
|
|
- **Projects/Contexts:** UserId와 OrderId의 엄격한 분리 모델링, Zod 라이브러리를 활용한 런타임 데이터 파싱
|
|
- **Contradictions/Notes:** TypeScript 자체는 형태를 기준으로 하는 구조적 타이핑 언어이지만, 도메인 주도 설계에서 데이터 오염을 완벽히 차단하기 위해서는 오히려 명목적 타이핑(Nominal Typing)의 특성을 브랜디드 타입이라는 우회적 방법론으로 모방하여 사용해야 합니다 [1, 4].
|
|
|
|
---
|
|
*Last updated: 2026-04-18*
|
|
- Raw Source: 00_Raw/2026-04-20/도메인 기반 설계 (DDD) 및 데이터 오염 방지.md
|
|
---
|