SITE SEARCH

검색

사이트 전체 글을 빠르게 찾을 수 있습니다.

RSS FEED

RSS 구독

RSS 리더에서 Project Research의 새 글을 바로 받아볼 수 있습니다.

EMAIL SUBSCRIBE

이메일 구독

새 글을 이메일로 받아봅니다. RSS는 별도 RSS 아이콘을 눌러 동일한 크기의 패널에서 열 수 있습니다.

이메일로 블로그 구독하기

이 블로그를 구독하고 이메일로 새글의 알림을 받으려면 이메일 주소를 입력하세요







매달 단톡방을 손으로 내보내던 일, 오픈소스로 끝냈습니다 — macOS 카톡 분석 자동화

시리즈

매달 단톡방을 열어 ‘관리 > 대화 내보내기 > 이번 달치만 추려서 분석’을 반복하고 있었습니다. 이 입력 단계를 오픈소스 하나로 없앴습니다 — macOS 카카오톡 로컬 데이터를 평문으로 복호화하는 katok 위에, “대화방·기간만 지정하면 알아서 캡쳐·분석”하는 자동화를 얹은 기록. 그리고 자동화만큼 공들인 프라이버시·윤리 설계까지.

바쁜 분을 위한 3줄 요약

① 커뮤니티·소모임 운영자가 매달 하던 ‘카톡 내보내기 → 기간 추려서 → AI에 붙여넣기’라는 수작업의 입력 단계를, 오픈소스 katok(NomaDamas, MIT)으로 없앴습니다 — macOS 카카오톡 로컬 데이터베이스를 평문 SQLite로 복호화해 주는 도구입니다.
② 그 위에 “대화방·기간 지정 → 자동 캡쳐 → 요약”하는 얇은 자동화를 얹으니, 매달 손으로 하던 일이 한 번의 명령으로 줄었습니다.
③ 가장 중요한 건 기능이 아니라 경계입니다 — 전 과정이 로컬에서, 읽기 전용으로만 돌아가고 외부 전송이 없습니다. 카톡에 글을 쓰거나 보내는 건 원천적으로 불가능합니다. “분석할 수 있다”와 “분석해도 된다”는 다르기에, 프라이버시·동의 설계에 글의 절반을 썼습니다.

들어가며

“이번 달 단톡방 좀 정리해 볼까” 한 번에, 매번 30분이 사라졌습니다

모임이든 회사든, 단톡방을 운영해 본 분이라면 익숙한 장면이 있습니다. 월말이 되면 카카오톡을 열고, 관리 > 대화 내용 내보내기를 눌러 텍스트로 뽑고, 이번 달 날짜만 손으로 추려낸 다음, 그걸 다시 AI에게 붙여 넣어 “이번 달 주요 이슈를 정리해 줘”라고 부탁합니다. 한 방이면 다행이지만 방이 여러 개면 같은 일을 여러 번 반복합니다.

문제는 시간만이 아닙니다. 기간을 잘못 추리거나, 한 방을 빠뜨리거나, 내보내기 형식이 매번 미묘하게 달라지는 휴먼 에러가 끼어듭니다. 정작 가치 있는 일—대화 속 흐름과 이슈를 읽고 운영에 반영하는 일—은 그 뒤에야 시작됩니다. 즉 우리는 ‘분석’이 아니라 ‘분석을 위한 준비’에 매달 시간을 쓰고 있었던 셈입니다.

저는 러닝 커뮤니티 운영을 돕고 있습니다. 매달 단톡방의 흐름을 정리해 회원들과 나누는데, 늘 막히는 지점이 ‘내보내기’였습니다. 결국 이런 생각이 들었습니다 — “입력 단계만 자동화해도 운영자의 한 달이 가벼워지지 않을까.” 마침 그 입력을 풀어 주는 오픈소스가 있었습니다.

PART 1 · 문제

수작업 워크플로의 진짜 비용

기존 흐름을 그대로 적어 보면 마찰 지점이 분명해집니다.

표 1 · 기존 수작업 단계와 마찰
단계 하는 일 마찰
① 내보내기 방마다 관리 > 대화 내보내기 방이 여러 개면 N번 반복
② 기간 추출 이번 달 날짜만 손으로 잘라내기 경계 실수·누락 위험
③ 정제 입퇴장·사진 표시 등 잡음 정리 형식이 매번 미묘하게 다름
④ 분석 AI/도구에 붙여 넣어 요약 진짜 가치는 여기서 시작
Source: 필자 운영 경험 기반 워크플로 정리(n=1).

①~③은 준비 노동입니다. 사람이 꼭 해야 할 판단이 없는데도 매달 손이 갑니다. 자동화의 1차 표적은 바로 여기였습니다 — ④를 더 똑똑하게 만들기 전에, ①~③을 사라지게 하는 것.

PART 2 · 오픈소스

katok — macOS 카톡 로컬 데이터를 평문으로 복호화하는 도구

가장 어려운 단계, 즉 ‘암호화된 카톡 데이터를 읽을 수 있게 만드는 일’을 풀어 주는 오픈소스가 있습니다. katok(NomaDamas, MIT 라이선스)입니다. macOS 카카오톡이 로컬에 보관하는 암호화 데이터베이스를 내 컴퓨터 안에서 복호화해, 평범한 SQLite 파일(누구나 SQL로 조회 가능한 형식)로 정규화해 줍니다.

왜 이게 핵심인가 — 데이터가 일단 ‘평범한 SQLite’가 되면, 그다음은 특별할 게 없습니다. “이 방의, 이 기간 대화를 전부 뽑아 줘”가 SQL 한 줄로 끝납니다. 가장 까다로운 복호화는 오픈소스에 맡기고, 나머지(원하는 방·기간만 잘라 분석에 넘기기)는 누구나 만들 수 있는 얇은 코드로 해결됩니다.

katok 자체는 조회·검색 도구입니다. 명령어를 보면 성격이 분명합니다 — 상태 점검(doctor), 로컬 데이터 동기화(sync), 색인(index), 검색(search). 카카오톡으로 메시지를 보내거나 데이터를 고치는 명령은 존재하지 않습니다. 즉 설계상 ‘읽기’만 가능하고 ‘쓰기’는 없습니다. 이 점은 뒤의 프라이버시 절에서 다시 중요해집니다.

MIT 라이선스 · Apple Silicon(애플 실리콘) Mac 대상. 설치·권한 부여는 각자 환경에서 직접 수행해야 합니다.
🔗 오픈소스 살펴보기 — katok 저장소: github.com/NomaDamas/katok (NomaDamas · MIT 라이선스). 설치 방법과 흔한 시행착오를 줄이는 팁은 아래 Part 6 · 시작하기에 정리했습니다.

PART 3 · 자동화

“대화방 · 기간”만 지정하면 캡쳐·분석까지

katok이 만들어 준 평문 SQLite 위에, 입력 단계를 없애는 얇은 다리(브릿지)를 얹었습니다. 흐름은 이렇게 단순해집니다.

① 로컬 동기화  →  ② 대화방 × 기간 자동 슬라이스  →  ③ 요약·분석
(암호화 데이터 → 평문 SQLite)    (SQL 한 줄)    (이슈·트렌드 정리)

설계에서 신경 쓴 세 가지만 짚겠습니다.

  • 기간은 한국 시간(KST) 기준으로 정확히 — 내부 저장은 세계표준시(UTC)라, “5월”을 말하면 자동으로 한국 시간 경계로 변환해 자릅니다. 사람이 날짜를 손으로 추리지 않습니다.
  • 대화가 아닌 것은 걸러냅니다 — 입퇴장·초대 같은 시스템 메시지, 사진·이모티콘 같은 미디어는 분석 잡음이 되므로 자동으로 구분합니다(미디어는 ‘몇 건’으로만 집계).
  • 용도에 따라 두 갈래 — 회원 활동 정리는 이슈 중심 월간 요약으로, 정보·도구 트렌드 파악은 키워드·도구 다이제스트로 나눕니다. 같은 원본을 보더라도 보고 싶은 것이 다르기 때문입니다.
한 줄 설계 원칙 — 어려운 일(복호화)은 검증된 오픈소스에 맡기고, 쉬운 일(원하는 범위만 잘라 분석에 넘기기)만 직접 만든다. 그래서 자동화 코드는 얇고, 깨질 위험도 작습니다.

효과 — 매달 45분이 1분 이내로, 3년치는 몇 초로

표 3 · 시간 절약 (필자 환경 n=1)
작업 수동 (추정) 자동 (실측·체감)
매달 11개 방 캡쳐·정제 방당 약 4분 × 11 ≈ 45분 + 휴먼 에러 동기화 후 1분 이내 (슬라이스 초 단위)
3년치(2024~2026) 11개 방 누적 방별 전체 내보내기 + 정제 = 며칠 단위 백필 약 5.4만 건 캡쳐 1.3초
정보·트렌드 방 한 달 요약 수천~수만 건을 다 못 읽음 핵심 신호 추출 초 단위
수동 시간은 운영 경험 기반 추정(n=1), 자동 시간은 필자 Mac 실측. 최초 1회 로컬 동기화는 데이터 양에 따라 더 걸릴 수 있으며, 위 수치는 캡쳐·집계 연산 기준입니다.
🚀 와우 포인트 — 지난 3년(2024~2026)에 걸친 11개 그룹톡의 누적 대화 약 5.4만 건을, 동기화가 끝난 상태에서 캡쳐하는 데 1.3초가 걸렸습니다(필자 Mac 실측). 같은 일을 손으로 했다면 방마다 내보내고, 기간을 추리고, 형식을 정제하느라 며칠을 썼을 분량입니다. ‘준비 노동’이 사실상 사라지는 지점이 바로 여기입니다.

PART 4 · 프라이버시 (가장 중요)

“분석할 수 있다”와 “분석해도 된다”는 다릅니다

대화 데이터를 다루는 도구를 소개하면서 기능만 말하고 끝내는 건 무책임합니다. 이 자동화에서 기능보다 먼저 정한 것은 넘지 않을 선이었습니다.

표 2 · 설계에 박아 넣은 안전 경계
원칙 구현
로컬에서만 전 과정이 내 Mac 안에서 처리 — 대화 내용을 외부 서버로 보내지 않음
읽기 전용 조회만 가능 · 카톡에 쓰기/전송 불가 — 자동 답장·자동 공지 같은 건 원천적으로 안 됨
민감정보 가림 전화번호·계좌·예약번호 등은 산출물에서 자동 마스킹
비공개 배포 요약을 공유할 때도 검색 비노출(noindex) + 회원 한정 — 외부 공개 아님
목적 제한 ‘운영에 필요한 흐름 파악’에 한정 — 개인 감시·평가 용도 아님
읽기 전용이라는 점은 단순한 약속이 아니라 도구의 한계입니다 — katok에 전송 기능 자체가 없고, 자동화는 데이터를 읽기 전용 모드로만 엽니다.
꼭 짚고 갈 것 — 기술적으로 가능하다고 해서 윤리적으로 허용되는 건 아닙니다. ① 내가 속한 방, 운영 목적에 한해 사용하세요. ② 사적인 1:1 대화나 민감한 내용은 분석 대상에서 빼는 것이 기본입니다. ③ 커뮤니티라면 “운영을 위해 대화 흐름을 정리한다”는 점을 구성원에게 투명하게 알리는 것이 신뢰의 출발입니다. ④ 개인정보보호 관련 법령은 상황마다 다르게 적용되니, 민감한 경우 전문가의 확인을 받으세요(본 글은 법률 자문이 아닙니다).

PART 5 · 실전

그래서 무엇이 보이나 — 시간 · 주제 · 사람

입력이 자동화되면, 남는 에너지를 ‘무엇을 볼 것인가’에 쓸 수 있습니다. 운영에 도움이 되는 축은 크게 셋입니다(아래는 일반적인 활용 예시이며, 특정 개인의 데이터를 가리키지 않습니다).

  • 시간 흐름 — 언제 대화가 몰리는가. 가장 활발한 시간대를 알면 공지를 언제 올려야 잘 읽히는지가 정해집니다. 조용해진 구간은 자극이 필요한 신호입니다.
  • 주제별 — 이번 달 무엇이 화제였는가. 행사·이슈·질문의 덩어리를 보면 운영의 우선순위가 보입니다.
  • 사람(참여 양상) — 참여가 소수에 쏠렸는지 고르게 퍼졌는지, 새로 말문을 연 사람은 누구인지. 이는 감시가 아니라 환대의 데이터입니다 — 새 얼굴은 격려하고, 한동안 조용한 분께는 안부를 건네는.

또 하나의 쓸모 — 정보용 오픈채팅방을 ‘단번에’ 파악

우리 모임 방과는 별개로, 정보를 얻으려 들어가 있는 주제 오픈채팅방이 있습니다. 저는 AI·개발 트렌드를 좇는 방 몇 개를 모니터링하는데, 이런 방은 활발하면 한 달에 수천~수만 건이 쌓여 사람이 도저히 다 읽을 수 없습니다.

여기서는 ‘이슈 정리’가 아니라 트렌드 다이제스트가 답입니다 — 한 달 대화에서 ① 어떤 도구·모델이 많이 언급됐는지(랭킹) ② 가장 많이 공유된 링크 ③ 반복되는 질문 ④ 주목할 메시지 ⑤ 핫 키워드를 자동으로 뽑아 줍니다. 방에 며칠 못 들어가도, 다이제스트 한 장이면 흐름이 잡힙니다.

📡 실측 — 모니터링 세트(여러 방 합산 약 3만 건, 한 달치)에서 핵심 신호를 추출하는 데 약 1.5초가 걸렸습니다. 덤으로, 여러 방을 비교해 보면 신호가 거의 없는 방이 드러납니다 — 그런 방은 모니터링에서 빼고 핵심 방만 남기는 식으로, ‘무엇을 볼지’까지 데이터로 가지치기할 수 있습니다.
핵심 전환 — 자동화의 목적은 ‘더 많이 들여다보기’가 아니라 ‘준비 노동을 없애 사람을 돌볼 시간을 되찾기‘입니다. 숫자는 환대를 위한 단서일 때 의미가 있습니다.

PART 6 · 시작하기

한 번에 끝내는 설치 — 시행착오 없이

설치는 한 번만 하면 됩니다. 처음 시도할 때 막히는 지점이 몇 군데 정해져 있는데, ‘오류가 나면 고치는’ 방식 대신 그 길을 처음부터 피해 가도록 짠 하나의 연속 프롬프트로 정리했습니다. 명령줄이 익숙하지 않아도, AI 코딩 에이전트(터미널을 다루는 도구)에 아래를 그대로 붙여 넣으면 한 번에 끝납니다. 저장소는 github.com/NomaDamas/katok 입니다.

복사용 — AI 코딩 에이전트에 그대로 붙여넣기 (또는 1)~4) 명령만 순서대로 실행)
나는 Apple Silicon Mac을 쓰는 비개발자입니다. 오픈소스 ‘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) 중요: 이 도구는 읽기 전용입니다. 내 카카오톡에 메시지를 쓰거나 보내는 동작은 절대 하지 마세요.

이 프롬프트는 자주 막히는 길(Homebrew·구버전·버전 플래그·권한 누락)을 처음부터 피하도록 짜여 있어, 그대로 따르면 별도 수정 없이 한 번에 설치됩니다. 명령만 직접 실행하고 싶다면 1)~4)의 명령 줄만 순서대로 복사해도 됩니다. 전체 디스크 접근 권한은 macOS 보안 단계라 사람이 직접 허용해야 합니다(자동화 불가). 통제권은 내가 쥐고, 도구는 안내만 하게 하는 것이 핵심입니다.

처음 한 번 · 분석할 방 찾기

설치 다음에 만나는 작은 벽이 하나 더 있습니다 — 카톡 그룹방은 이름이 비어 있을 때가 많아, 도구에서 ‘chat-(긴 숫자)’처럼 보입니다. 그래서 “○○방”이라고 이름으로 부르면 못 찾습니다. 게다가 메시지가 가장 많은 방이 정작 내가 찾는 모임 방이 아닌 경우도 흔합니다(대형 정보성 오픈채팅이 1등인 식). 그래서 이름이 아니라 ‘발신자’와 ‘내용’으로 찾고, 한 번 찾으면 그 방의 ID를 적어 두고 매달 재사용합니다. 이 또한 처음 한 번이면 끝입니다.

복사용 — AI 코딩 에이전트에 그대로 붙여넣기
이제 분석할 단톡방을 한 번만 식별해서 메모해 두려고 합니다. 카톡 그룹방은
이름이 비어 ‘chat-(숫자)’로만 보일 수 있으니, 이름이 아니라 발신자와 내용으로
찾습니다. 아래를 한 단계씩, 실행 전 한 줄 설명 + 내 확인 후 진행해 주세요.

1) 먼저 대화방 목록을 보여주세요 (본문 말고 방 단위만):
katok source chats –source macos
2) 목록에서 내가 찾는 방을 ① 자주 등장하는 발신자 닉네임이나
② 내가 알려주는 고유 단서로 짚어 주세요. 단서로 검색할 때는:
katok search keyword “<특정 날짜의 한 줄 메시지나 우리끼리만 쓰는 표현>”
그 표현이 어느 방에 있었는지로 방을 역추적합니다.
3) 확정된 방들을 {“방이름”:”방 ID”, …} 형태의 메모(또는 작은 JSON 파일)로
정리해 주세요. 다음부터는 이 ID로 바로 지정해 매달 재사용합니다.
4) 읽기 전용 원칙은 그대로 — 내 카카오톡에 어떤 것도 쓰거나 보내지 마세요.

핵심은 “한 번 식별 → ID 고정 → 영구 재사용”입니다. 처음에만 발신자·단서로 찾고, 그다음부터는 이름이 비어 있든 말든 ID로 정확히 같은 방을 집습니다. (위 source chats·search는 katok 자체 명령입니다.)
방이 생각보다 적게 보인다면 — 두 가지를 확인하세요. ① source chats--source macos를 붙여야 라이브 카톡 DB를 읽습니다(안 붙이면 샘플 경로를 찾다가 오류가 납니다). ② 그래도 방이 십여 개뿐이라면 도구 버그가 아니라, 이 목록에는 이 Mac에 로컬로 저장(캐시)된 방만 나오기 때문입니다. 카톡을 로그인·실행해 둔 동안 메시지가 도착할 때마다 캐시가 쌓이는 구조라, 오래 쓴 Mac일수록 방이 많고 갓 로그인한 Mac은 최근 활동한 몇 개만 보입니다. 오래된 방을 그냥 열어보는 것만으로는 늘지 않습니다 — 며칠 켜 두며 메시지가 쌓이면 자연히 늘고, 그 뒤 katok sync --source macos를 다시 돌리면 반영됩니다.

이렇게 분석을 요청하세요 — 활용 예시 프롬프트

방을 찾았다면, 분석은 자연어로 부탁하면 됩니다. AI 코딩 에이전트가 katok이 만든 로컬 아카이브를 직접 읽어, 원하는 방·기간만 잘라 요약해 줍니다. 목적에 따라 아래처럼 물어보세요 — 모든 예시에 ‘읽기 전용 + 민감정보 가림’을 조건으로 넣어 두었습니다. ○○방 자리에는 위에서 찾은 방 이름(또는 ID)을 넣으면 됩니다.

예시 1 — 우리 모임 방, 한 달 이슈 정리
katok 아카이브(~/Library/Application Support/katok/archive.sqlite3)를 읽기 전용으로
열어, ‘○○방’의 2026년 5월(한국시간) 대화만 골라 주세요. 그걸로 이번 달 주요
이슈·결정·핵심 인물을 ‘이슈 중심’으로 정리해 주세요. 입퇴장 같은 시스템 메시지와
사진·이모티콘은 빼고, 전화번호·계좌번호는 가려 주세요. 실제 대화는 날짜·발신자와
함께 인용하되, 카톡에 어떤 것도 쓰거나 보내지는 마세요.
예시 2 — 정보용 오픈채팅방, 한 달 트렌드 다이제스트
‘△△ 오픈채팅방’의 2026년 6월 한 달 대화에서 ① 가장 많이 언급된 도구·모델 랭킹
② 가장 많이 공유된 링크 ③ 반복된 질문 ④ 핫 키워드 ⑤ 주목할 메시지 5개를 뽑아
한 장으로 요약해 주세요. 본문 전체를 늘어놓지 말고, 위 신호만 집계해서 보여
주세요. (읽기 전용 — 카톡에 쓰기/전송 금지)
예시 3 — 시간·사람 축, 운영 인사이트
‘○○방’의 최근 3개월 활동을 시간대별·요일별로 집계해, 공지를 올리기 좋은
시간대를 알려 주세요. 또 이번 달에 처음 말문을 연 새 멤버와, 지난달엔 활발했는데
이번 달 조용해진 멤버를 따로 정리해 주세요. 감시가 아니라 환대가 목적입니다.
(읽기 전용 · 민감정보 가림)
같은 패턴으로 방 이름과 기간만 바꿔 매달 반복할 수 있습니다. 처음 한 번 방을 찾아 두면, 그다음부터는 “○○방, 지난달 이슈 정리해 줘” 한 줄이면 충분합니다.

PART 7 · 한계

솔직한 전제와 주의

  • 환경 제약 — 현재 katok은 Apple Silicon Mac 대상입니다. 설치 후 ‘전체 디스크 접근 권한’을 직접 부여해야 하며, 이는 사람이 해야 하는 보안 단계입니다.
  • 업스트림 의존 — 카카오톡의 저장 방식이 바뀌면 복호화가 동작하지 않을 수 있습니다. 오픈소스 갱신에 의존하는 부분입니다.
  • 읽기 전용의 양면 — 안전의 핵심이지만, 동시에 “분석만 되고 행동은 안 된다”는 한계이기도 합니다. 의도된 제약입니다.
  • n=1 — 이 글은 한 운영자의 사례입니다. 조직·규제 환경에 따라 적용 여부와 방식은 달라집니다.

마무리

자동화는 감시가 아니라, 돌봄의 시간을 버는 일

오픈소스 하나가 없앤 것은 ‘내보내기 30분’만이 아니었습니다. 준비 노동에 쏠려 있던 주의를, 정작 중요한 일—이번 달 우리 모임에 무슨 일이 있었고 누구를 더 챙겨야 하는지—로 옮겨 주었습니다. 다만 그 힘이 선을 넘지 않도록, 기능보다 경계를 먼저 설계했습니다. 읽기 전용으로, 로컬에서만, 운영 목적에 한해서.

도구는 점점 강력해집니다. 그래서 매번 같은 질문을 먼저 던지려 합니다 — “이건 할 수 있는 일인가”가 아니라 “이건 해도 되는 일인가, 그리고 무엇을 위해서인가.”

#오픈소스
#자동화
#프라이버시
#커뮤니티운영
#카카오톡

이 글은 러닝 커뮤니티 운영을 돕는 한 사람의 자동화 경험을 바탕으로 작성되었습니다. 소개한 오픈소스(katok)는 외부 프로젝트이며, 실제 단톡방 대화나 회원 정보는 본문에 일절 포함하지 않았습니다.

Project Research에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기