22 lines
1.4 KiB
Markdown
22 lines
1.4 KiB
Markdown
---
|
|
# 💡 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`
|
|
--- |