DOCS/journey/plans/archive/260304_51124_먹통_근본원인_해결계획.md

3.3 KiB

260304 51124 먹통 근본원인 해결계획

작성일: 2026-03-04 상태: 미구현 목표: 51124 먹통의 근본 원인(의도분류 재진입 루프)을 제거하고 restart loop 재발을 차단한다.


1. 기준 문서

2. 근본 원인(확정)

  • INTENT_ENGINE=graph + INTENT_USE_LANGGRAPH=true에서
  • IntentGraph.detect_with_workflow() -> classify_intent_node() -> IntentGraph.detect() 재진입 루프가 발생한다.
  • 이 재진입 루프가 Restarting 반복과 CPU 폭주의 직접 원인이다.

3. 범위 고정

포함

  • 51124 실환경 설정값 확인
  • 재진입 루프 차단 코드 수정
  • 회귀 테스트 추가
  • 51124 재배포 및 재발 판정

제외

  • 23/24 자동 전환(페일오버)
  • 스케줄러 구조 개선
  • DB 풀 일반 튜닝
  • 타 서비스 기능 개선

4. 실행 계획

  1. 51124 실환경 값 확정
  • 51124에서 INTENT_ENGINE, INTENT_USE_LANGGRAPH 실제 값을 확인한다.
  • 확인 증적(명령 출력)을 남긴다.
  • 값 미확정 상태에서는 다음 단계를 진행하지 않는다.
  1. 재진입 차단 코드 수정
  • 파일: robeing/rb8001/app/services/brain/intent_graph.py

  • detect()에 내부 호출 가드를 추가한다.

  • workflow 내부 호출이면 detect_with_workflow()를 금지하고 _detect_traditional()만 실행한다.

  • 파일: robeing/rb8001/app/services/brain/intent_langgraph_workflow.py

  • classify_intent_node()IntentGraph.detect() 호출에 내부 호출 가드를 명시한다.

  • classify 단계는 단일 분류 실행으로 종료한다.

  1. 운영 기본값 안전화
  • 파일: robeing/rb8001/docker-compose.yml
  • 기본값을 아래로 고정한다.
  • INTENT_USE_LANGGRAPH=${INTENT_USE_LANGGRAPH:-false}
  • INTENT_ENGINE=${INTENT_ENGINE:-v1}
  1. 회귀 테스트 추가
  • 파일: robeing/rb8001/tests/test_intent_workflow_no_reentry.py
  • 검증 항목:
  • workflow classify 단계에서 detect_with_workflow() 재호출 0회
  • INTENT_ENGINE=graph + INTENT_USE_LANGGRAPH=true에서도 단일 요청 정상 종료
  1. 51124 배포 및 검증
  • 배포: docker compose down && docker compose up -d --build
  • 검증은 실도메인(https://ro-being.com) 기준으로만 수행한다.
  • 30분 관찰 구간을 고정한다.

5. 완료 판정

  • rb8001 컨테이너 Restarting 0회
  • RecursionError 0건
  • GRAPH_RECURSION_LIMIT 0건
  • https://ro-being.com/api/message 3회 연속 성공
  • 30분 관찰 동안 운영자 조작 불가 구간 0회

6. 실패 시 처리

  • 완료 판정 1개라도 미달이면 미완료로 유지한다.
  • 실패 원인과 증적을 troubleshooting 문서로 분리 기록한다.
  • 본 문서에는 troubleshooting 링크만 추가한다.

7. 문서 상태 전환

  • 위 완료 판정 전부 충족 시 본 문서를 plans/archive/로 이동한다.
  • 이동과 동시에 완료 troubleshooting 문서를 연결한다.