--- # πŸ’‘ Lesson Learned: μƒνƒœ κ΄€λ¦¬μ˜ 단일 μ§„μ‹€ 곡급원 원칙 (Data Consistency) ## 🎯 문제 상황 (The Problem) ν…ŒνŠΈλ¦¬μŠ€ κ²Œμž„μ€ 'ν˜„μž¬ λ³΄λ“œ μƒνƒœ'와 'μ›€μ§μ΄λŠ” 블둝 μœ„μΉ˜'λΌλŠ” 두 κ°€μ§€ 핡심 데이터λ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 데이터듀이 μ—¬λŸ¬ κ³³μ—μ„œ λ…λ¦½μ μœΌλ‘œ μ—…λ°μ΄νŠΈλ  μœ„ν—˜μ΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ A λΆ€λΆ„μ—μ„œ 값을 λ°”κΎΈκ³ , B λΆ€λΆ„μ—μ„œ 같은 값을 λ‹€λ₯΄κ²Œ κ³„μ‚°ν•œλ‹€λ©΄ **데이터 뢈일치(Inconsistency)**κ°€ λ°œμƒν•©λ‹ˆλ‹€. ## πŸ”¬ κ·Όλ³Έ 원인 (Root Cause) μ‹œμŠ€ν…œμ˜ 핡심 μƒνƒœκ°€ λΆ„μ‚°λ˜μ–΄ κ΄€λ¦¬λ˜κ³  μžˆμ—ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈμ™€ 둜직이 각자 'μ§„μ‹€'이라고 λ―ΏλŠ” 데이터λ₯Ό κ°€μ§€κ³  μΆ©λŒν•  κ°€λŠ₯성이 λ†’μ•˜μŠ΅λ‹ˆλ‹€. ## βœ… ν•΄κ²°μ±… (The Solution) **Redux/Zustand νŒ¨ν„΄μ„ μ°¨μš©ν•˜μ—¬ λͺ¨λ“  κ²Œμž„μ˜ 핡심 μƒνƒœ(State)**λ₯Ό `src/TetrisGame.jsx` μ»΄ν¬λ„ŒνŠΈκ°€ κ΄€λ¦¬ν•˜λŠ” **단일 지점(Single Source of Truth)**으둜 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  데이터 변경은 이 쀑앙 μ €μž₯μ†Œλ₯Ό 톡해 μ΄λ£¨μ–΄μ§€κ²Œ ν–ˆμŠ΅λ‹ˆλ‹€. ## πŸ’‘ κ΅ν›ˆ (Lesson Learned) > **"μƒνƒœλŠ” 였직 ν•œ κ³³μ—μ„œλ§Œ μ •μ˜ν•˜κ³ , λͺ¨λ“  λ‘œμ§μ€ κ·Έ μƒνƒœλ₯Ό 읽고 μ“°λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•΄μ•Ό ν•œλ‹€."** > λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ„ 섀계할 λ•Œ, 핡심 λ°μ΄ν„°μ˜ 흐름(Data Flow)κ³Ό μ±…μž„ λ²”μœ„(Responsibility)λ₯Ό λͺ…ν™•νžˆ λΆ„λ¦¬ν•˜λŠ” 것이 κ°€μž₯ μ€‘μš”ν•©λ‹ˆλ‹€. ## πŸ”— κ΄€λ ¨ ν‚€μ›Œλ“œ `Single Source of Truth`, `Redux Pattern`, `State Management`, `Predictable State` ---