윤누리
윤누리
Admin
🧙 AI 위자드
🎻 루키 파트너
🌈 지피터스금손
🚀 SNS 챌린지 달성자

[Claude Code] 카톡 매크로 시대 끝? 메인폰 하나로 카톡 자동화하는 법 (오픈소스 패치 후기)

📝 한줄 요약

오픈소스 카톡 TUI(agent-messenger)에 KakaoTalk Mac 앱의 로컬 DB를 직접 꽂아서, 3.1년치 옛 대화 + 친구 별명 + 터미널 송신을 한 화면에서 다 되는 하이브리드 어댑터를 만들었습니다. 무엇보다 서브폰·서브컴 없이 메인폰 하나로 카톡 자동화가 가능해졌어요.

🎯 이런 분들께 도움돼요

  • 카톡 자동화 시도해본 적 있는 분 — PC카톡 위에 매크로 올려봤거나 AppleScript로 어떻게든 굴려본 경험이 있는데, 백그라운드에서 깨지거나 서브폰/서브컴까지 동원해야 했던 분

  • 오픈소스 도구를 자기 환경에 맞게 길들이는 사례에 관심 있는 개발자 — npm 글로벌 패키지가 마음에 안 드는 동작을 할 때 어떻게 멱등 패치 스크립트로 길들이는지 궁금한 분

  • 카톡 + Slack + Discord 등 여러 메신저로 커뮤니티/챌린지 운영하는 1인 운영자 — 한 화면에서 다 처리하는 구조가 궁금한 분

😫 문제 상황 (Before)

기존에 카톡 자동화를 하려면 선택지가 사실상 PC카톡 + 매크로밖에 없었어요.

문제는:

  • PC카톡은 한 디바이스 슬롯만 점유 가능 — 평소 쓰는 메인 계정이 점유하고 있으면 자동화용 계정은 다른 컴퓨터를 따로 둬야 함

  • 그래서 결국 서브폰 + 서브컴퓨터 셋팅이 필요했고, 인프라 부담이 컸어요

  • PC카톡 UI를 매크로로 조작하는 방식이라 백그라운드 동작이 안 정적이지 못함 — 창이 가려지거나 비활성화되면 깨짐

  • 게다가 옛날 대화는 카톡 앱 직접 켜서 무한 스크롤해야만 볼 수 있었어요

이 와중에 지인이 agent-messenger라는 오픈소스 TUI를 알려줬어요. 카카오톡 LOCO 서버에 직접 접속해서 메시지를 받아오는 도구였습니다. 태블릿 디바이스로 등록되니까 PC카톡 슬롯을 안 건드린다는 점이 매력적이었어요. "이거면 메인폰 하나로 되는 거 아닌가?" 싶어서 한번 깊게 파봤습니다.

🛠️ 사용한 도구

  • 도구명: Claude Code (CLI)

  • 모델: Claude Opus 4.7 (1M context)

  • 특이사항:

    • 분석/패치/문서 동기화까지 자율 실행하는 /autopilot 스킬 활용

    • 작업 중 발견사항을 다음 세션에 자동 전달하는 메모리 시스템 사용


🔧 작업 과정

1. 일단 띄워보자 — 그런데 시작부터 막힘

agent-messenger를 깔자마자 모듈 누락 에러로 죽었어요.

이거 한번 봐볼래? 그리고 내 컴퓨터에서도 세팅하고 싶어.

Claude한테 공식 문서 분석부터 맡겼더니, 카카오톡 인증 흐름(이메일 → 비밀번호 → 디바이스 코드)을 정리해 주고, 누락된 npm 패키지 5개를 한 번에 설치하는 방식까지 알려줬어요. 분리해서 설치하면 앞에 깐 게 빠져버리는 미묘한 npm 동작까지 짚어줘서, 한 줄짜리 명령어가 아니라 "왜 이렇게 해야 하는지"가 같이 정리됐어요.

이 단계에서 카톡 인증을 마치고 메인폰 카톡과는 별도로 태블릿 슬롯에 자리를 잡았습니다.


2. "이거 메시지 안 보이잖아" — 표시 문제 발견

TUI를 띄워보니 채팅방 이름이 멤버 닉네임 자동 조합으로 나오고, 메시지 작성자가 그냥 숫자 ID로 표시됐어요.

근데 메시지를 가져올때 보면

  1. 내가 저장한 이름이 아니고 유저가 본인이 세팅해둔 카카오톡 닉네임이 나오고

  2. 채팅방 내 대화 내역에서는 카카오톡 닉네임이 아닌 유저 ID 번호로 나오거든?

  3. 만약 테블릿인척 하면 유저 닉네임으로 제대로 나와야할텐데 왜 그런거야?

Claude가 분석해준 답: 디바이스 타입 문제가 아니라, agent-messenger가 친구 풀 메타데이터 동기화 API를 구현하지 않은 게 근본 원인이었어요. 카카오 서버는 메시지 패킷에 작성자의 숫자 ID만 보내고, 실제 별명은 클라이언트가 별도로 동기화해서 매칭해야 합니다.


3. 등록일 ± 1일 한계 발견 — 진짜 골치는 여기서

근데 전부 다 4/28부터 보이고 있어서 등록일과 연관이 있는 것 같긴해.

위로 스크롤해도 며칠 전까지밖에 안 보였어요. 카카오 LOCO 서버는 신규 디바이스에 백필을 풀로 안 줘서, 새로 등록한 슬롯은 등록일 ± 약 1일까지밖에 메시지를 못 받습니다. 메시지 한 번에 가져오는 양을 50개에서 200개로 늘려도 소용없었어요. 시간 자체가 짤려 있었던 거예요.

여기서 이 작업의 첫 번째 깨달음의 순간이 왔습니다.

side-project/kakao_automation 폴더를 보면 로컬에 저장되어 있는 카카오톡 정보를 가지고 있고, 내가 이 피씨에 카톡을 설치한지 오래 되어서 내가 원하는 만큼의 정보가 이미 있긴한데, 이걸 가져오는게 가능할까?

Mac에 카톡 깐 지 오래됐으니 로컬 DB에 분명 옛 메시지가 다 있을 것 같아서 들춰봤더니, 2023년 3월 7일부터 현재까지 3.1년치 메시지가 sqlcipher DB에 그대로 있었어요. 친구 별명·채팅방 이름·멤버 정보까지 통째로요. 손만 뻗으면 닿는 데 있었는데 그동안 못 보던 거였습니다.


4. 두 데이터 소스의 약점이 서로의 강점이라는 발견

이 시점에서 두 번째 깨달음이 왔어요.

LOCO (agent-messenger)

로컬 DB (KakaoTalk Mac 앱)

옛 히스토리

❌ 등록일 ± 1일까지만

✅ 3.1년치 (2023-03-07~)

친구 별명·방 이름

❌ 숫자 ID·자동조합

✅ 내가 저장한 이름 그대로

실시간 송수신

✅ TCP 직결, 즉시

❌ UI 자동화 필요 (백그라운드 부적합)

외부 인프라

메인 카톡 슬롯 무관

카톡 앱이 켜져 있으면 됨

서로 정확히 반대로 보완하는 구조였어요. 읽기는 로컬 DB에서, 쓰기는 LOCO에서 가져가면 한쪽 단점도 없이 합쳐집니다. 이걸 어댑터 한 군데에 꽂으면 되는 거였어요.


5. 패치 스크립트로 길들이기 (v1 → v2)

agent-messenger는 npm 글로벌 패키지라 npm update -g 한 번이면 패치한 부분이 통째로 덮어씌워져요. 손으로 매번 수정할 순 없으니, 한 명령에 패치를 다시 발라주는 스크립트가 필요했습니다.

일단 각 채팅방별로 메시지를 200개씩 볼 수 있게 수정해보자.

Claude가 만들어준 patch_messenger.py는:

  • 어댑터 파일에 정확한 문자열 매칭으로 4곳을 수정

  • 멱등성 보장 (이미 적용된 상태면 건너뜀)

  • // kakao-name-patch:v2 같은 마커로 버전 추적

  • 누락 npm 패키지 5개 자동 설치

  • 친구 별명·채팅방 이름 캐시 자동 갱신

  • ESM import 검증으로 패치 후 정상 동작 확인

여기까지가 v2였어요. 이름 매핑 + 200개 limit + 누락 deps까지 한 번에 처리되는 깔끔한 구조였습니다.


6. 본진 작업 — getMessages 본문을 통째로 갈아끼우기 (v3)

이제 옛 히스토리를 끌어오기 위해 메시지 fetch 본문 자체를 로컬 DB 호출로 교체할 차례. 다음 세션에서 autopilot 스킬로 이 부분을 통째로 맡겼어요.

/oh-my-claudecode:autopilot

agent-messenger TUI를 로컬 KakaoTalk DB(kakaocli) 기반으로 전환 ... Phase 1 — getMessages 본문을 kakaocli 호출로 교체

autopilot은 분석부터 코드 수정·검증·문서 동기화까지 약 7분 안에 완료했어요:

  • 마커를 v2에서 v3으로 올리고, 이전 버전 마커가 감지되면 자동으로 백업에서 복원 후 v3 적용하는 마이그레이션 로직 추가

  • 메시지 가져오는 함수의 본문을 통째로 로컬 DB CLI 호출로 교체

  • 호출이 실패하면(예: 카톡 앱이 꺼져 있으면) 자동으로 LOCO 서버로 fallback하는 안전망 추가

  • 송신 부분은 일부러 안 건드림 (LOCO가 실시간이라 그대로 둬야 함)

  • 패치 후 자동으로 ESM import 검증까지 통과

처음 실행해봤을 때 메시지가 시간 역순으로 나오는 작은 버그가 하나 있었어요.

노출되는 대화가 시간 역순인거 말고는 괜찮아보여

원인은 단순했어요. 로컬 DB CLI는 최신순으로 내려주는데 TUI는 오래된→최신 순서를 기대하는 거였습니다. 한 줄(reverse()) 추가로 해결됐어요.



7. 문서 + 패치 최종 동기화

여기까지 우리 문서랑 side-project/kakao_automation의 문서에 업데이트하고 패치도 적용하자.

마지막으로 두 프로젝트의 canonical 설계 문서와 README를 v3 사양으로 업데이트했어요. 변경된 데이터 흐름 다이어그램, 5개 EDIT 명세, 알려진 한계(캐시 stale, 라이브 listener 미구현 등)까지 정리하고 풀 패치 재적용 — 8,058명 친구 별명 / 458개 채팅방 / 2,065방 멤버 캐시까지 갱신되어 끝.

한국어 텍스트가 적힌 컴퓨터 화면

✅ 결과 (After)

Before vs After

항목

Before (PC카톡 매크로)

After (agent-messenger v3 패치)

필요 인프라

메인폰 + 메인컴 + 서브폰 + 서브컴

메인폰 + 메인컴 (한 대)

자동화 슬롯 점유

PC카톡 슬롯 (메인 계정 충돌)

태블릿 슬롯 (PC카톡과 분리)

백그라운드 동작

창 가려지면 매크로 깨짐

터미널 코드라 안정적

옛 메시지 조회

카톡 앱 무한 스크롤

TUI에서 위로 스크롤 → 3.1년치

작성자 표시

그대로 (숫자 ID 또는 카톡 닉네임)

내가 저장한 별명

채팅방 이름 표시

멤버 닉네임 자동 조합

내가 설정한 이름 그대로

메시지 송신

UI 클릭/타이핑 시뮬레이션

터미널 한 줄 (cron·스크립트로 시간 발송 가능)

가장 큰 변화

PC카톡 매크로 시절엔 자동화하려고 폰 한 대 + 컴 한 대를 더 사야 했어요. 메인 환경을 그대로 두고 자동화하려니 어쩔 수 없었습니다. 이제는 메인폰 하나로 태블릿 슬롯을 쓰니까 추가 디바이스 0대예요.

14
7개의 답글

뉴스레터 무료 구독