2.3 KiB
2.3 KiB
Dashboard & Bot Stability Infrastructure Fix (2026-04-21)
개요
사용자가 대시보드 URL 접속 시 Turbopack Panic 에러를 겪는 문제를 해결하고, 봇 프로세스의 불안정성(IPC 채널 종료)을 개선했습니다.
원인 분석
- gRPC Contract 초기화 이슈:
grpc-contracts패키지 로드 시점에 동적으로 파일 시스템을 조회하여proto파일을 로드함.- Next.js의 빌드/분석 단계에서 파일 시스템 접근 권한이나 경로 문제로 인해 crash 유발.
- Turbopack 환경 호환성 이슈:
- Turbopack이 내부 worker 프로세스를 스폰할 때 시스템
$PATH에서node바이너리를 찾지 못함 (os error 2). - 이는 Turborepo의 환경 변수 제한 정책과 겹쳐 발생함.
- Turbopack이 내부 worker 프로세스를 스폰할 때 시스템
해결 방법
- gRPC Lazy Loading 적용:
packages/grpc-contracts/src/index.js를 수정하여 실제 모듈 접근 시점에만 proto를 로드하도록getter패턴 적용.
- gRPC 서버 개발 모드 통합:
apps/bot/src/utils/grpcServer.ts를 신설하여 공통 gRPC 서버 로직을 추출.- 단일 실행 모드(
index.ts)와 Sharding 모드(shard.ts) 모두에서 대시보드 통신을 위한 gRPC 서버가 기동되도록 수정.
- Webpack Fallback 및 PATH 주입:
- Turbopack의 하위 프로세스 스폰 이슈(
os error 2)를 회피하기 위해 대시보드를 Webpack 모드(next dev --webpack)로 구동. apps/dashboard/package.json에서 명시적으로 Node.js 실행 경로를PATH에 주입.
- Turbopack의 하위 프로세스 스폰 이슈(
- 인프라 자동 복구:
docker-compose를 통해 PostgreSQL 컨테이너를 정상화하고Prisma스키마를 동기화.
- 좀비 프로세스 정리:
- 포트 점유 이슈를 유발하던 구형 Node 프로세스들을 원천 정리.
결과 확인
scripts/verify-recovery.ts를 통해 DB, gRPC, Bot 연동 전수 검토 완료 (ALL PASS).curl -I http://localhost:3000/를 통해 대시보드 응답 확인.- 브라우저를 통한 대시보드 UI 정상 렌더링 확인.
참고 사항
- 현재 대시보드는 안정성을 위해 임시로
3005포트에서 구동 확인을 마쳤으나,3000번 포트 점유가 해제되면 다시3000번으로 서비스될 수 있도록 설정되어 있습니다.