📝 한줄 요약
2014년부터 쌓인 텔레그램 대화 55,000개를 AI와 함께 주제별 아카이브로 정리했다. 이제 "우리 그때 무슨 얘기 많이 했지?"를 수초 안에 찾을 수 있다.
바쁘시면 이것만 읽어도 돼요:
Codex CLI로 12년치 텔레그램 대화(55,514개 메시지)를 2,706개 청크로 정리
신앙·법조·정치·여행·AI·우정 6개 주제 보고서 자동 생성
대화 패턴만으로 두 사람의 MBTI까지 추정
첫 보고서가 마음에 안 들면 "수박겉핥기 같다"고 말하면 된다 — 그게 전부
앞으로 다른 친구 대화도 같은 방식으로 아카이빙 예정
AI에게 "계획만 짜고 실행은 보류해"가 생각보다 강력한 요청이다
🎯 이런 분들께 도움돼요
수년 치 카톡·텔레그램 대화가 앱 안에 묻혀있는 사람
언젠가 그 기록이 사라질까봐 걱정되는 사람
AI로 "그때 우리 뭔 얘기 했지?"를 검색하고 싶은 사람
😫 문제 상황 (Before)
텔레그램 앱 안에 2014년부터 쌓인 대화가 있었다. 한 친구와 12년 동안 나눈 대화였다.
특별히 불편하지는 않았다. 그냥 거기 있었다. 그런데 어느 날 문득 이런 생각이 들었다. 저 대화, 언젠가 사라지 면 어쩌지? 앱이 서비스를 종료할 수도 있고, 폰을 바꾸다가 날릴 수도 있다. 12년치 대화가 그냥 없어진다는 게 아깝다는 생각이 들었다.
두 번째 불편함은 검색이었다. "그때 우리 그 친구 얘기 했던 거 어디 있더라?" 싶을 때 텔레그램 검색을 하면 수백 개 결과가 나왔다. 맥락 없이 한 줄씩 툭툭 튀어나오는 검색 결과를 하나하나 확인하는 건 사실상 불가능했다.
AI로 자연어 질문이 가능한 아카이브를 만들 수 있다면 어떨까. "우리가 신앙에 대해 어떤 얘기를 했지?" 같은 질문을 던지면 맥락 있는 답이 나오는 구조. 그게 목표였다.
🛠️ 사용한 도구
도구: Codex CLI (OpenAI 기반 AI 코딩 에이전트)
모델: GPT-5
데이터: 텔레그램 대화 export 파일 (
result.json, 29MB)지식 베이스: cmds-llm-wiki (Obsidian 기반 마크다운 볼트)
🔧 작업 과정
일단 얼마나 있는지 확인부터 — 숫자에 놀랐다
작업을 시작하기 전에, 텔레그램에서 대화 내보내기(export)를 했다. JSON 파일 하나가 생겼다. 29MB였다.
여기 inbox에 telegram 대화 json 파일이 있는데, 이거 어떻게 chunking할 것인지 schema를 짜봐. 일단 계획만 세우고 실행은 보류해AI가 먼저 파일을 열어봤다. 그리고 통계를 뽑아줬다.
대화 상대방: 이**
메시지 수: 55,514개
날짜 범위: 2014년 9월 30일 ~ 2026년 6월 11일
미디어(사진·파일): 1,932개
답장(reply): 4,418개
12년이다. 55,000개가 넘는다. 숫자로 보니 실감이 났다.
"계획만 세우고 실행은 보류해"라고 한 게 여기서 빛을 발했다. 덜컥 실행부터 했다가 잘못된 방향으로 가면 수정하기 어렵다. AI에게 먼저 전체 구조를 설계하게 하고, 내가 확인하고 나서 실행하는 방식이 훨씬 안전하다.
어떻게 나눌 것인가 — 청킹 기준 설계
55,000개 메시지를 한 덩어리로 두면 AI가 다룰 수 없다. 적절한 단위로 잘라야 한다. 이걸 "청킹(chunking)"이라고 한다.
chunk를 나누는 기준은?AI가 제안한 기준이 직관적이었다. 고정된 글자 수로 자르는 게 아니라, 대화 흐름으로 자르는 것이었다.
마지막 메시지와 6시간 이상 간격이 벌어지면 → 새로운 청크 시작
날짜가 바뀌고 90분 이상 비면 → 새로운 청크
24시간 이상 아무 대화가 없으면 → 무조건 새로운 청크
사람이 대화하는 방식 그대로를 기준으로 삼은 것이다. 월요일 낮에 나눈 이야기와 화요일 저녁에 나눈 이야기는 서로 다른 맥락이니까, 다른 묶음으로 두는 게 맞다.
한 가지 걱정이 생겼다.
시간 간격이 벌어져 있는 경우에도 어떤 대화들은 예전의 대화에 댓글을 달아서 진행시키는 경우가 있는데 그런 경우는 청크끼리 연관성이 있도록 설정할 수 있나?예를 들어, 일주일 전에 나눈 대화에 오늘 답장을 다는 경우가 텔레그램에선 흔하다. 시간 기준으로만 자르면 그 연결이 끊겨버린다.
AI의 해법이 깔끔했다. 답장 관계는 청크를 합치는 이유가 아니라, 청크끼리 연결하는 "엣지(edge)"로 따로 저장하는 것이다. 청크는 시간 기준으로 깔끔하게 자르되, 답장 관계는 별도 파일에 보관해서 나중에 연결해서 볼 수 있게 한다.
실제 실행 — 2,706개 청크 완성
설계를 마치고 실행했다. 55,514개 메시지가 처리됐다.
결과:
청크 수: 2,706개
답장 연결(cross-chunk reply edges): 736개
모든 청크 검증 완료 (잘못 파싱된 줄 0개)
12년치 대화가 2,706개의 의미 있는 대화 묶음으로 정리됐다. 원본 파일은 그대로 보존하고, 처리된 청크는 별도 폴더에 저장했다. 개인 대화이니 기본적으로 외부 공개 없이 개인 아카이브로만 보관하는 설정도 함께 적용했다.
12년 대화 속 키워드 검색 — "ㅌㅇ"을 찾아라
청크가 생기니 이제 검색이 가능해졌다. 우리 대화에 자주 등장하는 특정 인물이 있었다. 그 인물의 이름으로 검색해봤다.
여기서 대화내용 중에 ㅌㅇ에 대한 내용을 정리해서 알려줘결과:
해당 이름이 등장한 메시지: 324개
첫 등장: 2014년 9월 30일
마지막 등장: 2026년 4월 19일
주로 언급한 사람: 이 211회, 오 113회
집중 시기: 2016년에 142건
12년 동안 우리가 그 친구 얘기를 324번 했다는 게 숫자로 나왔다. 그리고 그 주변에 자주 등장하는 단어들 — 교회, 기도, 성경, 정치, 친구 — 로 어떤 맥락에서 이야기가 나왔는지도 파악됐다.
ㅌㅇ의 대화를 정리해줘우리가 자주 인용하던 그 친구의 독특한 표현들이 정리됐다. "XX은 XX이다", "OOOOOOOO다" 같은 것들. 우리 두 사람이 그 표현을 어떻게 논의했는지까지 구분해서 정리됐다.
첫 보고서가 마음에 안 들었다 — 피드백이 핵심이다
청크를 주제별로 묶어 보고서를 만들어달라고 했다. 신앙·법조·정치·여행·AI·우정 6개 주제로.
보고서가 나왔다. 그런데 읽어보니 뭔가 아쉬웠다.
정리한 것을 봤어. 너무 짧게 압축적으로 요약돼있고, 원문이 전혀 인용돼있지 않아서 수박겉핥기같아. 이제 주제를 잡았으니, 그 주제에 따라 세부 주제별로, 세부 토픽별로, 세부 상황별로 원문을 적절히 인용해가면서 이야기를 만들어줘.이게 이번 작업에서 가장 중요한 순간이었다. 첫 결과물이 마음에 안 들면, 구체적으로 뭐가 아쉬운지 말하면 된다. "수박겉핥기 같다"는 표현 하나로 AI가 방향을 완전히 바꿨다.
두 번째로 나온 보고서는 달랐다. 실제 대화에서 발췌한 짧은 인용문들이 들어갔다. 어떤 상황에서 그 이야기가 나왔는지 맥락이 살아있었다. 12년치 대화가 진짜로 이야기가 된 느낌이었다.
예상치 못한 보너스 — MBTI 분석
여기 등장하는 두 인물의 각 MBTI는 뭐일것 같아?딱히 기대하지 않고 물어봤다. 그런데 결과가 꽤 그럴듯했다.
AI는 12년치 대화에서 발화량, 발화 길이, 질문 방식, 반응 패턴, 반복 키워드를 종합해서 추정했다. 각각 어떤 근거로 추정했는지 원문 발췌와 함께 설명해줬다.
물론 실제 검사 결과가 아니다. 하지만 "이 사람의 대화 패턴을 분석해봤을 때"라는 전제로 보면, 고개가 끄덕여지는 결과였다.
✅ 결과 (After)
Before vs After
항목
Before
After
대화 검색
앱 내 단순 키워드 검색, 맥락 없음
주제별·키워드별 맥락 검색 가능
대화 구조
55,514개 메시지가 하나의 파일
2,706개 맥락 단위 청크로 분리
주제 파악
기억에 의존
신앙/법조/정치/여행/AI/우정 6개 보고서
보존 상태
앱에 의존 (사라질 위험)
로컬 파일로 영구 보존
결과물
chunks.jsonl— 2,706개 대화 청크reply-edges.jsonl— 736개 청크 간 답장 연결주제별 요약 보고서 6개
주제별 상세 인용 보고서 6개 (확장판)
ㅌㅇ의 발언 정리 문서
MBTI 추정 분석 문서
💬 이 과정에서 배운 AI 활용 팁
효과적이었던 것
"계획만 세우고 실행은 보류해" — AI에게 먼저 전체 구조를 설계하게 하고, 내가 확인한 뒤 실행하는 순서가 훨씬 안전하다. 대용량 데이터를 다룰 때 특히 중요하다.
첫 결과물에 구체적으로 피드백하기 — "수박겉핥기 같다"는 한 마디가 보고서를 완전히 바꿨다. "마음에 안 든다"보다 "원문 인용이 없어서 맥락이 안 살아있다"처럼 구체적으로 말할수록 결과가 좋다.
기술 구조는 AI에게 맡기기 — 어떤 기준으로 대화를 나눌지, 답장 관계를 어떻게 저장할지 같은 기술적 설계를 내가 알 필요가 없었다. "이런 상황에서는 어떻게 처리해?"라고 물으면 AI가 알아서 설계해준다.
이렇게 하면 안 돼요
처음부터 전부 실행하게 하기 — 설계 없이 바로 실행하면 나중에 수정하기 어렵다. 특히 수만 개 파일을 다루는 경우는 더욱 그렇다.
첫 결과물에 만족하고 넘어가기 — 첫 보고서는 거의 항상 아쉽다. 피드백을 한 번 더 주는 게 귀찮아도 결과물이 확연히 달라진다.
🌍 다른 상황에 적용한다면?
카카오톡 대화 정리: 카카오톡도 대화 내보내기가 된다. 같은 방식으로 오래된 단톡방이나 1:1 대화를 정리할 수 있다.
업무 채팅 아카이빙: 슬랙이나 팀즈 대화도 export 기능이 있다. 프로젝트별로 어떤 결정이 어떻게 내려졌는지 정리하는 데 쓸 수 있다.
일기나 메모 정리: 수년치 노트나 일기가 있다면 비슷한 방식으로 주제별로 묶어볼 수 있다.
🚀 앞으로의 계획
두 가지를 더 해보려고 한다.
다른 친구와의 대화도 아카이빙하기. 이번에 만든 구조가 범용이라, 파일 하나만 추가하면 다른 대화도 같은 방식으로 정리할 수 있다.
자연어로 더 깊이 분석하기. "우리가 가장 많이 대화한 해는?" "여행 이야기가 처음 나온 게 언제지?" 같은 질문을 AI에게 던져보고 싶다. 청크가 다 정리돼있으니 이제 이런 분석이 가능해졌다.
📋 재사용 가능한 프롬프트
프롬프트 1: 청킹 계획 세우기 (실행 전 설계)
[파일명]에 [플랫폼] 대화 파일이 있는데, 이걸 어떻게 청킹할지 스키마를 짜줘. 일단 계획만 세우고 실행은 보류해.
[파일명]과 [플랫폼]은 본인 상황에 맞게 변경하세요.
프롬프트 2: 첫 보고서 피드백
정리한 걸 봤는데, 너무 압축적으로 요약돼있고 원문이 인용돼있지 않아 서 맥락이 안 살아있어. 세부 주제별로, 상황별로 실제 대화 내용을 인용하면서 이야기를 만들어줘.
프롬프트 3: 키워드 검색 + 어록 정리
[대화 아카이브]에서 [키워드]가 등장하는 내용을 정리해줘. 언제 몇 번 나왔는지, 주로 어떤 맥락에서 나왔는지 포함해서.
[대화 아카이브]와 [키워드]는 본인 상황에 맞게 변경하세요.