---
# 💡 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`
---