
매달 단톡방을 열어 ‘관리 > 대화 내보내기 > 이번 달치만 추려서 분석’을 반복하고 있었습니다. 이 입력 단계를 오픈소스 하나로 없앴습니다 — macOS 카카오톡 로컬 데이터를 평문으로 복호화하는 katok 위에, “대화방·기간만 지정하면 알아서 캡쳐·분석”하는 자동화를 얹은 기록. 그리고 자동화만큼 공들인 프라이버시·윤리 설계까지.
① 커뮤니티·소모임 운영자가 매달 하던 ‘카톡 내보내기 → 기간 추려서 → AI에 붙여넣기’라는 수작업의 입력 단계를, 오픈소스 katok(NomaDamas, MIT)으로 없앴습니다 — macOS 카카오톡 로컬 데이터베이스를 평문 SQLite로 복호화해 주는 도구입니다.
② 그 위에 “대화방·기간 지정 → 자동 캡쳐 → 요약”하는 얇은 자동화를 얹으니, 매달 손으로 하던 일이 한 번의 명령으로 줄었습니다.
③ 가장 중요한 건 기능이 아니라 경계입니다 — 전 과정이 로컬에서, 읽기 전용으로만 돌아가고 외부 전송이 없습니다. 카톡에 글을 쓰거나 보내는 건 원천적으로 불가능합니다. “분석할 수 있다”와 “분석해도 된다”는 다르기에, 프라이버시·동의 설계에 글의 절반을 썼습니다.
“이번 달 단톡방 좀 정리해 볼까” 한 번에, 매번 30분이 사라졌습니다
모임이든 회사든, 단톡방을 운영해 본 분이라면 익숙한 장면이 있습니다. 월말이 되면 카카오톡을 열고, 관리 > 대화 내용 내보내기를 눌러 텍스트로 뽑고, 이번 달 날짜만 손으로 추려낸 다음, 그걸 다시 AI에게 붙여 넣어 “이번 달 주요 이슈를 정리해 줘”라고 부탁합니다. 한 방이면 다행이지만 방이 여러 개면 같은 일을 여러 번 반복합니다.
문제는 시간만이 아닙니다. 기간을 잘못 추리거나, 한 방을 빠뜨리거나, 내보내기 형식이 매번 미묘하게 달라지는 휴먼 에러가 끼어듭니다. 정작 가치 있는 일—대화 속 흐름과 이슈를 읽고 운영에 반영하는 일—은 그 뒤에야 시작됩니다. 즉 우리는 ‘분석’이 아니라 ‘분석을 위한 준비’에 매달 시간을 쓰고 있었던 셈입니다.
저는 러닝 커뮤니티 운영을 돕고 있습니다. 매달 단톡방의 흐름을 정리해 회원들과 나누는데, 늘 막히는 지점이 ‘내보내기’였습니다. 결국 이런 생각이 들었습니다 — “입력 단계만 자동화해도 운영자의 한 달이 가벼워지지 않을까.” 마침 그 입력을 풀어 주는 오픈소스가 있었습니다.
수작업 워크플로의 진짜 비용
기존 흐름을 그대로 적어 보면 마찰 지점이 분명해집니다.
①~③은 준비 노동입니다. 사람이 꼭 해야 할 판단이 없는데도 매달 손이 갑니다. 자동화의 1차 표적은 바로 여기였습니다 — ④를 더 똑똑하게 만들기 전에, ①~③을 사라지게 하는 것.
katok — macOS 카톡 로컬 데이터를 평문으로 복호화하는 도구
가장 어려운 단계, 즉 ‘암호화된 카톡 데이터를 읽을 수 있게 만드는 일’을 풀어 주는 오픈소스가 있습니다. katok(NomaDamas, MIT 라이선스)입니다. macOS 카카오톡이 로컬에 보관하는 암호화 데이터베이스를 내 컴퓨터 안에서 복호화해, 평범한 SQLite 파일(누구나 SQL로 조회 가능한 형식)로 정규화해 줍니다.
katok 자체는 조회·검색 도구입니다. 명령어를 보면 성격이 분명합니다 — 상태 점검(doctor), 로컬 데이터 동기화(sync), 색인(index), 검색(search). 카카오톡으로 메시지를 보내거나 데이터를 고치는 명령은 존재하지 않습니다. 즉 설계상 ‘읽기’만 가능하고 ‘쓰기’는 없습니다. 이 점은 뒤의 프라이버시 절에서 다시 중요해집니다.
“대화방 · 기간”만 지정하면 캡쳐·분석까지
katok이 만들어 준 평문 SQLite 위에, 입력 단계를 없애는 얇은 다리(브릿지)를 얹었습니다. 흐름은 이렇게 단순해집니다.
(암호화 데이터 → 평문 SQLite) (SQL 한 줄) (이슈·트렌드 정리)
설계에서 신경 쓴 세 가지만 짚겠습니다.
- 기간은 한국 시간(KST) 기준으로 정확히 — 내부 저장은 세계표준시(UTC)라, “5월”을 말하면 자동으로 한국 시간 경계로 변환해 자릅니다. 사람이 날짜를 손으로 추리지 않습니다.
- 대화가 아닌 것은 걸러냅니다 — 입퇴장·초대 같은 시스템 메시지, 사진·이모티콘 같은 미디어는 분석 잡음이 되므로 자동으로 구분합니다(미디어는 ‘몇 건’으로만 집계).
- 용도에 따라 두 갈래 — 회원 활동 정리는 이슈 중심 월간 요약으로, 정보·도구 트렌드 파악은 키워드·도구 다이제스트로 나눕니다. 같은 원본을 보더라도 보고 싶은 것이 다르기 때문입니다.
효과 — 매달 45분이 1분 이내로, 3년치는 몇 초로
“분석할 수 있다”와 “분석해도 된다”는 다릅니다
대화 데이터를 다루는 도구를 소개하면서 기능만 말하고 끝내는 건 무책임합니다. 이 자동화에서 기능보다 먼저 정한 것은 넘지 않을 선이었습니다.
그래서 무엇이 보이나 — 시간 · 주제 · 사람
입력이 자동화되면, 남는 에너지를 ‘무엇을 볼 것인가’에 쓸 수 있습니다. 운영에 도움이 되는 축은 크게 셋입니다(아래는 일반적인 활용 예시이며, 특정 개인의 데이터를 가리키지 않습니다).
- 시간 흐름 — 언제 대화가 몰리는가. 가장 활발한 시간대를 알면 공지를 언제 올려야 잘 읽히는지가 정해집니다. 조용해진 구간은 자극이 필요한 신호입니다.
- 주제별 — 이번 달 무엇이 화제였는가. 행사·이슈·질문의 덩어리를 보면 운영의 우선순위가 보입니다.
- 사람(참여 양상) — 참여가 소수에 쏠렸는지 고르게 퍼졌는지, 새로 말문을 연 사람은 누구인지. 이는 감시가 아니라 환대의 데이터입니다 — 새 얼굴은 격려하고, 한동안 조용한 분께는 안부를 건네는.
또 하나의 쓸모 — 정보용 오픈채팅방을 ‘단번에’ 파악
우리 모임 방과는 별개로, 정보를 얻으려 들어가 있는 주제 오픈채팅방이 있습니다. 저는 AI·개발 트렌드를 좇는 방 몇 개를 모니터링하는데, 이런 방은 활발하면 한 달에 수천~수만 건이 쌓여 사람이 도저히 다 읽을 수 없습니다.
여기서는 ‘이슈 정리’가 아니라 트렌드 다이제스트가 답입니다 — 한 달 대화에서 ① 어떤 도구·모델이 많이 언급됐는지(랭킹) ② 가장 많이 공유된 링크 ③ 반복되는 질문 ④ 주목할 메시지 ⑤ 핫 키워드를 자동으로 뽑아 줍니다. 방에 며칠 못 들어가도, 다이제스트 한 장이면 흐름이 잡힙니다.
한 번에 끝내는 설치 — 시행착오 없이
설치는 한 번만 하면 됩니다. 처음 시도할 때 막히는 지점이 몇 군데 정해져 있는데, ‘오류가 나면 고치는’ 방식 대신 그 길을 처음부터 피해 가도록 짠 하나의 연속 프롬프트로 정리했습니다. 명령줄이 익숙하지 않아도, AI 코딩 에이전트(터미널을 다루는 도구)에 아래를 그대로 붙여 넣으면 한 번에 끝납니다. 저장소는 github.com/NomaDamas/katok 입니다.
(https://github.com/NomaDamas/katok)을 처음부터 막힘 없이 설치·설정하고 싶습니다.
아래 순서를 그대로, 한 단계씩 실행해 주세요. 각 명령은 실행 전에 무엇을 하는지 한 줄로
설명하고 내 확인을 받은 뒤 진행하며, 한 단계가 끝나면 다음 단계로 이어가세요.
1) Homebrew는 쓰지 마세요. (서드파티 탭 신뢰 게이트와 다운로드 차단으로 자주 막힙니다.)
대신 rustup + cargo로 설치합니다:
curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh -s — -y
source “$HOME/.cargo/env”
2) katok은 반드시 git 최신판으로 설치하세요. (crates.io 등록본은 기능이 빠져 있을 수 있습니다.)
cargo install –git https://github.com/NomaDamas/katok.git –force
3) 전체 디스크 접근 권한을 부여하고, 부여한 뒤 터미널을 재시작하세요.
(이 단계를 건너뛰면 명령은 실행돼도 데이터가 비어 보입니다.)
katok permissions macos
4) 동작은 –version이 아니라 –help와 doctor로 확인하세요. (katok에는 버전 플래그가 없습니다.)
katok –help
katok doctor –macos-probe
5) 어느 단계든 오류가 나면 멈추고 원문 오류를 내게 보여준 뒤, 임의로 다음 단계로 넘어가지 마세요.
6) 중요: 이 도구는 읽기 전용입니다. 내 카카오톡에 메시지를 쓰거나 보내는 동작은 절대 하지 마세요.
처음 한 번 · 분석할 방 찾기
설치 다음에 만나는 작은 벽이 하나 더 있습니다 — 카톡 그룹방은 이름이 비어 있을 때가 많아, 도구에서 ‘chat-(긴 숫자)’처럼 보입니다. 그래서 “○○방”이라고 이름으로 부르면 못 찾습니다. 게다가 메시지가 가장 많은 방이 정작 내가 찾는 모임 방이 아닌 경우도 흔합니다(대형 정보성 오픈채팅이 1등인 식). 그래서 이름이 아니라 ‘발신자’와 ‘내용’으로 찾고, 한 번 찾으면 그 방의 ID를 적어 두고 매달 재사용합니다. 이 또한 처음 한 번이면 끝입니다.
이름이 비어 ‘chat-(숫자)’로만 보일 수 있으니, 이름이 아니라 발신자와 내용으로
찾습니다. 아래를 한 단계씩, 실행 전 한 줄 설명 + 내 확인 후 진행해 주세요.
1) 먼저 대화방 목록을 보여주세요 (본문 말고 방 단위만):
katok source chats –source macos
2) 목록에서 내가 찾는 방을 ① 자주 등장하는 발신자 닉네임이나
② 내가 알려주는 고유 단서로 짚어 주세요. 단서로 검색할 때는:
katok search keyword “<특정 날짜의 한 줄 메시지나 우리끼리만 쓰는 표현>”
그 표현이 어느 방에 있었는지로 방을 역추적합니다.
3) 확정된 방들을 {“방이름”:”방 ID”, …} 형태의 메모(또는 작은 JSON 파일)로
정리해 주세요. 다음부터는 이 ID로 바로 지정해 매달 재사용합니다.
4) 읽기 전용 원칙은 그대로 — 내 카카오톡에 어떤 것도 쓰거나 보내지 마세요.
source chats·search는 katok 자체 명령입니다.)source chats는 --source macos를 붙여야 라이브 카톡 DB를 읽습니다(안 붙이면 샘플 경로를 찾다가 오류가 납니다). ② 그래도 방이 십여 개뿐이라면 도구 버그가 아니라, 이 목록에는 이 Mac에 로컬로 저장(캐시)된 방만 나오기 때문입니다. 카톡을 로그인·실행해 둔 동안 메시지가 도착할 때마다 캐시가 쌓이는 구조라, 오래 쓴 Mac일수록 방이 많고 갓 로그인한 Mac은 최근 활동한 몇 개만 보입니다. 오래된 방을 그냥 열어보는 것만으로는 늘지 않습니다 — 며칠 켜 두며 메시지가 쌓이면 자연히 늘고, 그 뒤 katok sync --source macos를 다시 돌리면 반영됩니다.이렇게 분석을 요청하세요 — 활용 예시 프롬프트
방을 찾았다면, 분석은 자연어로 부탁하면 됩니다. AI 코딩 에이전트가 katok이 만든 로컬 아카이브를 직접 읽어, 원하는 방·기간만 잘라 요약해 줍니다. 목적에 따라 아래처럼 물어보세요 — 모든 예시에 ‘읽기 전용 + 민감정보 가림’을 조건으로 넣어 두었습니다. ○○방 자리에는 위에서 찾은 방 이름(또는 ID)을 넣으면 됩니다.
열어, ‘○○방’의 2026년 5월(한국시간) 대화만 골라 주세요. 그걸로 이번 달 주요
이슈·결정·핵심 인물을 ‘이슈 중심’으로 정리해 주세요. 입퇴장 같은 시스템 메시지와
사진·이모티콘은 빼고, 전화번호·계좌번호는 가려 주세요. 실제 대화는 날짜·발신자와
함께 인용하되, 카톡에 어떤 것도 쓰거나 보내지는 마세요.
② 가장 많이 공유된 링크 ③ 반복된 질문 ④ 핫 키워드 ⑤ 주목할 메시지 5개를 뽑아
한 장으로 요약해 주세요. 본문 전체를 늘어놓지 말고, 위 신호만 집계해서 보여
주세요. (읽기 전용 — 카톡에 쓰기/전송 금지)
시간대를 알려 주세요. 또 이번 달에 처음 말문을 연 새 멤버와, 지난달엔 활발했는데
이번 달 조용해진 멤버를 따로 정리해 주세요. 감시가 아니라 환대가 목적입니다.
(읽기 전용 · 민감정보 가림)
솔직한 전제와 주의
- 환경 제약 — 현재 katok은 Apple Silicon Mac 대상입니다. 설치 후 ‘전체 디스크 접근 권한’을 직접 부여해야 하며, 이는 사람이 해야 하는 보안 단계입니다.
- 업스트림 의존 — 카카오톡의 저장 방식이 바뀌면 복호화가 동작하지 않을 수 있습니다. 오픈소스 갱신에 의존하는 부분입니다.
- 읽기 전용의 양면 — 안전의 핵심이지만, 동시에 “분석만 되고 행동은 안 된다”는 한계이기도 합니다. 의도된 제약입니다.
- n=1 — 이 글은 한 운영자의 사례입니다. 조직·규제 환경에 따라 적용 여부와 방식은 달라집니다.
자동화는 감시가 아니라, 돌봄의 시간을 버는 일
오픈소스 하나가 없앤 것은 ‘내보내기 30분’만이 아니었습니다. 준비 노동에 쏠려 있던 주의를, 정작 중요한 일—이번 달 우리 모임에 무슨 일이 있었고 누구를 더 챙겨야 하는지—로 옮겨 주었습니다. 다만 그 힘이 선을 넘지 않도록, 기능보다 경계를 먼저 설계했습니다. 읽기 전용으로, 로컬에서만, 운영 목적에 한해서.
도구는 점점 강력해집니다. 그래서 매번 같은 질문을 먼저 던지려 합니다 — “이건 할 수 있는 일인가”가 아니라 “이건 해도 되는 일인가, 그리고 무엇을 위해서인가.”
#자동화
#프라이버시
#커뮤니티운영
#카카오톡
이 글은 러닝 커뮤니티 운영을 돕는 한 사람의 자동화 경험을 바탕으로 작성되었습니다. 소개한 오픈소스(katok)는 외부 프로젝트이며, 실제 단톡방 대화나 회원 정보는 본문에 일절 포함하지 않았습니다.