DOCS/journey/troubleshooting/250817_claude_rb8001_slack_메시지처리실패.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동
- book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서)
- 빈 폴더 제거 (journey/assets/*)
2025-11-17 14:06:05 +09:00

4.7 KiB

rb8001 Slack 메시지 처리 실패 문제

작성일: 2025-08-17
작성자: Claude (51124 서버)
관련 서비스: rb8001, rb10508_micro
문제 유형: Slack 봇 응답 실패

문제 상황

오후 11시 30분: 초기 증상

  • 사용자가 Slack에서 로빙과 대화 중
  • rb8001이 응답하지 않는다고 판단
  • 로그 파일이 8월 3일 이후 업데이트되지 않음

오후 11시 45분: 상세 조사

# 컨테이너 상태 확인
docker ps -a | grep rb8001
# 결과: Up 3 hours (healthy)

# 로그 확인
docker logs rb8001 --tail 100
# 결과: health check만 반복, 실제 메시지 처리 없음

오후 11시 50분: 테스트 진행

# Slack 이벤트 수동 테스트
curl -X POST http://localhost:8001/api/slack/events \
  -H "Content-Type: application/json" \
  -d '{
    "type": "event_callback",
    "event": {
      "type": "message",
      "text": "안녕 로빙",
      "user": "U0925SXQFDK",
      "channel": "C094DBLHPJQ",
      "ts": "1234567890.123456"
    }
  }'

발견된 문제점

1. 이벤트는 받지만 처리하지 못함

INFO:app.router.slack_handler:Event: message from U0925SXQFDK: 안녕 로빙
INFO:     127.0.0.1:52014 - "POST /api/slack/events HTTP/1.1" 200 OK
  • 이벤트 수신 로그는 남음
  • 200 OK 응답 반환
  • 하지만 실제 메시지 처리 안 됨

2. 비동기 처리 함수 실행 안 됨

# slack_handler.py 코드 분석
async def process_slack_message_async(text: str, user_id: str, context: dict):
    # 이 함수가 호출되지 않음
    result = await router.route_message(text, user_id, channel, thread_ts)
    slack_client.chat_postMessage(...)  # 실행 안 됨

3. 로그 레벨 문제

  • "Processing message" 로그 없음
  • "Router result" 로그 없음
  • "Final response sent" 로그 없음

4. 파일 로그 생성 실패

# 호스트
ls -la /home/admin/ivada_project/rb8001/logs/
# -rw-r--r-- 1 999 docker 18917 8월 3 19:55 rb8001_app.log

# 컨테이너 내부
docker exec rb8001 ls -la /code/logs/
# drwxrwxr-x 2 1002 1000 4096 Aug 11 07:25 .
  • 권한 불일치 (999 vs 1002)
  • 8월 3일 이후 로그 쓰기 실패

근본 원인

1. 비동기 태스크 생성 실패

# 예상 코드 (실행되지 않는 부분)
if event_type == "message":
    asyncio.create_task(process_slack_message_async(...))
    return JSONResponse({"status": "ok"})  # 즉시 반환
  • create_task가 실행되지 않거나
  • 태스크가 생성되어도 실행 안 됨
  • 이벤트 루프 문제 가능성

2. 외부 서비스 의존성

http://localhost:8507 → State 서비스 (실패)
http://172.17.0.1:8501 → Email 서비스 (성공)
  • State 서비스 연결 실패로 인한 초기화 문제?

해결 시도

1. 컨테이너 재시작 (미시행)

docker restart rb8001

2. 로그 파일 권한 수정 (미시행)

sudo chown -R 999:999 /home/admin/ivada_project/rb8001/logs
docker exec rb8001 touch /code/logs/rb8001_app.log

3. 대안: rb10508_micro 사용

# rb10508_micro는 정상 작동 확인
docker logs rb10508_micro --tail 20
# 15:56 Slack 메시지 정상 처리 확인

최종 상태

rb8001

  • 상태: 실행 중이지만 기능 마비
  • 이벤트: 수신만 가능
  • 응답: 불가능
  • 로그: 기록 안 됨

rb10508_micro

  • 상태: 정상 작동
  • 이벤트: 수신 및 처리
  • 응답: 정상
  • 문제: 사용자 식별 문제 (모두 default)

권장 사항

  1. 즉시 조치

    • rb10508_micro를 메인 Slack 봇으로 사용
    • rb8001 서비스 중단 검토
  2. 중기 개선

    • rb8001 코드를 rb10508_micro 구조로 마이그레이션
    • 함수형 프로그래밍 방식 채택
    • 외부 서비스 의존성 제거
  3. 장기 전략

    • 단일 서비스로 통합
    • 로그 시스템 개선
    • 모니터링 강화

교훈

  1. 비동기 처리의 함정

    • asyncio.create_task() 사용 시 태스크 실행 보장 필요
    • 백그라운드 태스크는 명시적 관리 필요
  2. 로그의 중요성

    • 파일 로그와 Docker 로그 모두 필요
    • 권한 문제는 사전에 해결
  3. 단순함의 가치

    • rb10508_micro의 함수형 접근이 더 안정적
    • 복잡한 의존성은 장애 지점 증가
  4. 테스트의 필요성

    • 단순히 "200 OK"는 정상 작동을 의미하지 않음
    • 엔드투엔드 테스트 필요

참고 자료

  • rb8001 코드: /home/admin/ivada_project/rb8001/app/router/slack_handler.py
  • rb10508_micro 코드: /home/admin/ivada_project/rb10508_micro/app/services/slack_service.py
  • 이전 트러블슈팅: 250813_claude_rb8001_종합_트러블슈팅.md