# 2026-04-20: 모노레포 전환 및 gRPC 통신 테스트 완료 (Monorepo & gRPC Test)

대시보드 도입을 위한 프로젝트 구조 개편과 봇-대시보드 간의 실시간 통신 인프라를 구축하고 검증하였습니다.

## 작업 내용 (Work Done)

### 1. 프로젝트 모노레포(Monorepo) 화
- **Turborepo & Yarn Workspaces** 도입: 프로젝트를 모듈화하여 관리하기 위해 모노레포 구조로 전환했습니다.
  - `apps/bot`: 기존 디스코드 봇 로직 이관.
  - `apps/dashboard`: Next.js 기반 웹 대시보드 신규 생성.
  - `packages/db`: Prisma 스키마 및 DB 접근 로직을 공용 패키지로 분리.
  - `packages/grpc-contracts`: gRPC 프로토콜 버퍼와 인터페이스 정의를 위한 공용 패키지 생성.

### 2. 봇 샤딩 및 상태 관리 고도화
- **ShardingManager 도입**: 봇 프로세스를 분할 관리하고 gRPC 서버를 부착하기 위해 최상위 매니저 레이어를 추가했습니다.
- **ShardStatus 추적**: 각 Shard가 실행될 때 자신의 상태와 담당 길드 정보를 DB(`ShardStatus` 테이블)에 기록하도록 구현했습니다.

### 3. gRPC 통신 프록시 서버 구축
- **단일 포트 gRPC 서버**: `ShardingManager` 단에서 `50051` 포트로 gRPC 서버를 실행합니다.
- **메시지 라우팅**: 대시보드로부터 요청이 들어오면 매니저가 `broadcastEval`을 통해 해당 길드를 담당하는 하위 Shard 프로세스로 요청을 전달(Proxy)합니다.

### 4. 대시보드 gRPC 통신 테스트 완료
- **테스트 환경 구성**: Next.js API Route를 통해 봇에게 `Ping`을 쏘고 `Pong` 응답을 받는 라이프사이클을 구현했습니다.
- **UI 검증**: 대시보드 메인 페이지에서 버튼 클릭 시 봇으로부터 성공적으로 응답을 받아 `response`를 렌더링함을 확인했습니다.

## 테스트 결과 (Results)

- **연결 성공**: 대시보드 -> 매니저 -> (방송) -> 봇 워커 -> 매니저 -> 대시보드 흐름이 무차별적인 포트 개방 없이 단일 통로로 성공적으로 작동함.
- **지연 시간**: 로컬 환경 기준 10ms 이내의 빠른 응답 속도를 확인.

## 관련 문서
- [대시보드 아키텍처 결정서](../adr/Dashboard_Architecture_gRPC.md)
