DOCS/journey/troubleshooting/250919_skill_slack_deployment_plan.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.9 KiB

skill-slack 배포 지침서

문제 ( 해결 완료)

skill-slack의 역할을 로빙 철학(스킬=도구, 판단 금지)에 맞게 재정의하고 51124 서버에 배포

배포 정보

  • 포트: 8502
  • 서버: 51124 (192.168.219.52)
  • 경로: /home/admin/ivada_project/skill-slack
  • 설정파일: skill-slack/docker-compose.yml

배포 전제조건

현재 상태

  • heejae 컨테이너: 실행 중 (포트 8502 사용)
  • admin 디렉토리: 코드만 클론됨
  • 포트 충돌: 동시 실행 불가

필수 확인

  • thread_ts 버그 수정 (chat_postMessage에 thread_ts 파라미터 추가)
  • SERVICE_API_KEY 설정 (51124 서버 .env 확인)
  • SLACK_BOT_TOKEN 설정 (환경변수)
  • heejae 컨테이너 중단 후 admin 시작

로빙 철학 적용

원칙

  • 스킬 = 순수 도구: 판단 금지, DB 접근 금지
  • 무상태: 어떤 정보도 기억/조회하지 않음
  • 교체 가능: 언제든 제거/교체 가능해야 함

올바른 아키텍처

1. rb8001이 DB에서 토큰/채널 조회
2. rb8001이 skill-slack 호출 시 필요 정보 전달
3. skill-slack은 받은 정보로만 작업

API 변경

엔드포인트 상태 이유
/health 유지 헬스체크
/api/v1/send 유지 메시지 전송 (토큰 받아서)
/api/v1/update 유지 메시지 업데이트
/api/v1/summarize 삭제 LLM 호출 (로빙 역할)
/api/v1/digest 삭제 자체 처리 (로빙 역할)

환경변수 설정

현재: 환경변수 방식 (임시)

  • SLACK_BOT_TOKEN: 환경변수로 설정
  • SERVICE_API_KEY: 51124 서버 .env에서 확인

구현 완료: API 요청 시 토큰 전달

  • 완료일: 2025-01-09
  • 구현 내용:
    • SlackMessageRequest에 token 필드 추가
    • 요청 토큰 우선, 없으면 환경변수 사용
    • 멀티 워크스페이스 동시 지원
  • 요청 형식:
{
  "channel": "C1234567",
  "text": "메시지",
  "token": "xoxb-...",  // 워크스페이스별 토큰
  "thread_ts": "1234567890.123456"
}

배포 절차

계정 전환 (heejae → admin)

# 51124 서버에서 실행
# 1. heejae 컨테이너 중단
sudo docker stop skill-slack || echo "Already stopped"
sudo docker rm skill-slack || echo "Already removed"

# 2. admin 계정으로 배포
cd /home/admin/ivada_project/skill-slack
git pull origin main
sudo docker compose down
sudo docker compose up -d --build

# 3. 로그 확인
sudo docker logs skill-slack --tail=50 -f

네트워크 모드 변경

  • 파일: /home/admin/ivada_project/skill-slack/docker-compose.yml 32행
  • 현재: network_mode: host
  • 권장: bridge 모드로 변경 (포트 충돌 방지, 보안 격리)
  • 로그 수집: Fluent-bit는 파일 기반이므로 영향 없음

주요 이슈

긴급

  • thread_ts 미작동: chat_postMessage 호출 시 thread_ts 미전달
  • DB 접근 문제: skill-slack이 DB 접근하면 철학 위반

수정 필요

  • 토큰 전달 방식: 환경변수 → API 요청 시 전달
  • 네트워크: host → bridge

테스트

테스트 명령 (현재: 환경변수 토큰)

# 헬스체크
curl -f http://localhost:8502/health

# 메시지 전송 (API_KEY는 .env의 SERVICE_API_KEY)
curl -X POST http://localhost:8502/api/v1/send \
  -H "X-API-Key: {SERVICE_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"channel": "C07V9F3V21V", "text": "skill-slack 배포 테스트"}'

# 스레드 응답 테스트
curl -X POST http://localhost:8502/api/v1/send \
  -H "X-API-Key: {SERVICE_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"channel": "C07V9F3V21V", "text": "스레드 응답 테스트", "thread_ts": "1234567890.123456"}'

테스트 명령 (구현 완료: 요청별 토큰)

# Company-X 워크스페이스 테스트
curl -X POST http://localhost:8502/api/v1/send \
  -H "X-API-Key: {SERVICE_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"channel": "C09C98KB933", "text": "Company-X 테스트", "token": "xoxb-9417..."}'

# 로빙팀 워크스페이스 테스트
curl -X POST http://localhost:8502/api/v1/send \
  -H "X-API-Key: {SERVICE_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"channel": "C07V9F3V21V", "text": "로빙팀 테스트", "token": "xoxb-9073..."}'

체크리스트

배포 전 (순서대로)

  1. heejae 컨테이너 중단 (포트 8502 확보)
  2. thread_ts 버그 수정 (완료: app/api/endpoints/messages.py:33)
  3. 환경변수 설정 (.env 파일 생성 완료)

배포 후

  • 헬스체크 200 확인
  • 스레드 응답 테스트
  • API에 token 파라미터 추가 (2025-01-09 완료)

로빙 철학 달성

  • 스킬은 무상태 도구로 동작
  • DB 접근 없음 (토큰 저장 안함)
  • 요청마다 필요 정보 전달
  • 멀티 워크스페이스 동시 지원