---
type: ideas
tags: [ideas, skill-slack, rb8001, gateway, architecture, refactoring, openclaw, message-bus]
adopted_by:
---

# 260323 skill-slack 입출력 전담 구조 분리 아이디어

## 현재 구조

rb8001이 Slack SDK(`chat_postMessage`, Block Kit, 이벤트 수신)를 직접 호출하고 있어 입력·판단·출력 경계가 섞여 있다.

```
Slack → rb8001(이벤트 수신 + 판단 + 처리 + Slack SDK 직접 호출) → Slack
         └─ skill-slack(보조: 콜드메일, 리스트 등 일부 기능)
```

## 문제

- rb8001에 Slack 프로토콜 코드(Block Kit, 스레드, 파일 업로드)가 섞여 있어 다른 채널(웹, API) 확장 시 분리 어려움
- skill-slack의 역할이 모호 — 일부 기능만 담당하고 나머지는 rb8001이 직접 처리
- Block Kit 같은 출력 포맷 개선이 rb8001 코드 수정을 요구

## 제안 구조

```
Slack → skill-slack(수신·표준화) → rb8001(판단·처리) → skill-slack(렌더링·전송) → Slack
```

| 컴포넌트 | 역할 |
|----------|------|
| Gateway | 프로토콜 라우팅 (Slack/웹/API → 내부 메시지 표준화) |
| rb8001 | 의도 판단, RAG 검색, LLM 호출, 응답 생성 (채널 무관). 출력은 표준 JSON |
| skill-slack | Slack 전용 입출력 전담 — 이벤트 수신, 표준 메시지 변환, Block Kit 렌더링, 스레드 관리, 파일 업로드 |

### 데이터 흐름 상세

1. **수신**: Slack Event → skill-slack이 수신 → 표준 메시지 객체로 변환 → rb8001에 전달
2. **처리**: rb8001은 RAG·LLM 수행 → 표준 JSON 결과 반환 (채널 무관)
3. **렌더링**: skill-slack이 결과 JSON을 Slack Block Kit으로 변환 → 전송

### rb8001 출력 표준 JSON 인터페이스 (초안)

```json
{
  "type": "grounding_answer",
  "content": {
    "direct_answer": "답변 텍스트",
    "evidence_docs": ["파일명1.pdf"],
    "data_format": "table",
    "data": [
      {"항목": "자산총계", "값": "318,145,805원"},
      {"항목": "부채총계", "값": "40,618,963원"}
    ]
  }
}
```

skill-slack은 `data_format`을 보고 Block Kit `fields`로 렌더링할지, 줄바꿈 텍스트로 할지 결정.

## 업계 참조: OpenClaw 및 2026년 에이전트 아키텍처 트렌드

- **OpenClaw** 등 최신 에이전트 프레임워크는 '커넥터(Connector)' 패턴으로 채널을 추상화. 에이전트 본체는 채널을 모르고 표준 JSON만 주고받음.
- **메시지 버스 기반 아키텍처**: 중앙 통제형(rb8001이 다 하는 현재)에서 메시지 기반 분리로 진화.
- **비동기 처리**: 게이트웨이가 즉시 200 OK → 백그라운드 처리 → skill-slack이 결과 push. 현재 rb8001도 부분적으로 이 패턴 사용 중(콜드메일).
- Slack Block Kit 2026년 업데이트로 마크다운 코드 하이라이팅, 체크리스트 등 지원 확장.

## 기대 효과

- rb8001에서 Slack SDK 의존 제거 → 채널 독립적 코어
- 출력 포맷(Block Kit, 줄바꿈, 표)을 skill-slack에서 단독 관리
- 새 채널(웹 대시보드, API) 추가 시 skill-web만 붙이면 됨
- rb8001 출력을 표준 JSON으로 통일하면 리팩토링 시 점진적 이전 가능

## 제약

- 리팩토링 범위가 크고 현재 RAG 작업과 별개 트랙
- rb8001의 `slack/message_service.py`, `slack/file_service.py` 등 이동 필요
- 기존 동작 회귀 테스트 필요
- workspace-team-project 계층 재정의 작업과 접근 권한 경계가 겹칠 수 있음

## 관련 파일

- `rb8001/app/services/slack/message_service.py`
- `rb8001/app/services/slack/file_service.py`
- `robeing/skill-slack/`
- `robeing/robeing-gateway/`

## 관련 문서

- [260316 workspace-team-project 계층 재정의 전환계획](../plans/260316_workspace_team_project_계층_재정의_전환계획.md)
- [OpenClaw 레퍼런스](../../reference/openclaw/)
