refactor(topics): 멀티 에이전트용 지식 재편 — _Common(공통 기본기) + Domain_* 구조
에이전트 8종(대화형/프로그래머 C·S/디자이너/설계자/기획자/QA/PD/PM)에게 [공통 기본 능력 + 롤별 Specialty] 2층으로 지식을 주입하기 위한 재분류. 문서 내용·포맷은 무수정, 폴더 이동만 (6,372개 문서 수 보존 확인). - Topic_Programming → Domain_Programming (내부 구조 보존) - Topic_Graphic → Domain_Design - Topic_Business → Domain_Product - Topic_General → Domain_General - _Common 신설: Math(구 Topic_Math_Specialty), Reasoning(구 General/From_Thinking & Reasoning), Reasoning_Creativity(구 General/From_창의성), Communication(Poetic_Blog_Writing + From_writing) - 타 도메인의 From_* 폴더는 유지 (출처 표기일 뿐, 이미 도메인에 맞게 분류된 문서) - 빈 폴더 정리 (memory/procedures) - 에이전트→폴더 매핑은 workspace의 .astra/agent-knowledge-map.json (9개 에이전트) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+58
@@ -0,0 +1,58 @@
|
||||
---
|
||||
id: wiki-2026-0508-aoda-accessibility-for-ontarians
|
||||
title: AODA Accessibility for Ontarians with Disabilities Act
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-03FE7E]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.95
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Mega Batch - Wikified AODA-Accessibility-for-Ontarians-with-Disabilities-Act"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
# [[AODA-Accessibility-for-Ontarians-with-Disabilities-Act]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 핵심 요약 작업 진행 중
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
본문 상세 구성 진행 중
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 지식 자산화 및 기존 네트워크 연동 단계.
|
||||
- **정책 변화:** Design & Experience 카테고리의 전문성 확보 및 링크 밀도 최적화.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- Raw Source: [[00_Raw/2026-04-20/AODA-Accessibility-for-Ontarians-with-Disabilities-Act.md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
id: wiki-2026-0508-accessibility-compliance-wcag
|
||||
title: Accessibility Compliance WCAG
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-2801A2]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.95
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Batch 10 - Wikified Accessibility-Compliance-WCAG"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
# [[Accessibility-Compliance-WCAG]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 핵심 내용 요약 예정
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
세부 본문 내용 구성 예정
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 신규 지식 유입에 따른 기존 지식과의 정합성 검증 단계.
|
||||
- **정책 변화:** Design & Experience 분야의 체계적 지식 자산화 진행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- Raw Source: [[00_Raw/2026-04-20/Accessibility-Compliance-WCAG.md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
---
|
||||
id: wiki-2026-0508-americans-with-disabilities-act-
|
||||
title: Americans with Disabilities Act ADA
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-4B67E4]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.95
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Mega Batch - Wikified Americans-with-Disabilities-Act-ADA"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
# [[Americans-with-Disabilities-Act-ADA]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 핵심 요약 작업 진행 중
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
본문 상세 구성 진행 중
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 지식 자산화 및 기존 네트워크 연동 단계.
|
||||
- **정책 변화:** Design & Experience 카테고리의 전문성 확보 및 링크 밀도 최적화.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- Raw Source: [[00_Raw/2026-04-20/Americans-with-Disabilities-Act-ADA.md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
id: wiki-20260508-digital-humanities-redir
|
||||
title: Digital Humanities
|
||||
category: Design & Experience
|
||||
status: merged
|
||||
redirect_to: Digital Humanities
|
||||
canonical_id: Digital Humanities
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [redirect]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-merge 2026-05-08)
|
||||
---
|
||||
|
||||
# Digital Humanities
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 이 문서는 P-Reinforce Phase 2 자동 MERGE에 의해 **[[Digital Humanities]]**로 통합되었습니다.
|
||||
|
||||
---
|
||||
*Redirected to: [[Digital Humanities]]*
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
id: wiki-20260508-environmental-storytelling-redir
|
||||
title: Environmental Storytelling
|
||||
category: Design & Experience
|
||||
status: merged
|
||||
redirect_to: Environmental Storytelling
|
||||
canonical_id: Environmental Storytelling
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [redirect]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-merge 2026-05-08)
|
||||
---
|
||||
|
||||
# Environmental Storytelling
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 이 문서는 P-Reinforce Phase 2 자동 MERGE에 의해 **[[Environmental Storytelling]]**로 통합되었습니다.
|
||||
|
||||
---
|
||||
*Redirected to: [[Environmental Storytelling]]*
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
id: wiki-20260508-ergodic-literature-redir
|
||||
title: Ergodic Literature
|
||||
category: Design & Experience
|
||||
status: merged
|
||||
redirect_to: Ergodic Literature
|
||||
canonical_id: Ergodic Literature
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [redirect]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-merge 2026-05-08)
|
||||
---
|
||||
|
||||
# Ergodic Literature
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 이 문서는 P-Reinforce Phase 2 자동 MERGE에 의해 **[[Ergodic Literature]]**로 통합되었습니다.
|
||||
|
||||
---
|
||||
*Redirected to: [[Ergodic Literature]]*
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
---
|
||||
id: wiki-2026-0508-interface-segregation-principle-
|
||||
title: Interface Segregation Principle (ISP)
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-317AB6]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - Interface Segregation Principle (ISP)"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[Interface Segregation Principle (ISP)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 인터페이스 분리 원칙(Interface Segregation Principle, ISP)은 클라이언트가 자신이 사용하지 않는 동작이나 액션에 의존하도록 강요받아서는 안 된다는 소프트웨어 설계 원칙입니다 [1, 2]. 이 원칙은 불필요한 기능까지 묶여 있는 방대한 '뚱뚱한(fat)' 인터페이스 대신, 목적이 뚜렷하고 초점이 맞춰진(focused) 인터페이스를 사용할 것을 권장합니다 [2]. 이를 통해 각 클라이언트는 정확히 필요한 기능에만 의존할 수 있으며, 불필요한 코드의 무게를 줄이고 테스트 및 업그레이드를 단순화할 수 있습니다 [3].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **초점이 맞춰진 계약(Focused Contracts)**: ISP는 SOLID 원칙의 'I'에 해당하며, 클라이언트가 사용하지 않는 인터페이스에 의존하지 않도록 계약의 범위를 명확히 제한해야 함을 강조합니다 [1, 2].
|
||||
- **분리의 신호(Sign to Split)**: 인터페이스에 하나 이상의 '도메인 동사(domain verb)'가 포함되어 있다면(예: `play`, `record`, `stream` 기능을 모두 포함한 `MediaPlayer` 인터페이스), 이는 해당 인터페이스를 분리해야 한다는 강력한 신호입니다 [2, 3].
|
||||
- **유연한 조합과 의존성 최소화**: 기존의 방대한 인터페이스를 `Playable`, `Recordable`, `Streamable`과 같이 분리된 단위로 쪼개면, 클라이언트는 필요한 인터페이스만 선택적으로 가져올 수 있습니다 [3]. 이는 불필요한 의존성(dead weight)을 제거하여 향후 시스템 업그레이드와 테스트 과정을 크게 단순화합니다 [3].
|
||||
- **결합도 감소와 확장성 확보**: 하나의 인터페이스가 너무 많은 책임을 갖게 되면 시스템이 변경에 취약해집니다 [4]. 인터페이스를 최소 단위로 분리하고 이를 필요한 시점에 조합하여 사용하는 방식은 시스템 간의 결합도를 낮추고, 수정에는 닫혀 있고 확장에는 열려 있는 견고한 아키텍처를 구축하는 핵심 전략이 됩니다 [4].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** , [[Single Responsibility Principle (SRP)]], [[Facade Pattern]]
|
||||
- **Contradictions/Notes:** 소스 내에 ISP에 반대되는 주장은 없습니다. 추가적인 참고 사항으로, 소스는 인터페이스에 여러 도메인 동사가 존재할 경우 이를 분리하는 기준으로 삼으라고 조언합니다 [3].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/Interface Segregation Principle (ISP).md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
id: wiki-2026-0508-linked-data-principles
|
||||
title: Linked Data Principles
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: merged
|
||||
redirect_to: 데이터_엔지니어링_및_가상_인프라_표준
|
||||
canonical_id: wiki-2026-0508-001
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
# Redirect
|
||||
|
||||
이 문서는 Canonical 문서인 [[데이터_엔지니어링_및_가상_인프라_표준]]으로 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
id: wiki-20260508-nash-equilibrium-redir
|
||||
title: Nash Equilibrium
|
||||
category: Design & Experience
|
||||
status: merged
|
||||
redirect_to: Nash Equilibrium
|
||||
canonical_id: Nash Equilibrium
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [redirect]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-merge 2026-05-08)
|
||||
---
|
||||
|
||||
# Nash Equilibrium
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 이 문서는 P-Reinforce Phase 2 자동 MERGE에 의해 **[[Nash Equilibrium]]**로 통합되었습니다.
|
||||
|
||||
---
|
||||
*Redirected to: [[Nash Equilibrium]]*
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
id: wiki-2026-0508-redux-스타일-리듀서-및-액션-관리
|
||||
title: Redux 스타일 리듀서 및 액션 관리
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-EFAFFE]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - Redux 스타일 리듀서 및 액션 관리"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[Redux 스타일 리듀서 및 액션 관리]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> Redux 스타일 리듀서 및 액션 관리는 TypeScript의 식별 가능한 유니언(Discriminated Unions) 패턴이 가장 효과적으로 적용되는 대표적인 사례 중 하나입니다 [1, 2]. 이 패턴을 통해 다양한 액션 객체들을 타입 안전하게 구분하고 상태를 처리할 수 있습니다. 다만, 제공된 소스에서는 이 주제가 식별 가능한 유니언의 단순 활용 예시로만 간략히 언급되어 있어 전반적인 Redux 아키텍처에 대해 논하기에는 소스에 관련 정보가 부족합니다.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **식별 가능한 유니언(Discriminated Unions)의 적용:** TypeScript의 식별 가능한 유니언(또는 태그된 유니언) 패턴은 Redux 스타일의 리듀서를 작성할 때 탁월한 성능과 타입 안전성을 제공합니다 [1]. 이 패턴은 공통된 리터럴 타입의 속성(discriminator)을 사용하여 여러 액션 데이터의 형태 중 현재 어떤 액션이 발생했는지 컴파일러가 정확히 추론할 수 있게 해줍니다 [3, 4].
|
||||
- **프레임워크 전반의 표준 패턴:** 식별 가능한 유니언을 활용한 방식은 단지 특정 라이브러리에 국한되지 않으며, Redux 액션을 비롯하여 API 응답 상태, 컴포넌트 변형(variants) 등 프레임워크 전반에서 데이터를 모델링할 때 널리 사용되는 강력한 패턴입니다 [2].
|
||||
- **정보 부족 명시:** Redux 스타일 리듀서의 구체적인 로직 구성, 미들웨어 처리, 혹은 액션 관리의 심층적인 구조적 설계 등 상세한 내용은 제공된 문서에 포함되어 있지 않으므로 소스에 관련 정보가 부족합니다.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[Discriminated_Unions|Discriminated Unions]], [[Type Narrowing]]
|
||||
- **Contradictions/Notes:** 소스에 관련 정보가 부족합니다. 소스는 Redux 자체에 대한 깊은 설명보다는 TypeScript의 타입 시스템을 설명하면서 그 예시로만 Redux를 간략하게 다루고 있습니다.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/Redux 스타일 리듀서 및 액션 관리.md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
id: wiki-2026-0508-snyk-open-source
|
||||
title: Snyk Open Source
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-F26CB3]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - Snyk Open Source"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[Snyk Open Source]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> Snyk Open Source는 애플리케이션을 구성하는 서드파티 종속성(third-party dependencies)을 스캔하여 알려진 보안 취약점을 탐지하는 소프트웨어 구성 분석(SCA, Software Composition Analysis) 도구입니다 [1, 2]. 이 도구는 `package.json`, `pom.xml`, `requirements.txt`와 같은 매니페스트 파일을 검사하고 Snyk의 엄선된 취약점 데이터베이스와 대조하여 위험 요소를 식별합니다 [3]. 또한, 취약한 패키지를 안전한 버전으로 업그레이드할 수 있도록 풀 리퀘스트(Pull Request)를 자동으로 생성하는 기능을 제공하여 신속한 보안 패치를 돕습니다 [3].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **오픈소스 종속성 관리의 중요성:** 오늘날 애플리케이션의 80~90%는 오픈소스 종속성으로 구성되어 있습니다 [4]. 따라서 이 도구를 활용해 npm, Maven, PyPI 등 패키지 매니저의 알려진 CVE(Common Vulnerabilities and Exposures)를 감지하고 지속적으로 업데이트하는 것은 소프트웨어 공급망 보안의 필수 권장 사항입니다 [1, 4].
|
||||
- **Snyk Code(SAST)와의 차이점:** 두 도구는 종종 혼동되지만 스캔하는 대상과 방어하는 위협 벡터가 완전히 다릅니다 [3, 5]. Snyk Code가 개발팀이 직접 작성한 퍼스트파티(first-party) 코드의 취약점을 탐지하는 SAST 도구라면, Snyk Open Source는 외부에서 가져온(import) 서드파티(third-party) 라이브러리의 취약점을 찾아내는 SCA 도구입니다 [1, 2].
|
||||
- **플랫폼 통합 및 시너지:** Snyk Open Source는 Snyk Code, Snyk Container, Snyk IaC, Snyk Cloud와 함께 Snyk 보안 플랫폼을 구성하는 5대 제품 중 하나입니다 [6]. 전체 공격 표면(Attack Surface)을 커버하기 위해서는 내부 코드 스캔과 외부 종속성 스캔이 모두 필요하므로 보안 성숙도가 높은 팀은 이 도구들을 함께 실행합니다 [2, 5]. 이를 통해 단일 대시보드와 통합 리포팅 환경에서 보안 검사를 효율적으로 관리할 수 있습니다 [7].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** , [[Snyk Code]]
|
||||
- **Contradictions/Notes:** 소스의 내용 간에 특별한 모순은 발견되지 않았습니다. 소스는 Snyk Open Source(SCA)와 Snyk Code(SAST)가 경쟁 관계가 아니라 완전히 다른 영역을 검사하며, 강력한 보안 태세를 위해 상호 보완적으로 사용되어야 한다는 점을 거듭 강조합니다 [2, 3, 5].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-19*
|
||||
- Raw Source: [[00_Raw/2026-04-20/Snyk Open Source.md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
id: wiki-20260508-structural-type-system-redir
|
||||
title: Structural Type System
|
||||
category: Design & Experience
|
||||
status: merged
|
||||
redirect_to: Structural Type System
|
||||
canonical_id: Structural Type System
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [redirect]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-merge 2026-05-08)
|
||||
---
|
||||
|
||||
# Structural Type System
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 이 문서는 P-Reinforce Phase 2 자동 MERGE에 의해 **[[Structural Type System]]**로 통합되었습니다.
|
||||
|
||||
---
|
||||
*Redirected to: [[Structural Type System]]*
|
||||
@@ -0,0 +1,93 @@
|
||||
---
|
||||
id: wiki-2026-0508-type-declaration
|
||||
title: Type Declaration
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-D3F069]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - Type Declaration"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[Type Declaration]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 타입 선언(Type Declaration)은 TypeScript에서 변수, 함수, 객체 등의 데이터 형태와 규칙을 명시적으로 정의하여 시스템의 예측 가능성을 높이는 과정이다[1, 2]. 주로 `type` 별칭(Type Alias)이나 `interface` 키워드를 사용하여 정의하며, 외부 자바스크립트 라이브러리 사용 시에는 구현부 없이 타입 정보만 제공하는 `.d.ts` 선언 파일을 통해 활용된다[3]. 타입 단언(Type Assertion) 방식과 달리, 명시적인 타입 선언을 활용하면 컴파일러의 엄격한 구조적 타입 검사를 통해 런타임 에러를 사전에 방지할 수 있다[1].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **명시적 타입 선언의 안정성 보장**: 변수나 객체를 생성할 때 타입 단언(`as Type`)을 사용하면 필수 속성이 누락되더라도 타입 에러를 무시하고 넘어가 런타임 버그를 유발할 수 있다[1]. 반면, 올바른 타입 선언(Type Declaration) 문법을 사용해 값을 할당하면 요구되는 속성이 없을 때 컴파일러가 즉시 에러를 발생시켜 안전한 코드를 강제한다[1, 4].
|
||||
- **Interface와 Type Alias의 선언 방식 차이**: TypeScript에서 형태를 선언하는 두 가지 주요 도구는 인터페이스(Interface)와 타입 별칭(Type Alias)이다[2]. 인터페이스는 동일한 이름으로 여러 번 선언할 경우 TypeScript가 이를 하나로 합치는 '선언 병합(Declaration Merging)'을 지원하여 라이브러리 확장에 유리하다[5]. 반면, 타입 별칭은 동일한 이름으로 재선언할 수 없어 더 엄격한 상태 관리가 가능하며, 유니온(Union)이나 튜플(Tuple) 등의 복잡한 타입을 선언할 때 활용된다[2, 5, 6].
|
||||
- **선언 파일 (Declaration Files, `.d.ts`)**: JavaScript 라이브러리를 TypeScript 환경에서 사용할 때는 타입 정의가 필요하다. 이를 위해 실제 구현 코드 없이 타입 정보만을 제공하는 `.d.ts` 선언 파일을 사용하여 컴파일러에게 해당 라이브러리의 형태를 알려줄 수 있다[3].
|
||||
- **불필요한 타입 선언의 생략 (Type Inference)**: 코드를 작성할 때 모든 곳에 명시적인 타입 선언을 할 필요는 없다. TypeScript가 초깃값을 기반으로 값의 타입을 완벽히 유추(Type Inference)할 수 있는 상황에서는 굳이 명시적인 타입을 선언하지 않고 시스템의 추론을 신뢰하는 것이 코드를 간결하고 가독성 있게 유지하는 모범 사례이다[7].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[Type_Alias|Type Alias]], [[Type Assertion]], [[Declaration Merging]]
|
||||
- **Projects/Contexts:** [[TypeScript Type System]]
|
||||
- **Contradictions/Notes:** 객체 타입을 선언할 때 `interface`와 `type` 중 어느 것을 사용할지에 대한 개발자 간의 선호도 논쟁이 존재한다. 일부는 선언 병합의 이점과 성능 최적화를 위해 `interface`를 선호하지만[8-10], 다른 진영에서는 의도치 않은 선언 병합에 의한 오작동을 막고 오류를 명확히 잡기 위해 `type` 선언을 엄격히 사용하는 것을 지향한다[6, 11].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/Type Declaration.md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,105 @@
|
||||
---
|
||||
id: wiki-2026-0508-typescript의-안전한-인터페이스-설계
|
||||
title: TypeScript의 안전한 인터페이스 설계
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-08AE3A]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - TypeScript의 안전한 인터페이스 설계"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[TypeScript의 안전한 인터페이스 설계]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> TypeScript의 인터페이스 설계는 언어의 근본적인 특성인 구조적 타이핑(Structural Typing)의 유연성을 수용하면서도, 의도치 않은 데이터 유입과 런타임 에러를 방어하는 것을 핵심으로 합니다 [1-3]. 이를 위해 개발자는 `interface`와 `type alias`를 전략적으로 선택하고, `readonly`를 통한 불변성 확보, 식별 가능한 유니온을 활용한 상태 관리, 그리고 `satisfies` 연산자나 브랜디드 타입(Branded Types) 같은 고급 기법을 동원해야 합니다 [4-8]. 결과적으로 안전한 인터페이스 설계는 시스템의 예측 가능성을 높이고 변경에 따른 부작용을 최소화하는 견고한 아키텍처적 도구로 작용합니다 [9].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **구조적 타이핑과 과잉 속성 체크 (Structural Typing & EPC)**
|
||||
TypeScript는 객체의 실제 구조가 일치하면 동일한 타입으로 간주하는 구조적 타이핑을 사용합니다 [3, 10]. 이러한 유연성은 예기치 않은 속성의 유입이라는 허점을 만드는데, 이를 방어하기 위해 객체 리터럴 직접 할당 시 과잉 속성 체크(Excess Property Checking, EPC)가 작동합니다 [1, 3]. 더 나아가 할당 과정에서 타입 단언(`as`)을 사용하기보다 `satisfies` 연산자를 활용하면, 객체의 구체적인 속성(리터럴 타입 등)을 유지하면서도 인터페이스 요구사항을 엄격하게 검증하여 과잉 속성과 오타를 컴파일 시점에 차단할 수 있습니다 [8, 11-13].
|
||||
|
||||
* **Interface와 Type Alias의 전략적 선택**
|
||||
성능과 확장성 측면에서 두 도구는 명확한 차이를 가집니다. `interface`는 컴파일러가 이름을 기준으로 캐싱을 수행하며 선언 병합(Declaration Merging)이 가능해 확장에 유리하므로, 핵심 도메인 모델이나 외부 API 계약에 적합합니다 [4, 14, 15]. 반면 `type alias`의 교집합(`&`)은 매번 구조를 재계산하여 성능을 저하시킬 수 있으나, 동일한 이름의 재선언을 막아 엄격한 관리가 가능하므로 비즈니스 로직 내부에서 유용합니다 [4, 15-17].
|
||||
|
||||
* **불변성(Immutability)을 통한 데이터 보호**
|
||||
객체나 배열이 예기치 않게 변경되는 것을 막기 위해 `readonly` 수식어를 사용합니다 [5, 18]. 런타임 오버헤드가 발생하는 `Object.freeze()`와 달리 `readonly`는 컴파일 시점에 완벽히 동작하여 효율적인 데이터 무결성을 제공합니다 [5, 19, 20]. 단, 기본 `readonly`는 얕은(shallow) 수준만 보호하므로, 중첩된 객체를 다룰 때는 매핑 타입과 조건부 타입을 결합한 `DeepReadonly`와 같은 재귀적 타입을 설계해야 완벽한 방어가 가능합니다 [6, 21, 22].
|
||||
|
||||
* **식별 가능한 유니온(Discriminated Unions)과 완전성 검사**
|
||||
공통된 리터럴 속성(태그)을 사용하여 타입을 좁히는(Narrowing) 식별 가능한 유니온 패턴은 상태 관리에서 불가능한 상태를 원천 차단합니다 [6, 23, 24]. 이와 함께 `never` 타입을 활용한 완전성 검사(Exhaustiveness Checking)를 적용하면, 새로운 타입이나 상태가 추가되었을 때 개발자가 이를 누락하지 않도록 컴파일 에러를 발생시켜 빈틈없는 수비 체계를 유지할 수 있습니다 [24-26].
|
||||
|
||||
* **브랜디드 타입(Branded Types)을 활용한 명목적 타이핑**
|
||||
구조적 타이핑의 한계로 인해 본질적으로 다른 데이터(예: 이메일과 일반 이름 문자열)가 섞이는 것을 막기 위해 브랜디드 타입을 사용합니다 [7, 27]. 고유한 표식(`__brand` 등)이나 `unique symbol`을 타입에 부여함으로써 컴파일 시점에 엄격한 명목적 타이핑(Nominal Typing)을 에뮬레이트하며, 외부의 오염된 데이터가 시스템 핵심 로직으로 침투하는 것을 차단합니다 [7, 28, 29].
|
||||
|
||||
* **SOLID 원칙에 기반한 인터페이스 설계**
|
||||
안전한 설계는 객체 지향의 원칙과 궤를 같이합니다. 인터페이스 분리 원칙(ISP)에 따라 한 인터페이스에 너무 많은 책임을 부여하지 않고 최소 단위로 쪼개야 변경에 유연하게 대응할 수 있습니다 [30, 31]. 또한, 복잡한 내부 서브시스템을 단순한 인터페이스로 노출하는 퍼사드(Facade) 패턴을 적용하면, 개발자의 인지 부하를 줄이고 휴먼 에러를 방지할 수 있습니다 [31-33].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[구조적 타이핑]], [[과잉 속성 체크(EPC)]], [[식별 가능한 유니온]], [[불변성(Immutability)]]
|
||||
- **Contradictions/Notes:** `type`과 `interface`의 사용 지침과 관련하여, TypeScript 성능과 캐싱을 고려해 객체 확장에 `interface extends`를 권장하는 측면과 [4, 14], 선언 병합(Declaration Merging)으로 인한 의도치 않은 타입 변경을 방지하기 위해 보다 엄격한 `type`의 사용을 선호하는 개발자들의 의견이 대립하는 사례가 존재합니다 [15, 17, 34, 35].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/TypeScript의 안전한 인터페이스 설계.md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,106 @@
|
||||
---
|
||||
id: wiki-2026-0508-typescript의-인터페이스-및-객체-타입-설계
|
||||
title: TypeScript의 인터페이스 및 객체 타입 설계
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-844A65]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - TypeScript의 인터페이스 및 객체 타입 설계"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[TypeScript의 인터페이스 및 객체 타입 설계]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> TypeScript의 인터페이스와 객체 타입 설계는 명시적인 이름이 아닌 객체의 실제 형태와 속성을 기준으로 타입 호환성을 결정하는 구조적 타이핑(Structural Typing)을 근간으로 합니다. 확장성과 컴파일 성능을 고려하여 인터페이스(Interface)와 타입 별칭(Type Alias)을 전략적으로 선택해야 하며, `readonly` 수식어, 초과 속성 검사(Excess Property Checking), `satisfies` 연산자 등의 도구를 활용해 런타임 오류를 방지하고 견고하고 예측 가능한 객체 경계를 구축하는 것이 설계의 핵심입니다.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
**구조적 타이핑 (Structural Typing) 메커니즘**
|
||||
TypeScript의 객체 타입은 명목적 타이핑(Nominal Typing)과 달리 명시적인 상속 선언 없이도 객체가 가진 속성과 메서드의 "구조"가 일치하면 동일한 타입으로 간주하는 덕 타이핑(Duck Typing) 방식을 따릅니다 [1-3]. 예를 들어, 객체 타입 `{}`는 단순히 빈 객체를 의미하는 것이 아니라 "속성에 접근할 수는 있으나 특정 속성을 강제하지 않는 값"의 집합을 의미합니다 [4]. 이러한 구조적 타이핑은 유연성을 제공하지만, 의도하지 않은 데이터가 객체에 유입될 위험이 있어 세심한 타입 설계가 필요합니다 [3, 5].
|
||||
|
||||
**인터페이스(Interface)와 타입 별칭(Type Alias)의 전략적 선택**
|
||||
객체의 형태를 정의할 때 인터페이스와 타입 별칭은 각기 다른 성능과 확장성 특성을 가집니다.
|
||||
* **성능과 캐싱**: TypeScript 컴파일러는 인터페이스를 처리할 때 해당 이름을 기준으로 타입 관계를 캐싱하여 재사용합니다 [6-8]. 반면 타입 별칭을 통한 교집합(`&`) 연산은 매번 객체의 구조를 평탄화하고 계산해야 하므로 대규모 프로젝트에서는 컴파일 성능을 저하시킬 수 있습니다 [7-9]. 따라서 객체 확장 시에는 교집합 대신 인터페이스의 `extends`를 사용하는 것이 성능상 권장됩니다 [7, 9, 10].
|
||||
* **선언 병합(Declaration Merging)과 관리**: 인터페이스는 동일한 이름으로 여러 번 선언하면 하나의 인터페이스로 합쳐지는 선언 병합을 지원하여, 라이브러리 제작자가 사용자에게 확장 지점을 제공할 때 유용합니다 [11, 12]. 그러나 핵심 비즈니스 로직에서는 예기치 않은 병합으로 인한 오류를 방지하기 위해 타입 별칭을 선호하는 방식도 유효하며, 이를 적절히 이원화하여 사용하는 전략이 필요합니다 [12-14].
|
||||
|
||||
**초과 속성 검사(EPC)와 `satisfies` 연산자를 통한 경계 방어**
|
||||
* **초과 속성 검사 (Excess Property Checking)**: 객체 리터럴을 직접 할당하거나 함수 인자로 전달할 때 대상 인터페이스에 정의되지 않은 초과 속성이 포함되는 것을 차단하는 기능입니다 [3, 15]. 이는 오타나 잘못된 속성 전달을 컴파일 시점에 포착하게 해줍니다 [16, 17]. 하지만 변수에 먼저 선언 및 할당한 후 전달하면 구조적 타이핑의 "최소 요건 충족" 원칙에 따라 이 검사가 작동하지 않는 한계가 있습니다 [5, 18, 19].
|
||||
* **`satisfies` 연산자 도입**: 이러한 한계를 극복하기 위해 `satisfies` 연산자를 활용할 수 있습니다. `satisfies`는 객체가 특정 인터페이스를 만족하는지 엄격히 검사하면서도, 타입 단언(`as`)이나 명시적 어노테이션(`:`)과 달리 객체가 가진 구체적인 리터럴 속성 타입과 추가된 속성에 대한 추론 정보를 잃지 않게 유지해 줍니다 [20-22].
|
||||
|
||||
**선택적(Optional) 속성과 불변성(Immutability) 설계**
|
||||
* **선택적 속성 (`?`)**: 인터페이스 내에서 불확실하거나 조건부로 존재하는 데이터를 모델링할 때 사용되며, 내부적으로는 `undefined`와의 유니온 타입으로 처리되어 타입 안전성을 제공합니다 [23, 24].
|
||||
* **읽기 전용 속성 (`readonly`)**: 런타임 오버헤드 없이 컴파일 시점에 객체 속성의 수정을 금지하여 불변성을 보장합니다 [25-27]. 단, `readonly`는 해당 속성 자체에 대한 얕은(shallow) 보호만 제공하므로, 중첩된 객체 구조 전체를 보호해야 할 때는 재귀적 타입(DeepReadonly) 패턴을 구성해 활용해야 합니다 [28, 29].
|
||||
|
||||
**객체지향 설계 원칙(SOLID)의 반영**
|
||||
거대한 인터페이스 하나에 너무 많은 책임을 부여하면 시스템이 변경에 취약해집니다 [30, 31]. 인터페이스 분리 원칙(Interface Segregation Principle)을 적용하여, 클라이언트가 실제로 사용하는 기능에만 의존하도록 인터페이스를 작게 나누고 이를 합성(Composition)하여 사용하는 것이 유연하고 견고한 설계의 핵심입니다 [12, 30, 32].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[구조적 타이핑(Structural Typing)]], [[초과 속성 검사 (Excess Property Checking)]], [[선언 병합(Declaration Merging)]], [[satisfies 연산자]]
|
||||
- **Contradictions/Notes:** 소스 간 의견 대립이 존재합니다. 일부 개발자(소스 52, 138, 141)는 캐싱 성능 최적화와 외부 확장을 위한 선언 병합 기능 때문에 '인터페이스(Interface) 우선 사용'을 강력히 주장하지만, 또 다른 현업 개발자(소스 138, 140, 147)는 의도치 않은 선언 병합으로 인해 런타임 로직이 오염될 위험과 일관된 문법을 이유로 '모든 상황에서 타입 별칭(Type)만을 사용하는 규칙'을 조직 내에 강제하는 것이 장기 유지보수에 유리하다고 반박합니다.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/TypeScript의 인터페이스 및 객체 타입 설계.md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
---
|
||||
id: wiki-20260508-variance-covariance-contravarian-redir
|
||||
title: Variance (Covariance Contravariance Invariance)
|
||||
category: Design & Experience
|
||||
status: merged
|
||||
redirect_to: Variance (Covariance Contravariance Invariance)
|
||||
canonical_id: Variance (Covariance Contravariance Invariance)
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [redirect]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-merge 2026-05-08)
|
||||
---
|
||||
|
||||
# Variance (Covariance Contravariance Invariance)
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 이 문서는 P-Reinforce Phase 2 자동 MERGE에 의해 **[[Variance (Covariance Contravariance Invariance)]]**로 통합되었습니다.
|
||||
|
||||
---
|
||||
*Redirected to: [[Variance (Covariance Contravariance Invariance)]]*
|
||||
@@ -0,0 +1,100 @@
|
||||
---
|
||||
id: wiki-2026-0508-가상-dom-virtual-dom
|
||||
title: 가상 DOM (Virtual DOM)
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-181AC7]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 가상 DOM (Virtual DOM)"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[가상 DOM (Virtual DOM)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 실제 DOM을 매번 직접 조작하는 대신, 메모리 상에 UI의 가상 표현을 구축한 뒤 이전 상태와 비교(Diffing)하여 실제 변경이 필요한 최소한의 부분만 DOM에 반영함으로써 렌더링 성능을 최적화하는 React의 핵심 아키텍처입니다.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
**1. 가상 DOM의 작동 원리 (디핑 알고리즘)** React는 렌더링 시 **실제 DOM을 직접 조작하지 않고, UI가 어떻게 보여야 하는지에 대한 가상 트리(Virtual Tree)를 메모리에 구축**합니다. 애플리케이션의 상태가 변경되면 새로운 가상 DOM을 생성하고, 이를 실제 DOM의 복사본 역할을 하는 이전 가상 DOM과 비교합니다. 이 비교 과정을 통해 두 트리 간의 차이점을 찾아내고, **오직 변경이 발생한 노드나 속성만을 실제 DOM에 업데이트**하여 연산 과정을 더 빠르고 효율적으로 만듭니다.
|
||||
|
||||
**2. 렌더 단계(Render Phase)와 커밋 단계(Commit Phase)** 가상 DOM을 활용한 업데이트는 명확히 두 단계로 나뉘어 실행됩니다.
|
||||
|
||||
- **렌더 단계:** React가 컴포넌트를 호출하여 새로운 가상 트리를 구축하는 과정입니다.
|
||||
- **커밋 단계:** 계산된 최소한의 변경 사항들을 실제 DOM에 적용하는 과정입니다.
|
||||
|
||||
**3. 실제 DOM 조작 비용의 최소화** 기본적으로 브라우저에서 실제 DOM을 조작하고 레이아웃을 다시 계산하는 작업은 매우 무겁고 비용이 많이 듭니다. 가상 DOM은 이러한 값비싼 DOM 조작 횟수를 최소화하여 성능을 크게 높여줍니다.
|
||||
|
||||
**4. 가상 DOM 연산의 한계와 주의점** 가상 DOM이 실제 DOM 조작 비용을 줄여주지만, 가상 DOM을 업데이트하는 연산 자체도 비용이 듭니다. 컴포넌트 트리가 너무 깊게 중첩되어 있거나, 무의미한 상태 변화로 인해 너무 많은 컴포넌트가 불필요하게 리렌더링될 경우 가상 DOM 트리 생성 및 비교 과정에서 성능 병목이 발생할 수 있습니다.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[재조정 (Reconciliation)]], [[불필요한 리렌더링 방지]]
|
||||
- **Projects/Contexts:** [[대규모 데이터 렌더링 및 가상화 최적화]]
|
||||
- **Contradictions/Notes:** 가상 DOM과 재조정 알고리즘은 일반적인 웹 애플리케이션의 선언적 UI 관리에는 압도적으로 훌륭하지만, 매 프레임 수만 개의 속성이 변해야 하는 3D 게임이나 무거운 애니메이션 환경에서는 오히려 가상 DOM을 비교하는 $O(n)$ 연산 자체가 프레임 저하(Lag)를 유발하는 치명적인 원인이 됩니다. 이러한 특수 환경에서는 가상 DOM을 우회하여 참조(`ref`)를 통한 **명령형 직접 조작(Imperative Manipulation)**을 사용해야만 60FPS를 달성할 수 있습니다.
|
||||
|
||||
---
|
||||
|
||||
_Last updated: 2026-04-15_
|
||||
- Raw Source: [[00_Raw/2026-04-20/가상 DOM (Virtual DOM).md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
id: wiki-2026-0508-라이브러리-타입-선언-dts-확장
|
||||
title: 라이브러리 타입 선언 (dts) 확장
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-73EE30]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 라이브러리 타입 선언 (dts) 확장"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[라이브러리 타입 선언 (dts) 확장]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 라이브러리 타입 선언(.d.ts) 확장은 타입스크립트 환경에서 외부 자바스크립트 라이브러리의 타입 정보를 제공, 패치(patch) 또는 연장하기 위해 수행하는 작업입니다 [1-3]. 주로 인터페이스(Interface)의 '선언 병합(Declaration Merging)' 기능을 활용하여, 기존 라이브러리 코드의 수정 없이 소비자가 필요한 타입 선언을 유연하게 추가할 수 있도록 지원합니다 [2, 4, 5].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **d.ts 파일의 목적과 활용**
|
||||
타입스크립트에서 자바스크립트 라이브러리를 사용할 때는 실제 구현부 없이 타입 정보만 제공하는 선언 파일(.d.ts)이 필요합니다 [3]. 많은 인기 라이브러리는 자체적으로 타입을 제공하거나 `DefinitelyTyped`를 통해 설치할 수 있습니다 [3]. 만약 라이브러리에 타입이 존재하지 않는다면, 개발자가 직접 모듈을 선언하여 컴파일 에러를 억제할 수 있습니다 [3, 6].
|
||||
* **선언 병합(Declaration Merging)을 이용한 타입 패치**
|
||||
라이브러리의 타입 선언을 확장하거나 패치하는 데에는 '인터페이스(Interface)'가 핵심적으로 사용됩니다 [1, 2]. 타입스크립트는 동일한 이름의 인터페이스가 여러 번 선언될 경우 이를 하나의 인터페이스로 자동 병합하는 기능을 갖추고 있습니다 [4, 5].
|
||||
* **라이브러리 확장 지점(Extension Point) 제공**
|
||||
인터페이스의 병합 특성은 라이브러리 제작자가 패키지 사용자(소비자)에게 유용한 타입 확장 지점을 제공할 때 매우 효과적입니다 [2, 5]. 반면 타입 별칭(Type Alias)은 동일한 이름으로 재선언 및 병합이 불가능하므로, 라이브러리 수준의 타입 패치나 확장 용도로는 인터페이스가 권장됩니다 [5, 7].
|
||||
|
||||
*(참고: 구체적인 글로벌(Global) 환경에서의 모듈 수정 템플릿이나, d.ts 파일을 직접 생성하고 퍼블리싱하는 상세한 코드 작성 문법에 대해서는 소스에 관련 정보가 부족합니다 [8].)*
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** , [[선언 병합(Declaration Merging)]], [[타입 별칭 (Type Alias)]]
|
||||
- **Contradictions/Notes:** 소스에 따르면, 일반적인 애플리케이션 코드 작성 시에는 엄격한 관리가 가능한 타입 별칭(Type)을 선호하는 실무 의견이 많지만, 외부 라이브러리 사용자가 타입을 확장해야 하는 특수한 상황에서는 선언 병합이 가능한 인터페이스(Interface)가 절대적으로 더 적합하다는 뚜렷한 용도 차이를 보입니다 [1, 2, 5, 7].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/라이브러리 타입 선언 (d.ts) 확장.md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
id: wiki-2026-0508-몰입감-presence
|
||||
title: 몰입감 (Presence)
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-589F08]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 몰입감 (Presence)"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
# [[몰입감 (Presence)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 몰입감(Presence)은 사용자가 가상 현실이나 전자 환경을 현실 세계보다 우선적으로 수용하여, 비물리적 세계에 실제로 "존재하는 것(being there)"처럼 느끼는 심리적 상태를 의미합니다 [1, 2]. 이는 가상현실(VR) 및 혼합현실(MR) 경험의 성공을 결정짓는 핵심 요소로, 사용자의 참여도, 몰입(Immersion), 그리고 학습 성과를 향상시킵니다 [3, 4]. 그러나 고도의 몰입감을 유지하는 것은 인지 부하(Cognitive Load)를 증가시킬 수 있으며, 사이버 멀미(VR sickness)와 같은 요인에 의해 쉽게 파괴될 수 있습니다 [3, 5].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **몰입감의 정의와 3대 환상(Illusions):**
|
||||
몰입감(Presence)은 가상의 현실을 실제 현실처럼 일시적으로 수용하는 감각을 뜻합니다 [1]. 학자 Slater(2009)에 따르면, 가상 환경에서의 몰입감은 크게 세 가지로 구성됩니다. 첫째는 묘사된 장소에 있는 것처럼 느끼는 '장소의 환상(Place illusion)'이고, 둘째는 가상의 사건이 실제로 일어나고 있다고 믿는 '그럴듯함의 환상(Plausibility illusion)'이며, 셋째는 가상 신체에 대한 '소유권의 환상(Illusion of ownership)'입니다 [6].
|
||||
|
||||
- **유사 개념(Immersion 및 Engagement)과의 관계:**
|
||||
몰입감(Presence)이 가상 세계에 "존재한다"는 감각에 초점을 맞춘다면, 'Immersion(몰입)'은 사용자가 가상 환경에 얼마나 깊이 관여(involvement)되어 있는지를 나타내는 지표로 자주 혼용됩니다 [1]. 반면 'Engagement(참여)'는 내러티브나 시청각적 자극보다는 주로 실제 게임플레이와 상호작용을 통해 발생하는 깊은 개입을 뜻합니다 [7].
|
||||
|
||||
- **학습 성과 및 플로우(Flow)와의 연결:**
|
||||
가상현실과 같은 몰입형 환경에서 몰입감은 사용자 경험을 성공으로 이끄는 초석입니다. 다른 화면 기반의 활동들에 비해 더 뛰어난 과업 수행 능력과 강력한 생리적 반응을 유도합니다 [4]. 이러한 상태는 긍정적인 감정과 강렬한 집중을 수반하는 '플로우(Flow State)' 경험으로 이어져 학습자의 지식 습득과 참여를 효과적으로 촉진합니다 [8, 9].
|
||||
|
||||
- **인지 부하 및 몰입감 저해 요인:**
|
||||
가상 환경에서 높은 실재감을 느끼는 것은 사용자의 정보 처리 과정을 수반하므로, 몰입감이 높아질수록 인지 부하(Cognitive Load) 역시 함께 증가하는 경향을 보입니다 [3, 10]. 더욱이, 시각적-전정 감각의 불일치로 인해 발생하는 사이버 멀미(VR sickness)나 인터페이스의 마찰(Friction) 등은 사용자의 경험을 방해하고 형성된 몰입감을 크게 저하시키거나 파괴할 수 있습니다 [5].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[Flow_State|Flow State]], [[Cognitive Load]]
|
||||
- **Contradictions/Notes:** 소스에 따르면 높은 수준의 가상 몰입감(Virtual Presence)은 학습 성과와 참여도를 긍정적으로 향상시키지만, 가상 콘텐츠를 처리하기 위한 정신적 노력이 요구되어 필연적으로 인지 부하(Cognitive Load)를 증가시킨다는 이중적 특성을 지닙니다 [3, 10].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-19*
|
||||
- Raw Source: [[00_Raw/2026-04-20/몰입감 (Presence).md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
@@ -0,0 +1,93 @@
|
||||
---
|
||||
id: wiki-2026-0508-바운디드-컨텍스트-bounded-context
|
||||
title: 바운디드 컨텍스트 (Bounded Context)
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-7B2713]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 바운디드 컨텍스트 (Bounded Context)"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[바운디드 컨텍스트 (Bounded Context)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 바운디드 컨텍스트(Bounded Context)는 도메인 주도 설계(DDD)에서 크고 복잡한 비즈니스 도메인을 더 작고 관리하기 쉬운 하위 도메인으로 분할한 단위를 의미합니다 [1, 2]. 각 컨텍스트는 고유한 소프트웨어 모델과 보편적 언어(Ubiquitous Language)를 가지며, 도메인의 논리를 캡슐화하여 서로 다른 책임 영역 간의 명확한 경계를 정의합니다 [1, 3]. 이를 통해 소프트웨어 모델을 순수하고 기능에 집중된 상태로 유지하며, 시스템의 복잡성을 효과적으로 관리할 수 있게 돕습니다 [1, 3].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **도메인 분할과 경계 설정**: 바운디드 컨텍스트는 비즈니스 도메인에 대한 깊은 이해를 바탕으로 아키텍처를 설계하는 도메인 주도 설계(DDD)의 핵심 접근법입니다 [1, 4]. 거대하고 복잡한 도메인을 '주문 관리(Order Management)'나 '고객 지원(Customer Support)'과 같이 관리하기 용이한 바운디드 컨텍스트 단위로 나눕니다 [1].
|
||||
* **독립적인 모델과 보편적 언어 보장**: 분할된 각 바운디드 컨텍스트는 자신만의 독립적인 모델과 보편적 언어(Ubiquitous Language)를 갖습니다 [1, 2]. 이는 개발 팀과 비즈니스 전문가 간의 공통된 어휘를 제공하여 커뮤니케이션의 간극을 좁히고, 해당 컨텍스트 내의 모델이 다른 영역의 간섭 없이 순수성을 유지할 수 있도록 만듭니다 [1, 4].
|
||||
* **관심사의 분리(SoC) 실현**: 바운디드 컨텍스트는 시스템 설계 수준에서 관심사의 분리(Separation of Concerns)를 구현하는 방법입니다 [3, 5]. 핵심 도메인의 논리를 식별하고 이를 바운디드 컨텍스트로 캡슐화함으로써, 책임 영역 간의 명확한 경계를 설정하여 유지보수성을 높이고 코드를 모듈화합니다 [3].
|
||||
* **마이크로서비스 아키텍처(MSA)의 논리적 기반**: 복잡한 시스템에서 바운디드 컨텍스트는 마이크로서비스 아키텍처를 설계하는 논리적인 토대가 됩니다 [2]. 사용자 관리, 상품 관리, 주문 관리 등의 기능을 독립적인 모듈로 분리하여 각 영역이 독립적인 모델과 언어를 갖게 함으로써, 한 모듈의 변경이 다른 모듈에 미치는 파급 효과를 효과적으로 차단할 수 있습니다 [2].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** , [[마이크로서비스 아키텍처 (Microservices Architecture)]], [[관심사의 분리 Separation of Concerns, SoC]]
|
||||
- **Projects/Contexts:** 복잡한 비즈니스 도메인 모델링 [1], 객체 지향 및 모듈러 소프트웨어 시스템 설계 [3, 5], 마이크로서비스로의 서비스 분리 및 마이그레이션 [2]
|
||||
- **Contradictions/Notes:** 소스 내에 바운디드 컨텍스트의 효용이나 개념에 대한 상반된 주장은 존재하지 않으며, 일관되게 시스템 복잡성 완화와 마이크로서비스 확장을 위한 핵심 기반으로 설명되고 있습니다.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/바운디드 컨텍스트 (Bounded Context).md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
id: wiki-2026-0508-상태-관리-state-management
|
||||
title: 상태 관리(State Management)
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-58EC09]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 상태 관리(State Management)"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[상태 관리(State Management)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 상태 관리(State Management)는 사용자 입력, API 응답, UI 구성 및 애플리케이션 설정 등 시간이 지남에 따라 변경되는 데이터를 추적하고 유지하는 방법론입니다 [1]. 상태 흐름을 명확하게 관리하지 못하면 애플리케이션의 동작을 예측할 수 없게 되고 디버깅이 심각하게 어려워지며, 기술 부채와 성능 문제(불필요한 리렌더링, 메모리 누수 등)를 유발합니다 [2]. TypeScript 환경에서는 식별 가능한 유니온(Discriminated Unions)과 불변성(Immutability) 강제를 통해 무효한 상태를 원천 차단하고 안전하게 상태를 제어할 수 있습니다 [3-5].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **상태 관리의 중요성과 오남용의 위험성:** 명확한 패턴 없이 여러 곳에서 상태가 수정될 수 있으면 애플리케이션은 예측 불가능해집니다. 이는 버그의 근본 원인 파악을 매우 어렵게 만들고, 중복되거나 오래된 상태(stale state) 및 부수 효과(side-effects)로 인한 기술 부채를 축적시킵니다. 결과적으로 신규 개발자의 코드 이해도를 떨어뜨리고 렌더링 저하나 네트워크 요청 중복 같은 성능 문제를 야기합니다 [1, 2].
|
||||
- **식별 가능한 유니온(Discriminated Unions)을 활용한 상태 모델링:** TypeScript에서 상태 관리 방식을 혁신하는 핵심 패턴은 식별 가능한 유니온입니다 [3, 5]. 이는 '검증 중(validating)', '제출 중(submitting)', '성공(success)', '오류(error)'와 같은 비동기 UI 상태나 폼 제출 워크플로우, Redux 스타일의 리듀서, 라우터 상태 등을 모델링하는 데 완벽하게 작동합니다 [6, 7]. 이 패턴을 사용하면 TypeScript 컴파일러가 모든 분기 처리를 강제하여, 유효하지 않은 상태의 조합 자체를 물리적으로 불가능하게 만듭니다 [5, 8]. 이는 상태 기계(State Machine)를 구축하는 데에도 이상적입니다 [9, 10].
|
||||
- **타입 시스템을 통한 불변성(Immutability) 강제:** 무분별한 상태 변경은 상태 관리에서 애플리케이션의 예측 가능성을 떨어뜨리는 가장 큰 위협입니다 [11]. 이를 막기 위해 TypeScript의 `readonly` 수식어를 사용하여 리듀서나 전역 상태 관리 객체의 불변성을 강제할 수 있습니다 [4, 12]. 특히 복잡한 상태 관리가 필요한 프론트엔드 아키텍처에서는 단순한 얕은(shallow) 보호를 넘어, 중첩된 객체의 모든 속성이 예기치 않게 변경되지 않도록 보장하는 재귀적 불변성(Deep Readonly) 설계가 필수적인 요소로 꼽힙니다 [5].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** , [[불변성(Immutability)]]
|
||||
- **Contradictions/Notes:** 소스 전반에 걸쳐 상태 관리에 있어 불변성 유지(`readonly` 활용)와 타입 시스템(Discriminated Unions)을 통한 엄격한 상태 제어의 중요성에 동의하고 있으며, 상태 관리에 대한 상반된 주장이나 모순점은 발견되지 않았습니다.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/상태 관리(State Management).md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,93 @@
|
||||
---
|
||||
id: wiki-2026-0508-상태-모델링-state-modeling
|
||||
title: 상태 모델링 (State Modeling)
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-BC8C33]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 상태 모델링 (State Modeling)"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[상태 모델링 (State Modeling)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 상태 모델링은 애플리케이션에서 시간에 따라 변화하는 데이터(사용자 입력, API 응답, UI 설정 등)를 구조화하고 추적하는 과정입니다 [1]. 잘못된 상태 관리는 예측 불가능한 동작과 디버깅의 어려움 등 기술 부채를 초래하므로, 견고한 모델링이 필수적입니다 [2]. TypeScript에서는 주로 식별 가능한 유니온(Discriminated Unions)을 활용하여 "유효하지 않은 상태를 원천적으로 불가능하게 만드는" 상태 머신 패턴을 통해 안전하고 명확하게 상태를 모델링합니다 [3-5].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **상태 관리의 중요성과 문제점:** 애플리케이션의 상태는 여러 위치에서 명확한 패턴 없이 수정될 경우 예측 불가능한 동작, 디버깅의 악몽, 불필요한 리렌더링 및 기술 부채를 유발할 수 있습니다 [2]. 따라서 변화하는 데이터를 체계적으로 통제하고 추적하는 모델링 설계가 매우 중요합니다.
|
||||
* **식별 가능한 유니온(Discriminated Unions)의 활용:** TypeScript에서 복잡한 상태를 모델링하는 가장 강력한 패턴은 식별 가능한 유니온(또는 태그된 유니온)입니다 [3, 6]. `state`나 `kind`와 같은 공통 리터럴 속성(식별자)을 사용하여 각기 다른 형태의 데이터를 구별함으로써, 타입 시스템이 안전하게 타입을 좁혀나갈 수 있도록 돕습니다 [7-9].
|
||||
* **유효하지 않은 상태의 원천 차단 (Making Invalid States Impossible):** 상태 모델링의 핵심 목표 중 하나는 컴파일 단계에서 잘못된 상태 조합을 표현할 수 없게 만드는 것입니다 [4, 5, 10]. 이는 타입 자체가 가능한 상태들을 스스로 문서화하고, 코드의 아키텍처적 무결성을 보장하는 효과를 가져옵니다 [10].
|
||||
* **상태 머신(State Machine) 패턴 구현:** 식별 가능한 유니온은 애플리케이션 내의 상태 머신을 구현하는 데 완벽하게 적합합니다 [11, 12]. 네트워크 요청이나 데이터 로딩 상태를 `Idle`, `Fetching`, `Success`, `Failure` 등으로 명확히 나누거나 [8, 12, 13], 복잡한 폼 제출 워크플로우(검증 중, 검증 에러, 제출 중, 성공 등)를 태그된 상태로 모델링할 때 강력한 힘을 발휘합니다 [4].
|
||||
* **완전성 검사(Exhaustiveness Checking)를 통한 안전성 보장:** 상태 모델링을 사용할 때 `never` 타입을 활용한 완전성 검사 기법을 적용할 수 있습니다 [14-17]. 이는 유니온 타입에 새로운 상태가 추가되었을 때 개발자가 이를 처리하는 로직(예: switch 문)을 누락하면 컴파일러가 에러를 발생시키는 방식입니다 [16-18]. 이 메커니즘은 시스템 확장에 따른 부작용과 런타임 버그를 사전에 철저히 차단합니다 [17, 19].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** , [[완전성 검사(Exhaustiveness Checking)]]
|
||||
- **Contradictions/Notes:** 소스에 관련 정보가 부족합니다.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/상태 모델링 (State Modeling).md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,92 @@
|
||||
---
|
||||
id: wiki-2026-0508-선언-병합-declaration-merging
|
||||
title: 선언 병합(Declaration Merging)
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-18CC73]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 선언 병합(Declaration Merging)"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[선언 병합(Declaration Merging)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 선언 병합(Declaration Merging)은 TypeScript에서 동일한 이름을 가진 여러 개의 인터페이스를 선언할 경우, 컴파일러가 이를 자동으로 하나의 단일 인터페이스로 합치는 고유한 기능입니다 [1]. 주로 라이브러리 제작자가 사용자에게 타입 확장 지점을 제공하거나 패치할 때 유용하게 사용되지만, 일반 애플리케이션 코드에서는 의도치 않은 타입 병합을 막기 위해 사용을 지양하는 경우도 많습니다 [2-4].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **동작 원리**: TypeScript에서 인터페이스(Interface)를 동일한 이름으로 여러 번 선언하면, 타입 시스템이 이를 하나의 인터페이스로 합칩니다 [1].
|
||||
* **주요 사용 사례 (라이브러리 수준)**: 이 기능은 특히 라이브러리 코드에서 진가를 발휘합니다 [4]. 라이브러리 소비자가 필요에 따라 기존 선언을 확장(extend)하거나 타입을 패치(patch)할 수 있도록 유용한 확장 지점을 제공하기 때문입니다 [1, 3, 4].
|
||||
* **타입 별칭(Type Alias)과의 차이점**: 인터페이스와 달리, 타입 별칭(Type)은 동일한 이름으로 재선언할 수 없으므로 선언 병합이 발생하지 않습니다 [1]. 이러한 특징 덕분에 타입 별칭을 사용하면 예기치 않은 병합을 방지하고 더 엄격하게 타입을 관리할 수 있습니다 [1, 5].
|
||||
* **개발자 커뮤니티의 관점 및 주의점**: 많은 개발자와 팀은 의도치 않은 선언 병합을 피하고자 애플리케이션 코드 내에서 인터페이스 대신 타입 별칭을 사용하는 방식을 채택합니다 [2, 6]. 호환되지 않는 필드를 가진 두 형태가 우연히 합쳐질 때 발생할 수 있는 오류를 피하기 위해, 선언 병합을 나쁜 관행(Bad Thing™)으로 간주하고 이를 방지하고자 린트(eslint) 규칙으로 인터페이스 사용을 금지하는 사례도 있습니다 [7, 8].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** , [[타입 별칭 (Type Alias)]]
|
||||
- **Contradictions/Notes:** 소스에 따르면 라이브러리 제작 관점에서는 소비자에게 확장을 허용하는 매우 유용한 기능으로 평가받지만 [1, 4], 애플리케이션 개발 팀 관점에서는 의도치 않은 병합 버그를 유발할 수 있어 피해야 할 기능으로 강하게 반대되기도 합니다 [2, 8].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/선언 병합(Declaration Merging).md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
---
|
||||
id: wiki-2026-0508-인터페이스-분리-원칙-interface-segregatio
|
||||
title: 인터페이스 분리 원칙 (Interface Segregation Principle)
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-FD8793]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 인터페이스 분리 원칙 (Interface Segregation Principle)"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[인터페이스 분리 원칙 (Interface Segregation Principle)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 인터페이스 분리 원칙(ISP)은 객체 지향 프로그래밍(OOP)을 위한 5가지 기본 설계 원칙인 SOLID 중 하나로, 로버트 C. 마틴(Robert C. Martin)에 의해 정립되었습니다 [1-3]. 이 원칙은 클라이언트가 자신이 사용하지 않는 인터페이스에 의존하도록 강요받아서는 안 된다는 것을 핵심으로 합니다 [2, 4]. 이를 달성하기 위해 하나의 크고 범용적인 인터페이스 대신, 작고 구체적이며 특화된 인터페이스를 여러 개 설계하는 것을 권장합니다 [2, 4].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **핵심 개념 및 구현 방식:**
|
||||
인터페이스 분리 원칙은 클라이언트가 자신의 목적을 달성하는 데 꼭 필요한 메서드만 사용해야 함을 의미합니다 [4]. 이를 구현하기 위해 개발자는 다목적의 큰 인터페이스를 구축하는 것을 지양하고, 대신 역할이 제한된 작고 구체적인 전문 인터페이스를 여러 개 생성해야 합니다 [2, 4].
|
||||
* **시스템 설계에서의 기대 효과:**
|
||||
클라이언트가 불필요한 인터페이스에 의존하지 않게 함으로써, 코드 변경 시 발생할 수 있는 파급 효과(effects of changes)를 최소화하고 시스템의 유연성을 크게 높일 수 있습니다 [4]. 궁극적으로 이 원칙은 더 모듈화되고 느슨하게 결합된(loosely coupled) 시스템을 설계하는 데 직접적으로 기여합니다 [3].
|
||||
* **관심사의 분리(SoC)와의 관계:**
|
||||
소프트웨어 개발의 가장 기본적이고 핵심적인 원칙 중 하나인 '관심사의 분리(Separation of Concerns, SoC)' 개념에서 직접적으로 파생된 두 가지 SOLID 원칙 중 하나가 바로 인터페이스 분리 원칙(나머지 하나는 단일 책임 원칙)입니다 [5-7]. 이는 복잡한 시스템을 관리 가능하게 분해하고 모듈성을 향상시키는 데 있어 해당 원칙이 얼마나 중요한지를 보여줍니다 [6, 7].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[SOLID Principles]], [[Object-Oriented-Programming]]
|
||||
- **Projects/Contexts:** [[Clean Architecture]]
|
||||
- **Contradictions/Notes:** 주어진 소스 내에서 인터페이스 분리 원칙에 대한 모순된 주장은 발견되지 않으며, 모든 소스가 이 원칙이 관심사의 분리(SoC) 개념에 뿌리를 두고 있으며 모듈성과 시스템 유연성을 향상시킨다는 점에 동의하고 있습니다.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/인터페이스 분리 원칙 (Interface Segregation Principle).md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
id: wiki-20260508--self-efficacy--redir
|
||||
title: 자기 효능감(Self Efficacy)
|
||||
category: Design & Experience
|
||||
status: merged
|
||||
redirect_to: 자기 효능감 (Self-Efficacy)
|
||||
canonical_id: 자기 효능감 (Self-Efficacy)
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [redirect]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-merge 2026-05-08)
|
||||
---
|
||||
|
||||
# 자기 효능감(Self Efficacy)
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 이 문서는 P-Reinforce Phase 2 자동 MERGE에 의해 **[[자기 효능감(Self Efficacy)]]**로 통합되었습니다.
|
||||
|
||||
---
|
||||
*Redirected to: [[자기 효능감(Self Efficacy)]]*
|
||||
@@ -0,0 +1,107 @@
|
||||
---
|
||||
id: wiki-2026-0508-재조정-reconciliation
|
||||
title: 재조정 (Reconciliation)
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-EDDCE3]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 재조정 (Reconciliation)"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[재조정 (Reconciliation)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> React가 렌더링 시 새로운 가상 DOM(Virtual DOM) 트리와 이전 트리를 비교하여, 실제 DOM에 적용해야 할 최소한의 변경 사항만을 찾아내어 업데이트하는 $O(n)$ 복잡도의 핵심 디핑(Diffing) 알고리즘 프로세스입니다.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
**1. 재조정의 2단계 프로세스** React는 렌더링 중 실제 DOM을 직접 조작하지 않습니다. 대신 재조정은 두 가지 단계로 나뉘어 실행됩니다.
|
||||
|
||||
- **렌더 단계 (Render Phase):** 컴포넌트를 호출하여 UI가 어떻게 보여야 하는지를 나타내는 새로운 가상 트리를 구축합니다.
|
||||
- **커밋 단계 (Commit Phase):** 이전 트리와의 비교(Diffing)를 통해 계산된 변경 사항만을 실제 DOM에 적용합니다.
|
||||
|
||||
**2. 재조정의 3가지 핵심 규칙** React의 디핑 알고리즘은 예측 가능한 규칙에 따라 컴포넌트의 리렌더링 여부를 결정합니다.
|
||||
|
||||
- **타입이 다른 요소:** 같은 위치에 다른 타입의 요소(`div`에서 `span` 등)가 들어오면, React는 이전 하위 트리를 완전히 파괴(언마운트)하고 새로운 트리를 처음부터 다시 구축합니다.
|
||||
- **Key를 통한 식별:** 배열이나 리스트 렌더링 시 고유한 `key`를 부여하면, 위치가 바뀌더라도 React가 `key`를 통해 기존 항목을 식별하여 불필요한 재생성 없이 효율적으로 재배치합니다.
|
||||
- **동일한 컴포넌트 타입:** 같은 타입의 컴포넌트가 동일한 위치에 유지되면, 컴포넌트 인스턴스와 내부 상태(State)는 그대로 보존된 채 변경된 프롭스(Props)만 업데이트됩니다.
|
||||
|
||||
**3. 성능 오버헤드와 한계** 재조정은 일반적인 웹 애플리케이션에서는 매우 효율적이지만, 대규모 DOM 조작이나 고빈도 업데이트가 발생하는 게임 및 애니메이션 환경에서는 심각한 병목 현상을 유발합니다. 예를 들어 60FPS를 유지하기 위한 프레임 예산은 약 16.67ms인데, 약 3,000개의 노드를 가진 복잡한 뷰에서 상태 업데이트가 발생하면 이 트리 비교 연산에 CPU 자원이 크게 소모되어 프레임 레이트가 7 FPS 이하로 급락할 수 있습니다.
|
||||
|
||||
**4. 최신 개선 사항 (React 19)** React 19에서는 재조정의 효율성을 높이기 위한 기능들이 강화되었습니다. `setTimeout`, 프로미스(Promises), 네이티브 이벤트 핸들러 등 모든 컨텍스트에서 **자동 배칭(Automatic Batching)**이 일관되게 적용되어 여러 상태 업데이트를 한 번의 리렌더링으로 묶어 처리합니다. 또한 동시성 렌더링(Concurrent Rendering) 기능이 향상되어, 백그라운드에서 실행되는 무거운 렌더링(저우선순위)을 잠시 중단하고 사용자의 타이핑과 같은 긴급한 고우선순위 업데이트를 즉각적으로 처리할 수 있게 되었습니다.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[가상 DOM (Virtual DOM)]], [[불필요한 리렌더링 방지]]
|
||||
|
||||
- **Projects/Contexts:** , [[대규모 데이터 렌더링 및 가상화 최적화]]
|
||||
|
||||
- **Contradictions/Notes:** 재조정 알고리즘은 선언적 UI 관리를 가능하게 하는 훌륭한 기능이지만 만능은 아닙니다. Three.js(R3F) 기반의 게임이나 대규모 애니메이션 환경처럼 매 프레임 수만 개의 좌표나 속성이 변하는 경우, React의 재조정 과정을 거치면 성능이 붕괴되므로 `useFrame` 등을 활용해 참조(Ref)의 속성을 직접 조작(Direct/Imperative Mutation)하여 재조정을 우회하는 기법이 반드시 필요합니다.
|
||||
|
||||
|
||||
---
|
||||
|
||||
_Last updated: 2026-04-15_
|
||||
- Raw Source: [[00_Raw/2026-04-20/재조정 (Reconciliation).md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
@@ -0,0 +1,102 @@
|
||||
---
|
||||
id: wiki-2026-0508-타입-별칭-type-alias
|
||||
title: 타입 별칭 (Type Alias)
|
||||
category: 10_Wiki/Topics_Art
|
||||
status: needs_review
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-37A8A8]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
tags: [auto-reinforced]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 타입 별칭 (Type Alias)"
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
---
|
||||
|
||||
# [[타입 별칭 (Type Alias)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 타입 별칭(Type Alias)은 TypeScript에서 기존 타입에 새로운 이름을 부여하여 재사용성을 높이는 기능입니다 [1]. 인터페이스(Interface)와 유사하게 객체의 형태를 정의하는 데 사용할 수 있으며, 그 외에도 원시 타입(Primitives), 유니온(Union), 튜플(Tuple) 및 기타 복잡한 타입 조합을 명명할 수 있는 폭넓은 표현력을 갖습니다 [1]. 인터페이스와 달리 선언 병합(Declaration Merging)을 허용하지 않아, 동일한 이름으로 재선언 시 에러를 발생시킴으로써 더 엄격한 타입 관리를 가능하게 합니다 [2, 3].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **유연한 타입 표현력**
|
||||
타입 별칭은 단순히 객체의 형태를 정의하는 것을 넘어 유니온 타입, 교집합(Intersection), 매핑된 타입(Mapped Types), 조건부 타입(Conditional Types) 등 복잡한 타입 구성을 표현하는 데 매우 적합합니다 [1, 4, 5]. 값이 특정 원시 타입이거나 튜플, 혹은 `Record<string, unknown>`과 같은 특수한 유틸리티 타입일 때 이를 간결하게 명명하는 역할을 수행합니다 [1, 6].
|
||||
|
||||
* **인터페이스(Interface)와의 구조적 차이**
|
||||
타입 별칭은 인터페이스와 목적이 겹치는 부분이 많으나 핵심적인 차이가 존재합니다. 가장 큰 차이는 **선언 병합(Declaration Merging)**의 지원 여부입니다. 인터페이스는 동일한 이름으로 여러 번 선언하면 자동으로 하나로 병합되지만, 타입 별칭은 동일한 이름을 재선언하면 컴파일 에러를 반환합니다 [2, 3]. 이 특성 때문에 외부에서 확장해야 하는 라이브러리 코드에는 인터페이스가 유리하지만, 예기치 않은 타입 확장을 막아야 하는 애플리케이션 수준의 비즈니스 로직에는 타입 별칭이 더 안전한 선택이 될 수 있습니다 [2, 3, 7].
|
||||
|
||||
* **컴파일 성능 및 동작 방식**
|
||||
TypeScript 컴파일러는 인터페이스를 처리할 때 해당 이름을 기준으로 평탄화된 단일 객체 타입을 만들고 타입 관계를 캐싱합니다 [8, 9]. 반면, 타입 별칭을 통한 교집합 타입(`&`)은 참조될 때마다 매번 속성을 재귀적으로 병합하고 충돌을 확인해야 하므로 대규모 프로젝트에서는 컴파일 성능 저하의 원인이 될 수 있습니다 [8, 9]. 따라서 TypeScript 성능 가이드에서는 가능하면 교집합보다는 인터페이스 상속(extends)을 사용할 것을 권장하고 있습니다 [8, 10].
|
||||
|
||||
* **실무적 사용 전략**
|
||||
이러한 특성들로 인해, 개발자들 사이에서는 어떤 것을 기본으로 사용할지에 대한 논쟁과 다양한 전략이 존재합니다 [11, 12].
|
||||
- **이원화 전략**: 확장 지점이 필요한 외부와의 계약(Contract)이나 다형성을 띠는 도메인 모델에는 인터페이스를 사용하고, 확장이 필요 없는 내부 비즈니스 로직이나 단순 형태 선언에는 타입 별칭을 사용하는 전략입니다 [3, 13].
|
||||
- **단일화 전략**: 팀 내 혼란("이 경우에는 어떤 걸 써야 하지?")을 방지하기 위해 더 다채로운 표현이 가능하고 선언 병합의 부작용이 없는 타입 별칭만으로 코드베이스를 통일하는 팀도 다수 존재합니다 [4, 6, 14].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Design & Experience 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** , [[유니온 타입(Union Types)]], [[구조적 타이핑(Structural Typing)]], [[선언 병합(Declaration Merging)]]
|
||||
- **Projects/Contexts:** [[대규모 TypeScript 프로젝트의 컴파일 성능 최적화]], [[견고한 도메인 모델 및 API 계약 설계]]
|
||||
- **Contradictions/Notes:** TypeScript 핸드북 및 성능 가이드라인은 컴파일러의 캐싱 이점과 성능 최적화를 이유로 객체 확장 시 교집합을 사용하는 타입 별칭보다 인터페이스 상속(extends)을 사용할 것을 권장합니다 [8-10]. 하지만 실무 현장에서는 의도치 않은 선언 병합을 방지하고 유연성을 얻고자 린팅(Linting) 규칙을 통해 인터페이스 사용을 아예 금지하고 타입 별칭(Type Alias)만을 전면적으로 사용하는 개발 팀들도 많아 명확한 대립이 존재합니다 [4, 6, 15].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/타입 별칭 (Type Alias).md]]
|
||||
---
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
Reference in New Issue
Block a user