--- # πŸ’‘ Lesson Learned: μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜μ˜ μ€‘μš”μ„± (The Need for Abstraction) ## 🎯 문제 상황 (The Problem) 이번 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ, μ½”λ“œλ₯Ό μ§œλŠ” 것이 μ•„λ‹ˆλΌ 'μ–΄λ–€ ꡬ쑰둜 μ§€μ§€'κ°€ κ°€μž₯ μ–΄λ €μ› μŠ΅λ‹ˆλ‹€. μ΄λŠ” λ‹¨μˆœνžˆ 기술적인 λ¬Έμ œκ°€ μ•„λ‹Œ **섀계 νŒ¨ν„΄(Design Pattern)**κ³Ό κ΄€λ ¨λœ λ¬Έμ œμž…λ‹ˆλ‹€. ## πŸ”¬ κ·Όλ³Έ 원인 (Root Cause) λͺ¨λ“  λ‘œμ§μ„ ν•œ νŒŒμΌμ— λ•Œλ € λ„£μœΌλ €λŠ” μœ ν˜Ήμ— λΉ μ§€λŠ” 것, 즉 'μŠ€νŒŒκ²Œν‹° μ½”λ“œ'λ₯Ό λ§Œλ“€ μœ„ν—˜μ΄ κ°€μž₯ 큰 λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. λͺ¨λ“  것을 ν•œκ³³μ—μ„œ μ²˜λ¦¬ν•˜λ € ν–ˆκΈ° λ•Œλ¬Έμ— μœ μ§€λ³΄μˆ˜μ„±κ³Ό ν™•μž₯성이 0에 μˆ˜λ ΄ν–ˆμŠ΅λ‹ˆλ‹€. ## βœ… ν•΄κ²°μ±… (The Solution) **μ•„ν‚€ν…μ²˜μ  뢄리 원칙(Separation of Concerns, SoC)**을 μ μš©ν•˜μ—¬ μ½”λ“œλ₯Ό λ‹€μŒκ³Ό 같이 μ—­ν• λ³„λ‘œ λ‚˜λˆ΄μŠ΅λ‹ˆλ‹€: 1. **κ²Œμž„ κ·œμΉ™:** `gameWorker.js` (논리 μ—”μ§„) 2. **μƒνƒœ 관리:** `TetrisGame.jsx` (λ°μ΄ν„°μ˜ μΆœμž…κ΅¬) 3. **λ Œλ”λ§:** React μ»΄ν¬λ„ŒνŠΈ (화면에 λ³΄μ—¬μ£ΌλŠ” μ—­ν• λ§Œ μˆ˜ν–‰) ## πŸ’‘ κ΅ν›ˆ (Lesson Learned) > **"μ‹œμŠ€ν…œμ„ ꡬ성할 λ•ŒλŠ” 'μ±…μž„ 뢄리(Separation of Concerns)'λ₯Ό μ΅œμš°μ„  μ›μΉ™μœΌλ‘œ μ‚Όμ•„μ•Ό ν•œλ‹€."** > κΈ°λŠ₯이 λ³΅μž‘ν•΄μ§ˆμˆ˜λ‘, μ½”λ“œλŠ” λ°˜λ“œμ‹œ 경계가 λͺ…ν™•ν•œ λͺ¨λ“ˆλ“€λ‘œ λΆ„λ¦¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. ## πŸ”— κ΄€λ ¨ ν‚€μ›Œλ“œ `Separation of Concerns`, `Modular Design`, `Microservices Pattern` ---