- 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/*)
4.8 KiB
4.8 KiB
Gemini CLI, Slack 연결, 네트워크 통합 문제 해결
날짜: 2025-07-16
작업자: Claude & happybell
개요
rb8001과 rb10508_test 컨테이너에서 발생한 여러 문제들을 해결하는 과정
업데이트 (2025-09-19): Gemini CLI 타임아웃 관련 최종 정리 — 해결
- 기본 동작을 CLI→API 폴백이 아닌 API 우선으로 전환
- 설정:
rb8001/app/core/config.py에서GEMINI_USE_CLI = False기본값 유지 - 핸들러:
rb8001/app/llm/gemini_handler.py- CLI 경로 점검 후 미존재 시 자동으로 API 모드로 전환
- CLI 사용 시 15초 타임아웃 발생하면 프로세스 종료 후 API로 폴백
- 설정:
- 결과: CLI 타임아웃으로 인한 응답 지연이 제거되어 안정적인 응답 시간 확보
참고: 필요 시 서버에 설치된 CLI (/usr/local/node/bin/gemini)를 지정해 테스트할 수 있으나, 운영에서는 API 우선 권장.
1. Gemini CLI 실행 문제
증상
- rb8001: "Gemini CLI가 설치되지 않았습니다" 에러
- rb10508_test (test-api-container): 정상 작동
- 에러:
exec: "gemini": executable file not found in $PATH
원인 분석
- Docker 컨테이너는 Python 기반으로 Node.js가 포함되지 않음
- 서버에는 이미 설치되어 있지만 컨테이너 내부에서 접근 불가
- test-api-container는 Node.js를 마운트하여 사용 중
해결 방법
1. docker-compose.yml에 Node.js 마운트 추가
volumes:
# 기존 볼륨들...
# Node.js 및 Gemini CLI 마운트
- /home/admin/.nvm/versions/node/v24.4.0:/usr/local/node:ro
environment:
# 기존 환경변수들...
# Node.js PATH 추가
- PATH=/usr/local/node/bin:$PATH
2. gemini_service.py에서 절대 경로 사용
# 기존
cmd = ["gemini", "-m", "gemini-2.5-flash", "-p", full_prompt]
# 수정
cmd = ["/usr/local/node/bin/gemini", "-m", "gemini-2.5-flash", "-p", full_prompt]
2. Slack 연결 문제
증상
- rb10508_test 컨테이너 시작은 성공하지만 Slack 대화 불가
- 에러:
AttributeError: 'Settings' object has no attribute 'USE_ASYNC_RESPONSE'
원인
- app/api/slack.py에서 settings.USE_ASYNC_RESPONSE 참조
- app/core/config.py의 Settings 클래스에 해당 속성 미정의
해결 방법
config.py의 Settings 클래스에 추가:
# Application Configuration
DEBUG: bool = True
LOG_LEVEL: str = "INFO"
MAX_MEMORY_SIZE: int = 1000
USE_ASYNC_RESPONSE: bool = True # 추가
3. 네트워크 통합 문제
배경
- 로빙들이 frontend-backend와 상태를 주고받아야 함
- Docker 네트워크 격리로 인해 통신 불가
현황
- frontend-backend-1: appnet 네트워크
- rb8001: host 네트워크 (보안 취약)
- rb10508_test: 자체 bridge 네트워크 (격리됨)
해결 방법
rb10508_test/docker-compose.yml
services:
test-api:
# ...
networks:
- default
- appnet
networks:
appnet:
external: true
rb8001/docker-compose.yml
services:
rb8001:
# network_mode: host 제거
networks:
- appnet
ports:
- "8001:8001"
networks:
appnet:
external: true
장점
- 보안 향상 (host 네트워크 제거)
- 선택적 컨테이너 간 통신
- backend와 안전한 상태 공유 가능
4. CI/CD 경로 문제
증상
- GitHub Actions 실패:
/home/admin/test_api: 그런 파일이나 디렉터리가 없습니다
원인
- 디렉토리 구조 변경: test_api → rb10508_test
- CI/CD 워크플로우가 구 경로 참조
해결 방법
.gitea/workflows/cicd.yml 수정:
/home/admin/test_api→/home/admin/rb10508_test- 코드 복사 경로를 rb8001과 동일하게 변경:
cp -r /home/admin/.cache/act/*/hostexecutor/* /home/admin/rb10508_test/
적용 순서
- 로컬에서 코드 수정 및 푸시
- 서버에서 .env 파일 확인/생성
- 기존 컨테이너 정리:
docker stop test-api-container docker rm test-api-container - 새 컨테이너 시작:
cd /home/admin/rb8001 docker-compose down && docker-compose up -d cd /home/admin/rb10508_test docker-compose up -d
검증
# Gemini CLI 확인
docker exec rb8001 /usr/local/node/bin/gemini --version
docker exec rb10508_test /usr/local/node/bin/gemini --version
# 네트워크 확인
docker network inspect appnet
# Slack 대화 테스트
# Slack에서 @Ro-being, @Ro-being_test로 대화
교훈
- 컨테이너 환경 고려: 서버에 설치된 도구가 컨테이너에서는 없을 수 있음
- 설정 동기화: 새 기능 추가 시 모든 관련 파일 업데이트 필요
- 네트워크 설계: 초기부터 컨테이너 간 통신 고려
- 경로 일관성: CI/CD 설정 시 디렉토리 구조 변경 반영