본문으로 건너뛰기

Slacrawl: Slack 데이터를 로컬 SQLite로 미러링하는 CLI 도구

정석

Slacrawl

Slack 워크스페이스에 쌓인 수만 건의 메시지. 검색하려고 하면 Slack의 검색 기능으로는 부족하다. 특정 패턴을 찾거나, 통계를 내거나, AI 에이전트에게 분석을 맡기고 싶다면 어떨까. vincentkoc이 만든 Slacrawl이 그 답을 제시한다. Slack 데이터를 로컬 SQLite로 미러링하는 Go 기반 CLI 도구다.

외부 서버 없이 로컬에서 전문 검색(FTS5), SQL 쿼리, 그리고 OpenClaw 연동으로 AI 에이전트가 Slack 데이터에 접근할 수 있게 해준다.


왜 주목해야 하는가

Slack 데이터 분석의 문제는 명확했다:

Slacrawl은 이 문제를 “로컬 SQLite 미러링”으로 해결한다.

Slacrawl Terminal


핵심 철학: 로컬 우선, SQL로 분석

로컬 SQLite의 의미

Slacrawl을 실행하면 모든 Slack 데이터가 로컬 SQLite 데이터베이스에 저장된다.

저장되는 것들:

~/.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의 장점:

읽기 전용 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은 세 가지 소스에서 데이터를 가져올 수 있다:

소스명령어설명
APIsync --source apiSlack API에서 동기화
Desktopsync --source desktopmacOS Slack Desktop의 IndexedDB에서 복구
Export ZIPimportSlack 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

진단 항목:


OpenClaw 연동: AI 에이전트가 Slack을 읽는다

Slacrawl의 topicsopenclaw를 포함하면 OpenClaw AI 에이전트가 Slack 데이터에 접근할 수 있다.

왜 중요한가

AI 에이전트가 Slack 히스토리를 이해하면:

이런 질문에 답할 수 있다. 로컬 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 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 데이터의 주권 회복

Slacrawl은 Slack 데이터를 “서비스의 것”에서 “내 것”으로 되돌려준다. 로컬 SQLite에 저장하고, SQL로 분석하고, FTS5로 검색하고, AI 에이전트에게 컨텍스트로 제공한다.

핵심 가치 정리:

  1. 로컬 우선 — 외부 서버 없이 모든 데이터를 로컬에
  2. SQL 파워 — 읽기 전용 SQL로 무제한 분석
  3. FTS5 검색 — 외부 검색 엔진 없이 전문 검색
  4. AI 연동 — OpenClaw로 Slack 컨텍스트 활용
  5. 멀티 소스 — 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

🔗 관련 정보

이전
Promptfoo: LLM 프롬프트 테스팅과 레드 티밍의 표준 도구
다음
Penpot: Figma의 오픈소스 대안, 디자인과 코드의 완벽한 협업