Kord/Docs/WorkDone/2026-04-21_Infrastructure_R...

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_TOKENundefined로 로드되어 샤드 생성에 실패함.
  • 해결: shard.tsdotenv 로딩 로직을 수정하여 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를 거치도록 통합하여 샤딩 환경의 일관성을 유지할 필요가 있음.