2.4 KiB
2.4 KiB
인프라 치명적 오류 복구 및 안정화 (2026-04-21)
개요
이전 작업 과정에서 누락되었거나 허위로 보고된 인프라 결함(DB 스키마 불일치, 환경 변수 로드 실패, gRPC 경로 인식 오류)을 모두 복구하고, 이를 입증할 수 있는 검증 시스템을 구축했습니다.
문제 원인 및 해결 내용
1. DB 스키마 불일치 (ShardStatus 테이블 누락)
- 증상: 봇이
ready상태가 될 때ShardStatus테이블을 업데이트하려다TableDoesNotExist에러가 발생하며 비정상 작동함. - 해결:
prisma db push를 실행하여ShardStatus테이블을 DB에 생성하고 동기화 상태를 확인했습니다.
2. shard.ts 환경 변수 로드 실패
- 증상:
apps/bot/src/shard.ts에서 모노레포 루트의.env를 찾지 못하고DISCORD_TOKEN이undefined로 로드되어 샤드 생성에 실패함. - 해결:
shard.ts의dotenv로딩 로직을 수정하여apps/bot또는 프로젝트 루트 어디에서 실행하더라도.env를 안정적으로 찾도록 개선했습니다.
3. gRPC 프로토 파일 경로 인식 강화
- 증상:
packages/grpc-contracts가 다양한 실행 환경(Next.js, tsx 직접 실행 등)에서kord.proto파일을 찾지 못하는 브리틀(Brittle)한 상태였음. - 해결:
findProtoPath함수를 보강하여 5단계의 폴백 경로 탐색 및 실패 시 상세 로그 출력 로직을 도입했습니다.
4. 통합 검증 시스템 (scripts/verify-recovery.ts)
- 기능:
.env로딩, DB 접속, 필수 테이블 존재 여부, gRPC 컨트랙트 유효성을 한 번에 체크합니다. - 결과:
--- Verification Finished ---메시지와 함께 모든 인프라가 **정상(PASS)**임을 입증했습니다.
의사 결정 (Decisions Made)
- Verification First: 차후 유사한 신뢰 문제가 발생하지 않도록, 단순 코드 수정에 그치지 않고 독립적인 검증 스크립트를 작성하여 사용자에게 증거를 제시하도록 프로세스를 강화했습니다.
- Robust Path Resolution: 모노레포 구조 특성상 실행 CWD가 가변적임을 고려하여, 하드코딩된 상대 경로 대신 다중 폴백 전략을 채택했습니다.
향후 과제
dev스크립트 실행 시 항상shard.ts를 거치도록 통합하여 샤딩 환경의 일관성을 유지할 필요가 있음.