diff --git a/troubleshooting/250817_claude_rb8001_slack_메시지처리실패.md b/troubleshooting/250817_claude_rb8001_slack_메시지처리실패.md new file mode 100644 index 0000000..ab9d6c6 --- /dev/null +++ b/troubleshooting/250817_claude_rb8001_slack_메시지처리실패.md @@ -0,0 +1,172 @@ +# rb8001 Slack 메시지 처리 실패 문제 + +**작성일**: 2025-08-17 +**작성자**: Claude (51124 서버) +**관련 서비스**: rb8001, rb10508_micro +**문제 유형**: Slack 봇 응답 실패 + +## 문제 상황 + +### 오후 11시 30분: 초기 증상 +- 사용자가 Slack에서 로빙과 대화 중 +- rb8001이 응답하지 않는다고 판단 +- 로그 파일이 8월 3일 이후 업데이트되지 않음 + +### 오후 11시 45분: 상세 조사 +```bash +# 컨테이너 상태 확인 +docker ps -a | grep rb8001 +# 결과: Up 3 hours (healthy) + +# 로그 확인 +docker logs rb8001 --tail 100 +# 결과: health check만 반복, 실제 메시지 처리 없음 +``` + +### 오후 11시 50분: 테스트 진행 +```bash +# 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. 비동기 처리 함수 실행 안 됨 +```python +# 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. 파일 로그 생성 실패 +```bash +# 호스트 +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. 비동기 태스크 생성 실패 +```python +# 예상 코드 (실행되지 않는 부분) +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. 컨테이너 재시작 (미시행) +```bash +docker restart rb8001 +``` + +### 2. 로그 파일 권한 수정 (미시행) +```bash +sudo chown -R 999:999 /home/admin/ivada_project/rb8001/logs +docker exec rb8001 touch /code/logs/rb8001_app.log +``` + +### 3. 대안: rb10508_micro 사용 +```bash +# 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` \ No newline at end of file