
Slack 워크스페이스에 쌓인 수만 건의 메시지. 검색하려고 하면 Slack의 검색 기능으로는 부족하다. 특정 패턴을 찾거나, 통계를 내거나, AI 에이전트에게 분석을 맡기고 싶다면 어떨까. vincentkoc이 만든 Slacrawl이 그 답을 제시한다. Slack 데이터를 로컬 SQLite로 미러링하는 Go 기반 CLI 도구다.
외부 서버 없이 로컬에서 전문 검색(FTS5), SQL 쿼리, 그리고 OpenClaw 연동으로 AI 에이전트가 Slack 데이터에 접근할 수 있게 해준다.
왜 주목해야 하는가
Slack 데이터 분석의 문제는 명확했다:
- Slack 검색의 한계: 복잡한 쿼리 불가, 패턴 매칭 제약
- API 호출 비용: 반복적인 분석을 위해 계속 API 호출
- 오프라인 분석 불가: 인터넷 없이는 불가능
- AI 연동 어려움: Slack 데이터를 AI 컨텍스트로 가져오기 번거로움
Slacrawl은 이 문제를 “로컬 SQLite 미러링”으로 해결한다.

핵심 철학: 로컬 우선, SQL로 분석
로컬 SQLite의 의미
Slacrawl을 실행하면 모든 Slack 데이터가 로컬 SQLite 데이터베이스에 저장된다.
저장되는 것들:
- 워크스페이스 정보
- 채널 (public, private, DM)
- 사용자 프로필
- 메시지 (본문, 타임스탬프, 스레드)
- 멘션 관계
~/.slacrawl/slacrawl.db 하나에 모든 것이 담긴다. 외부 서버? 없다. 클라우드? 필요 없다.
FTS5 전문 검색
SQLite의 FTS5(Full-Text Search 5) 엔진을 활용한다. Elasticsearch 같은 외부 검색 서버 없이도 강력한 전문 검색이 가능하다.
# "incident"가 포함된 메시지 검색
slacrawl search --workspace T01234567 "incident"
# 복잡한 패턴도 가능
slacrawl search --workspace T01234567 "error AND production NOT resolved"
FTS5의 장점:
- 형태소 분석 (영어)
- 가중치 기반 랭킹
- 구문 검색 (“exact phrase”)
- 부정 연산자 (NOT)
읽기 전용 SQL 액세스
가장 강력한 기능. 직접 SQL을 날릴 수 있다.
# 채널별 메시지 수
slacrawl sql 'select channel_id, count(*) from messages group by channel_id'
# 가장 활발한 사용자
slacrawl sql 'select user_id, count(*) from messages group by user_id order by count(*) desc limit 10'
# 특정 기간 멘션 분석
slacrawl sql 'select mentioned_user_id, count(*) from mentions where timestamp > "2024-01-01" group by mentioned_user_id'
복잡한 분석도 한 줄의 SQL로 해결된다.
기능 딥다이브
멀티 소스 동기화
Slacrawl은 세 가지 소스에서 데이터를 가져올 수 있다:
| 소스 | 명령어 | 설명 |
|---|---|---|
| API | sync --source api | Slack API에서 동기화 |
| Desktop | sync --source desktop | macOS Slack Desktop의 IndexedDB에서 복구 |
| Export ZIP | import | Slack Export ZIP 파일 가져오기 |
API 동기화가 기본이지만, Desktop 소스가 특이하다. macOS의 Slack Desktop 앱이 로컬에 캐시한 데이터를 IndexedDB에서 추출해 복구할 수 있다. 토큰 없이도 가능하다.
스레드 답글 백필
일반 봇 토큰으로는 스레드 답글을 가져올 수 없다. User Token(xoxp-)이 필요하다.
export SLACK_USER_TOKEN="xoxp-..." # 선택사항
slacrawl sync --source api
# 스레드 답글까지 자동으로 백필
증분 동기화
매번 전체를 다시 가져올 필요 없다. 마지막 동기화 시점 이후의 새 메시지만 가져온다.
# 증분 동기화 (기본)
slacrawl sync --source api
# 전체 백필 (처음부터)
slacrawl sync --source api --full
Socket Mode 실시간 tailing
API 폴링 말고 실시간으로 메시지를 받을 수 있다.
slacrawl tail
# Socket Mode로 실시간 이벤트 수신
새 메시지가 들어오면 즉시 화면에 출력하고 DB에 저장한다.
Doctor 진단
문제가 생겼을 때 어디가 문제인지 한눈에 파악할 수 있다.
slacrawl doctor
진단 항목:
- Config 파일 존재 및 유효성
- 데이터베이스 상태
- 토큰 권한
- FTS5 인덱스 상태
- Desktop 소스 접근 가능성
OpenClaw 연동: AI 에이전트가 Slack을 읽는다
Slacrawl의 topics에 openclaw를 포함하면 OpenClaw AI 에이전트가 Slack 데이터에 접근할 수 있다.
왜 중요한가
AI 에이전트가 Slack 히스토리를 이해하면:
- “지난달에 논의된 보안 이슈 정리해줘”
- “이 채널에서 가장 많이 언급된 기술 스택은 뭐야?”
- “Q4 계획 관련 대화 요약해줘”
이런 질문에 답할 수 있다. 로컬 DB를 직접 쿼리하니 API 호출 없이 즉시 응답한다.
설정 예시
# ~/.slacrawl/config.toml
[[workspaces]]
name = "my-workspace"
team_id = "T01234567"
topics = ["openclaw", "analysis"] # openclaw 포함
데이터 저장 구조
모든 데이터는 ~/.slacrawl/ 디렉토리에 저장된다:
~/.slacrawl/
├── config.toml # 설정 파일
├── slacrawl.db # SQLite 데이터베이스
├── cache/ # API 응답 캐시
└── logs/ # 로그 파일
스키마 개요
-- 핵심 테이블
workspaces (id, name, team_id, ...)
channels (id, workspace_id, name, type, ...)
users (id, workspace_id, name, display_name, ...)
messages (id, channel_id, user_id, text, timestamp, thread_ts, ...)
mentions (id, message_id, user_id, mentioned_user_id, ...)
-- FTS5 가상 테이블
messages_fts (message_id, text) -- 전문 검색용
주요 명령어 레퍼런스
초기 설정
# 설정 파일 생성
slacrawl init
# 환경 변수 설정
export SLACK_BOT_TOKEN="xoxb-..."
export SLACK_APP_TOKEN="xapp-..."
export SLACK_USER_TOKEN="xoxp-..." # 선택사항
# 진단
slacrawl doctor
동기화
# API 동기화 (증분)
slacrawl sync --source api
# API 동기화 (전체 백필)
slacrawl sync --source api --full
# Desktop 복구
slacrawl sync --source desktop
# 데스크톱 상태 주기적 새로고침
slacrawl watch --desktop-every 5m
조회
# 전문 검색
slacrawl search --workspace T01234567 "incident"
# 메시지 목록
slacrawl messages --channel C12345678 --limit 20
# 멘션 기록
slacrawl mentions --limit 20
# 사용자 목록
slacrawl users
# 채널 목록
slacrawl channels
# 동기화 상태
slacrawl status
SQL 쿼리
# 읽기 전용 SQL
slacrawl sql 'select * from messages limit 10'
# 복잡한 분석
slacrawl sql '
SELECT
c.name as channel,
COUNT(*) as message_count,
COUNT(DISTINCT m.user_id) as unique_users
FROM messages m
JOIN channels c ON m.channel_id = c.id
GROUP BY c.id
ORDER BY message_count DESC
'
기술적 딥다이브
Go로 작성된 이유
- 단일 바이너리: 의존성 없이 실행 가능
- 크로스 플랫폼: macOS, Linux, Windows 지원
- 성능: 대량 데이터 동기화에 적합
- SQLite 네이티브: modernc.org/sqlite로 CGo 없이 순수 Go
macOS Desktop 디스커버리
macOS Slack Desktop 앱은 IndexedDB에 데이터를 캐시한다. 위치:
~/Library/Containers/com.tinyspeck.slackmacgap/
Data/Library/Application Support/Slack/IndexedDB/
Slacrawl은 이 IndexedDB에서 데이터를 추출해 복구할 수 있다. 토큰 없이도 가능하다.
FTS5 구현
-- FTS5 가상 테이블 생성
CREATE VIRTUAL TABLE messages_fts USING fts5(
message_id,
text,
content='messages',
content_rowid='id'
);
-- 검색 쿼리
SELECT m.*
FROM messages m
JOIN messages_fts fts ON m.id = fts.message_id
WHERE messages_fts MATCH 'incident AND production'
ORDER BY rank;
설치 방법
macOS (Homebrew)
brew tap vincentkoc/homebrew-tap
brew install slacrawl
Debian/Ubuntu
curl -LO https://github.com/vincentkoc/slacrawl/releases/download/v0.1.0/slacrawl_0.1.0_amd64.deb
sudo dpkg -i slacrawl_0.1.0_amd64.deb
소스 빌드
git clone https://github.com/vincentkoc/slacrawl
cd slacrawl
go build -o bin/slacrawl ./cmd/slacrawl
빠른 시작
# 1. 환경 변수 설정
export SLACK_BOT_TOKEN="xoxb-..."
export SLACK_APP_TOKEN="xapp-..."
export SLACK_USER_TOKEN="xoxp-..." # 선택사항
# 2. 초기화
slacrawl init
# 3. 진단
slacrawl doctor
# 4. 동기화
slacrawl sync --source api
# 5. 검색 테스트
slacrawl search --workspace T01234567 "hello"
# 6. SQL 테스트
slacrawl sql 'select count(*) from messages'
출력 모드
세 가지 출력 형식을 지원한다:
| 모드 | 용도 | 예시 |
|---|---|---|
| text | 사람이 읽기 좋은 형태 | 기본값 |
| json | 스크립트 파이핑 | --output json |
| log | 로그 분석 도구 연동 | --output log |
# JSON 출력으로 jq와 연동
slacrawl messages --channel C12345678 --output json | jq '.[] | .text'
멀티 워크스페이스 지원
여러 Slack 워크스페이스를 동시에 관리할 수 있다:
# ~/.slacrawl/config.toml
[[workspaces]]
name = "company-main"
team_id = "T01234567"
[[workspaces]]
name = "company-external"
team_id = "T98765432"
각 워크스페이스별로 독립적으로 동기화하고 검색할 수 있다.
언제 Slacrawl을 쓸까
추천
- Slack 데이터 분석 — SQL로 복잡한 쿼리 필요
- 오프라인 분석 — 인터넷 없이 Slack 데이터 탐색
- AI 에이전트 연동 — OpenClaw로 Slack 컨텍스트 활용
- 데이터 아카이빙 — Slack 보존 정책 넘어서도 데이터 유지
- 보안 감사 — 로컬에서 프라이빗하게 분석
비추천
- 단순 검색만 필요 — Slack 기본 검색으로 충분
- 실시간 모니터링 — Socket Mode 있지만 전용 도구가 더 나을 수 있음
- 클라우드 협업 — 로컬 DB 공유 어려움
마치며: Slack 데이터의 주권 회복
Slacrawl은 Slack 데이터를 “서비스의 것”에서 “내 것”으로 되돌려준다. 로컬 SQLite에 저장하고, SQL로 분석하고, FTS5로 검색하고, AI 에이전트에게 컨텍스트로 제공한다.
핵심 가치 정리:
- 로컬 우선 — 외부 서버 없이 모든 데이터를 로컬에
- SQL 파워 — 읽기 전용 SQL로 무제한 분석
- FTS5 검색 — 외부 검색 엔진 없이 전문 검색
- AI 연동 — OpenClaw로 Slack 컨텍스트 활용
- 멀티 소스 — API, Desktop, Export ZIP 모두 지원
vincentkoc은 “cli terminal app for slack with sqlite backend”라고 설명한다. 단순한 설명이지만, 그 안에 담긴 의미는 크다. Slack 데이터의 주권을 개발자에게 돌려주는 도구다.
빠른 시작
brew tap vincentkoc/homebrew-tap
brew install slacrawl
slacrawl init
slacrawl doctor
slacrawl sync --source api
🔗 관련 정보
- GitHub: https://github.com/vincentkoc/slacrawl
- 개발자: vincentkoc
- 기술 스택: Go, SQLite, FTS5
- 라이선스: MIT