# 🏆 프로젝트 회고 및 개발 프로토콜: 테트리스 게임 (P-Reinforce)

## 📄 개요 및 목표 (Objective & Architecture Goal)
본 문서는 테트리스 게임을 완성하는 과정에서 발견된 **'실제 작동 가능한 고성능 웹 애플리케이션 아키텍처 설계 원칙'**과 **'개발 디버깅 방법론'**을 기록한 회고록입니다.

*   **최종 목표:** 사용자 입력(키보드)에 즉각적으로 반응하는, 시각적 애니메이션이 포함된 실시간 게임 구현.
*   **핵심 아키텍처 원칙:** **[Web Worker 기반의 관심사의 분리 (Separation of Concerns)]**. 계산 로직(Engine)과 렌더링/UI 로직(React App)을 완전히 분리하여, 메인 스레드 부하를 최소화하고 성능을 극대화했습니다.

## ⚠️ 발견된 핵심 실패 지점 및 해결 원칙 (Failure & Debugging Protocol)
이번 프로젝트의 가장 큰 교훈은 '논리가 완벽해도 실행 환경이 무너지면 아무 의미가 없다'는 것입니다. 따라서 다음 디버깅 프로토콜을 모든 프로젝트에 적용해야 합니다.

### 1. [프로토콜 1] 파일 경로/내용물 무결성 검증 (The Integrity Check)
*   **문제:** `Unexpected token '<'` 에러 발생.
*   **원인 분석:** Web Worker가 기대하는 것은 순수한 JavaScript 코드여야 하는데, 실제로는 서버의 HTML 에러 페이지(`<html>`)를 받고 실행하려고 시도함. (파일 경로/내용물 불일치).
*   **해결책:** `public` 폴더에 파일이 **물리적으로 존재하며**, 내용물이 100% 순수 JS 코드여야 함을 원칙화합니다.

### 2. [프로토콜 2] 통신 규약 설계 (The Communication Protocol Design)
*   **문제:** 메인 스레드(React)와 Worker 간의 상호작용이 체계적이지 못함.
*   **해결책:** 모든 데이터 교환은 **`postMessage({ type: 'COMMAND', payload: {} })`** 형태의 표준화된 JSON 규약을 따릅니다. (e.g., `INIT`, `KEY_INPUT`, `UPDATE`)

### 3. [프로토콜 3] 개발 환경 재설정 루틴 (The Restart Ritual)
*   가장 흔한 오류는 '캐싱' 또는 '서버의 미인식'입니다. 다음 절차를 반드시 수행해야 합니다:
    1.  **Ctrl + C** 로 서버 완전히 종료.
    2.  `npm start`로 재시작.

## 🎮 최종 성공 아키텍처 요약 (Final Architecture Summary)
| 컴포넌트 | 역할 | 기술적 구현 원칙 | 담당 파일 |
| :--- | :--- | :--- | :--- |
| **GameEngine** | 물리 계산, 규칙 처리, 상태 전이 관리. | Web Worker (`gameWorker.js`) 사용. 메인 스레드와 분리. | `public/gameWorker.js` |
| **State Manager** | UI 상태의 유일한 진실 공급원 (Single Source of Truth). | React State (`useState`). 워커로부터 받은 데이터만 신뢰함. | `src/App.js` |
| **Renderer** | 시각적 표현 담당. | Props 기반 렌더링 (`GameBoard.jsx`). 성능 최적화(Virtual DOM)를 고려해야 함. | `src/components/GameBoard.jsx` |

---