From faeb97f24bd8c207ef245a63ebaaf7be8bad3e4b Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Tue, 3 Mar 2026 12:13:25 +0900 Subject: [PATCH] Add troubleshooting note for emotion interval SQL and Slack token fallback fix --- ...val_SQL_및_slack_token_fallback_수정.md | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 journey/troubleshooting/2026-03-03_rb8001_감정interval_SQL_및_slack_token_fallback_수정.md diff --git a/journey/troubleshooting/2026-03-03_rb8001_감정interval_SQL_및_slack_token_fallback_수정.md b/journey/troubleshooting/2026-03-03_rb8001_감정interval_SQL_및_slack_token_fallback_수정.md new file mode 100644 index 0000000..c5a7efd --- /dev/null +++ b/journey/troubleshooting/2026-03-03_rb8001_감정interval_SQL_및_slack_token_fallback_수정.md @@ -0,0 +1,53 @@ +# rb8001 감정 interval SQL 및 Slack token fallback 수정 + +## 일시 +- 분석/수정: 2026-03-03 (KST) + +## 배경 +- 로그에서 감정 조회 오류 반복: + - `Failed to query user emotion readings: invalid input syntax for type interval: "" + str(days) + " days""` +- Slack 이벤트 경로 간헐 오류: + - `No bot token provided in headers` + +## 원인 +1. 감정 조회 SQL 문자열 버그 +- `app/state/database.py`의 2개 쿼리가 `INTERVAL '" + str(days) + " days'` 형태로 고정 문자열이 들어가도록 작성되어 있었음. +- PostgreSQL이 interval로 파싱하지 못해 예외 발생. + +2. Slack 토큰 헤더 강제 의존 +- `app/router/slack/events.py`(및 동일 로직의 `slack_handler.py`)가 `X-Slack-Bot-Token` 헤더가 없으면 즉시 400 반환. +- Gateway→rb8001 헤더 전달이 누락되는 순간 이벤트가 무응답으로 실패. + +## 조치 +1. 감정 SQL 파라미터화 +- `created_at >= NOW() - ($2::int * INTERVAL '1 day')`로 변경. +- `conn.fetch(query, user_id, days)` 바인딩으로 전달. + +2. Slack 토큰 fallback 추가 +- 우선순위: `X-Slack-Bot-Token` 헤더 → `settings.SLACK_BOT_TOKEN`. +- 둘 다 없을 때만 400 반환. +- 비동기 context에 넣는 `bot_token`도 `effective_token`으로 통일. + +## TDD 테스트 +- 신규: `rb8001/tests/test_emotion_db_interval_query_tdd.py` + - interval이 파라미터 바인딩으로 전달되는지 검증. +- 신규: `rb8001/tests/test_slack_events_token_fallback.py` + - 헤더 없이 settings 토큰만 있어도 URL verification 200 검증. + - 헤더/설정 모두 없으면 400 검증. + +실행 명령: +```bash +cd /home/admin/ivada_project/rb8001 +PYTHONPATH=. JWT_SECRET_KEY=test-secret \ +pytest -q tests/test_emotion_db_interval_query_tdd.py \ + tests/test_slack_events_token_fallback.py \ + tests/test_emotion_pattern_analysis.py +``` + +결과: +- `10 passed` + +## 영향 +- 감정 조회 interval 파싱 오류 제거. +- Gateway 헤더 누락 시 Slack 이벤트 완전 실패(400) 확률 감소. +- 멀티 워크스페이스 헤더 전달 구조는 유지하면서 운영 내구성만 보강.