DOCS/journey/troubleshooting/250926_happybell80_gateway_redis_integration.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

2.3 KiB

Gateway Redis 통합 및 Stats API 수정

날짜: 2025-09-26

작성자: happybell80

관련 서비스: robeing-gateway

상태: 해결 완료


1. 문제 발생

Stats API URL 이중 슬래시

  • 증상: Gateway → Monitor 요청 시 ///api/stats//rb8001
  • 원인: MONITOR_URL과 MONITOR_STATUS_URI 연결 시 슬래시 중복
  • 위치: robeing-gateway/app/main.py:290

헬스체크 실패

  • 증상: Actions에서 localhost:8100/healthz 연결 거부
  • 원인: 컨테이너 시작 지연

2. 해결 방법

Stats API 수정

서버 .env 수정:

MONITOR_STATUS_URI=/api/stats  # 앞 슬래시만 유지

Redis 연결 설정

서버 .env 추가:

REDIS_HOST=auth-redis  # auth-server의 Redis 컨테이너 공유
REDIS_PORT=6379

3. 아키텍처

캐시 구조

  • UserCache: 사용자-로빙 매핑 (메모리, 30분 TTL)
  • Redis: Rate limiting (auth-redis 컨테이너)

네트워크

  • 모든 컨테이너가 appnet 네트워크 공유
  • auth-redis:6379로 직접 통신 가능

4. 확인 방법

docker inspect robeing-gateway auth-redis | grep -A2 "Networks"

5. 결과

  • Stats API 정상 작동
  • Redis 연결 성공 (rate limiting)
  • 헬스체크 통과

6. Stats API 슬래시 중복 문제 해결 (2025-09-27)

문제

  • 증상: http://192.168.219.52:9024///api/stats/rb8001 404 응답 (1분마다)
  • 원인: URL 조합 시 슬래시 중복 (MONITOR_URL 끝 + MONITOR_STATUS_URI 앞 + f-string 내부)
  • 기존 코드: main.py:290 - f"{env_setting.MONITOR_URL}/{env_setting.MONITOR_STATUS_URI}/{robeing_id}"

해결 방법

settings.py에 URL 생성 메서드 추가:

def get_monitor_stats_url(self, robeing_id: str) -> str:
    monitor_url = str(self.MONITOR_URL).rstrip('/') if self.MONITOR_URL else ""
    status_uri = self.MONITOR_STATUS_URI.strip('/') if self.MONITOR_STATUS_URI else ""
    return f"{monitor_url}/{status_uri}/{robeing_id}"

main.py 수정:

target_url = env_setting.get_monitor_stats_url(robeing_id)

결과

  • 슬래시 정규화: ////
  • URL 생성 로직 중앙화
  • 환경변수 설정 오류 방지
  • 상태: 해결 완료 (efca09f)