Files
2nd/01_Archive/2026-04-20/03_Architecture-design-principle.md
T

1.4 KiB


💡 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