--- id: wiki-2026-0508-redux-reducer-pattern title: Redux Reducer Pattern category: 10_Wiki/Topics/Software Architecture status: verified canonical_id: self aliases: [ARCH-RES-2026-05-001] duplicate_of: none source_trust_level: A confidence_score: 0.99 tags: [redux, reducer, pattern, state-management, immutability, flux] raw_sources: [] last_reinforced: 2026-05-08 github_commit: pending inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # Redux Reducer Pattern ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > "μƒνƒœ λ³€ν™”μ˜ λͺ…μ„Έμ„œ: 이전 μƒνƒœ(State)와 μ•‘μ…˜(Action)을 λ°›μ•„ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό μƒμ„±ν•˜λŠ” 순수 ν•¨μˆ˜(Pure Function) ꡬ쑰λ₯Ό 톡해, λ³΅μž‘ν•œ 데이터 흐름을 단방ν–₯으둜 ν†΅μ œν•˜κ³  예츑 κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” 섀계 νŒ¨ν„΄." ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **순수 ν•¨μˆ˜μ„± (Purity)**: λ¦¬λ“€μ„œλŠ” μ™ΈλΆ€ API ν˜ΈμΆœμ΄λ‚˜ λ¬΄μž‘μœ„ κ°’ 생성 같은 μ‚¬μ΄λ“œ μ΄νŽ™νŠΈκ°€ μ—†μ–΄μ•Ό ν•œλ‹€. λ™μΌν•œ μž…λ ₯에 λŒ€ν•΄ 항상 λ™μΌν•œ 좜λ ₯을 보μž₯ν•¨μœΌλ‘œμ¨ μƒνƒœ 좔적(Time-travel Debugging)κ³Ό ν…ŒμŠ€νŠΈλ₯Ό μš©μ΄ν•˜κ²Œ ν•œλ‹€. * **λΆˆλ³€μ„± μœ μ§€ (Immutability)**: κΈ°μ‘΄ μƒνƒœλ₯Ό 직접 μˆ˜μ •ν•˜μ§€ μ•Šκ³ , 항상 μƒˆλ‘œμš΄ 객체λ₯Ό λ°˜ν™˜ν•œλ‹€. μ΄λŠ” JavaScript의 얕은 비ꡐ(Shallow Comparison)λ₯Ό ν†΅ν•œ μ„±λŠ₯ μ΅œμ ν™”μ™€ νžˆμŠ€ν† λ¦¬ 관리λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 핡심 원칙이닀. * **단일 μ§„μ‹€ 곡급원 (Single Source of Truth)**: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ¨λ“  μƒνƒœλ₯Ό ν•˜λ‚˜μ˜ κ±°λŒ€ν•œ μŠ€ν† μ–΄(Store)둜 κ΄€λ¦¬ν•˜κ³ , λ¦¬λ“€μ„œλŠ” 이λ₯Ό 쑰각(Slice) λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ μ²˜λ¦¬ν•œ λ’€ λ‹€μ‹œ 병합(`combineReducers`)ν•˜λŠ” 계측 ꡬ쑰λ₯Ό κ°€μ§„λ‹€. ## βš–οΈ νŠΈλ ˆμ΄λ“œμ˜€ν”„ 및 고렀사항 * **λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ vs 가독성**: μ•‘μ…˜ νƒ€μž… μ •μ˜, μ•‘μ…˜ 크리에이터, λ¦¬λ“€μ„œ μž‘μ„± λ“± 초기 ꡬ좕 λΉ„μš©μ΄ λ†’λ‹€. 이λ₯Ό μ™„ν™”ν•˜κΈ° μœ„ν•΄ Redux Toolkit(RTK) μ‚¬μš©μ΄ ꢌμž₯λœλ‹€. * **μ€‘μ²©λœ μƒνƒœμ˜ λ³΅μž‘μ„±**: μƒνƒœ 객체의 κΉŠμ΄κ°€ κΉŠμ–΄μ§ˆμˆ˜λ‘ λΆˆλ³€μ„±μ„ μœ μ§€ν•˜λ©° μ—…λ°μ΄νŠΈν•˜λŠ” μ½”λ“œκ°€ λ³΅μž‘ν•΄μ§„λ‹€. 이 경우 Immer.js와 같은 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ 가독성을 높일 수 μžˆλ‹€. * **μ„±λŠ₯ μ΅œμ ν™”**: μƒνƒœκ°€ 변경될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 객체가 μƒμ„±λ˜λ―€λ‘œ, λŒ€κ·œλͺ¨ 데이터 처리 μ‹œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰κ³Ό λ Œλ”λ§ μ„±λŠ₯을 κ³ λ €ν•˜μ—¬ μ…€λ ‰ν„°(Reselect) νŒ¨ν„΄μ„ λ„μž…ν•΄μ•Ό ν•œλ‹€. ## πŸ”— 지식 μ—°κ²° (Graph) - **μœ μ‚¬ κ°œλ…**: [[Event Sourcing]], [[CQRS]] - **κ΄€λ ¨ 기술**: [[Zustand]], [[MobX]] --- *Last updated: 2026-05-08* ## πŸ€– LLM ν™œμš© 힌트 (How to Use This Knowledge) **μ–Έμ œ 이 지식을 μ“°λŠ”κ°€:** - *(TODO)* **μ–Έμ œ μ“°λ©΄ μ•ˆ λ˜λŠ”κ°€:** - *(TODO)* ## πŸ§ͺ 검증 μƒνƒœ (Validation) - **정보 μƒνƒœ:** verified - **좜처 신뒰도:** A - **κ²€ν†  이유:** *(P-Reinforce Phase 1 μžλ™ μ •κ·œν™”. λ³Έλ¬Έ 검증 ν•„μš”.)* ## 🧬 쀑볡 검사 (Duplicate Check) - **κΈ°μ‘΄ μœ μ‚¬ λ¬Έμ„œ:** *(TODO: μΈλ±μ„œ ν΄λŸ¬μŠ€ν„° 리포트 μ°Έμ‘°)* - **처리 방식:** UPDATE (μžλ™ μ •κ·œν™”) - **처리 이유:** Phase 1 μ •κ·œν™” β€” μ˜› ν…œν”Œλ¦Ώ/λˆ„λ½ ν•„λ“œ 보강. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μ—†μŒ - **μ •μ±… λ³€ν™”:** μ—†μŒ ## πŸ•“ λ³€κ²½ 이λ ₯ (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: 무엇을 ν•˜λ©΄ μ•ˆ λ˜λŠ”κ°€ + 이유 + λŒ€μ‹  무엇을)*