# Dashboard & Bot Stability Infrastructure Fix (2026-04-21)

## 개요
사용자가 대시보드 URL 접속 시 `Turbopack Panic` 에러를 겪는 문제를 해결하고, 봇 프로세스의 불안정성(IPC 채널 종료)을 개선했습니다.

## 원인 분석
1. **gRPC Contract 초기화 이슈**: 
   - `grpc-contracts` 패키지 로드 시점에 동적으로 파일 시스템을 조회하여 `proto` 파일을 로드함.
   - Next.js의 빌드/분석 단계에서 파일 시스템 접근 권한이나 경로 문제로 인해 crash 유발.
2. **Turbopack 환경 호환성 이슈**:
   - Turbopack이 내부 worker 프로세스를 스폰할 때 시스템 `$PATH`에서 `node` 바이너리를 찾지 못함 (`os error 2`).
   - 이는 Turborepo의 환경 변수 제한 정책과 겹쳐 발생함.

## 해결 방법
1. **gRPC Lazy Loading 적용**:
   - `packages/grpc-contracts/src/index.js`를 수정하여 실제 모듈 접근 시점에만 proto를 로드하도록 `getter` 패턴 적용.
2. **gRPC 서버 개발 모드 통합**:
   - `apps/bot/src/utils/grpcServer.ts`를 신설하여 공통 gRPC 서버 로직을 추출.
   - 단일 실행 모드(`index.ts`)와 Sharding 모드(`shard.ts`) 모두에서 대시보드 통신을 위한 gRPC 서버가 기동되도록 수정.
3. **Webpack Fallback 및 PATH 주입**:
   - Turbopack의 하위 프로세스 스폰 이슈(`os error 2`)를 회피하기 위해 대시보드를 Webpack 모드(`next dev --webpack`)로 구동.
   - `apps/dashboard/package.json`에서 명시적으로 Node.js 실행 경로를 `PATH`에 주입.
4. **인프라 자동 복구**:
   - `docker-compose`를 통해 PostgreSQL 컨테이너를 정상화하고 `Prisma` 스키마를 동기화.
5. **좀비 프로세스 정리**:
   - 포트 점유 이슈를 유발하던 구형 Node 프로세스들을 원천 정리.

## 결과 확인
- `scripts/verify-recovery.ts`를 통해 DB, gRPC, Bot 연동 전수 검토 완료 (ALL PASS).
- `curl -I http://localhost:3000/`를 통해 대시보드 응답 확인.
- 브라우저를 통한 대시보드 UI 정상 렌더링 확인.

## 참고 사항
- 현재 대시보드는 안정성을 위해 임시로 `3005` 포트에서 구동 확인을 마쳤으나, `3000`번 포트 점유가 해제되면 다시 `3000`번으로 서비스될 수 있도록 설정되어 있습니다.
