원래 하고 싶었던 일은 단순했다. 뉴스에서 반복되는 흐름을 찾고 싶었다. 그런데 그 문제를 계속 따라가다 보니, 어느 순간부터 내가 붙잡고 있던 건 "무슨 뉴스가 반복되는가"가 아니라 "AI가 시간을 건너 무엇을, 어떻게 기억할 것인가"라는 훨씬 근본적인 질문이었다. 이번 글은 그 이동 과정에 대한 기록이다. 미리 말해두면, 이 글이 다루는 범위는 구현이 아니라 설계다.
AI-Morning-Brief는 내가 개인적으로 쓰려고 만든 도구로, 매일 아침 AI·개발 관련 뉴스를 모아 요약하고 그날의 흐름을 정리해 전달해준다. 하루 단위뿐 아니라 한 주, 한 달 단위로도 정리된 형태를 받아볼 수 있고, 이 전체가 이미 자동으로 매일 돌아가고 있다. 한 주·한 달 리포트는 하루치보다 나중에 붙인 기능인데, 코드는 다 만들어져 검증까지 마친 상태다. 다만 한 달 단위 리포트를 매달 자동으로 배포하는 작업만 아직 남아 있어, 지금은 필요할 때 직접 실행해서 확인하는 수준이다.
이 글의 주제는 이 파이프라인을 어떻게 만들었는지가 아니다. 이미 이만큼 돌고 있는 것을 다음 단계로 이어가려다가, 생각보다 훨씬 근본적인 문제와 마주친 이야기다.
최근에 지난 2주 정도의 하루·한 주·한 달 리포트를 한꺼번에 놓고 다시 읽어본 적이 있다. 그랬더니 하루치 리포트만 볼 때는 안 보이던 게 보였다. 어떤 주제는 하루는 반짝했다가 사라지고, 어떤 주제는 며칠 동안 계속 이름을 바꿔가며 등장하고 있었다. 이런 흐름은 하루짜리 리포트 하나만 봐서는 절대 알 수 없고, 여러 기간을 겹쳐 봐야만 보이는 것이었다.
그래서 처음 든 생각은 간단했다. "이 반복되는 흐름을 자동으로 짚어주는 기능을 만들면 되겠다." 실제로 이 관찰을 계기로 두 갈래의 과제를 따로 떼어서 생각하게 됐다. 하나는 이 장기 흐름을 어떻게 짚어낼지에 대한 것이었고, 다른 하나는 지금 리포트가 추천해주는 내용의 품질을 어떻게 검증할지에 대한 것이었다. 이 글은 그중 첫 번째, 장기 흐름 쪽 이야기다. 두 번째는 아직 손대지 않은 별개의 과제로 남겨두었다.
장기 흐름을 짚으려고 기존 구조를 들여다보다가, 생각보다 근본적인 문제를 발견했다. 지금 시스템은 하루·한 주·한 달마다 매번 처음부터 다시 계산하고, 그 결과를 사람이 읽는 자연어 리포트로만 남긴다. 계산에 쓰인 원본 데이터는 남지만, "이 기간에는 이런 게 관찰됐다"는 구조화된 관찰 자체는 어디에도 남지 않는다.
이게 왜 문제냐면, 자연어 리포트는 사람이 읽기엔 좋지만 기계가 "지난주 관찰과 이번 주 관찰을 비교"하기엔 적합하지 않은 형태이기 때문이다. 여러 기간을 겹쳐 보려면, 각 기간이 끝날 때마다 그 기간의 관찰을 압축된 형태로 남겨두는 절차가 먼저 있어야 했다. 그제야 "반복 패턴을 찾는 기능"이 사실은 "과거를 기억하는 기능"을 전제로 한다는 게 분명해졌다.
여기서부터 문제의 성격이 바뀌었다. 이제부터는 "어떤 패턴을 보여줄까"가 아니라 "무엇을, 어떤 형태로 기억해둘까"를 먼저 정해야 하는 문제였다.
이 지점부터가 이번 작업에서 제일 흥미로웠던 부분이다. "기억을 남기자"는 방향은 금방 정했는데, 막상 그 기억을 어떻게 구성할지 파고들수록 예상 못 한 질문들이 계속 나왔다.
본 것과 해석한 것을 같은 사실로 취급하면 안 됐다. "이런 주제가 이만큼 등장했다"는 관찰과, "이게 이번 기간의 핵심이다"라는 해석은 신뢰도가 다른 정보다. 해석은 나중에 다시 계산되거나 틀릴 수 있는데, 관찰과 뒤섞어 저장하면 나중에 뭐가 사실이고 뭐가 그때의 판단이었는지 구분이 안 된다. 그래서 관찰과 해석을 물리적으로 나눠서 남기기로 했다.
"데이터가 없다"와 "그 주제가 사라졌다"는 다른 얘기라는 것도 뒤늦게 깨달았다. 어느 날 수집 자체가 실패해 그날 기록이 텅 비었다면, 이걸 그대로 "이 주제는 사라졌다"로 읽어버리는 순간 실제로는 그냥 관측을 못 한 것뿐인데 흐름이 끊긴 것처럼 오독하게 된다. 그래서 "정상적으로 관찰했는데 없었다"와 "애초에 관찰 자체가 실패했다"를 구분해서 남기기로 했다. 이 구분이 없으면 장기 흐름 분석은 조용히 거짓말을 하게 된다.
같은 주제인데 이름이 계속 바뀌는 문제도 있었다. 사람이 읽을 땐 표현이 조금 달라도 같은 얘기라는 걸 알지만, 기계가 비교하려면 "이건 같은 주제다"라고 판정할 기준이 있어야 한다. 이 판정을 매번 모델에게 맡기면 실행할 때마다 다른 이름을 붙일 위험이 있고, 그러면 애초에 비교가 성립하지 않는다. 그래서 이름을 정하는 규칙은 고정된 규칙과 사람이 관리하는 짧은 사전으로만 처리하고, 모델은 여기에 관여시키지 않기로 했다. 이름의 안정성이 비교가 가능하기 위한 최소 전제라는 걸 이번에 명확히 알았다.
모델에게 "지난주"·"이번 달" 같은 표현을 스스로 판단하게 두면 안 된다는 것도 정리했다. 상대적인 시간 표현은 모델마다, 실행 시점마다 다르게 해석될 여지가 있다. 그래서 기준이 되는 날짜와 기간은 코드가 결정적으로 계산해서 명시적으로 건네주고, 모델이 "언제"를 추론하는 역할은 아예 맡기지 않기로 했다.
과거를 전부 똑같은 해상도로 남길 수는 없다는 것도 보였다. 기억이 쌓일수록, 가까운 시점은 자세히 남기고 먼 과거로 갈수록 압축된 형태로만 남겨두는 게 자연스럽다. 그래서 저장 자체는 기준을 넘는 관찰을 넉넉하게 남겨두되, 실제로 다음 판단에 참고할 때는 그중 압축된 일부만 골라 쓰는 방식으로 방향을 잡았다. 저장 범위와 실제로 꺼내 쓰는 범위를 다르게 두는 것도 이번에 처음 명시적으로 정한 원칙이다.
이 과정에서 막힌 지점도 있었다. 이름이 같은 지표라도 하루·한 주·한 달 계산 로직마다 실제로 세고 있는 게 미묘하게 달라서, "이 숫자가 정말 같은 걸 가리키는가"부터 다시 정의해야 했다. 그리고 처음에는 "이 주제가 요즘 떠오르는 중인지, 지고 있는 중인지"까지 이번에 같이 저장해두고 싶었는데, 그 판단은 역사가 어느 정도 쌓여야 신뢰할 수 있다는 걸 깨닫고 이번 범위에서는 들어냈다. 또 이름을 정하는 사전을 나중에 손보면 과거 기록의 이름표까지 다시 써야 하는지도 고민했는데, 과거 기록은 그대로 두고 원래 표현을 함께 남겨둬서 나중에 다시 해석할 수 있게 하는 쪽으로 정리했다. 그리고 원래는 하루 단위 작업이 제일 가벼울 거라 예상했는데, 정작 하루 단위로 다시 모아두는 계산 자체가 여태 없었다는 걸 알고 나서, 가장 작아 보였던 조각이 사실 가장 손이 많이 가는 조각이라는 것도 다시 확인했다.
여기까지 오고 나서야 이 작업의 정체가 분명해졌다. 나는 "반복되는 흐름을 찾아주는 기능"을 만들려고 했는데, 그 문제를 제대로 풀려면 먼저 "AI가 시간을 건너 무엇을, 어떻게 기억할 것인가"를 설계해야 했다. 관찰과 해석의 분리, 데이터 없음과 소멸의 구분, 이름의 안정성, 명시적 기준 날짜, 계층적 기억의 해상도 — 이건 전부 "뉴스 요약을 어떻게 잘 쓸까"의 문제가 아니라 "시간이 지나도 믿을 수 있는 기억을 어떻게 남길까"의 문제였다.
오늘 실제로 만든 건 코드가 아니라 이 결정들을 정리한 설계 문서 한 장이다. 이 문서는 "기억을 어떻게 남길지"에 대한 계약만 정하고, 실제로 그 기억을 어떻게 비교하고 활용할지는 다루지 않는다. 실제 구현은 아직 시작도 하지 않았다 — 다음 단계는 이 계약을 바탕으로 하루 단위 기억부터 만들고, 그다음 한 주, 그다음 한 달 순서로 하나씩 풀어가는 것이다. 하루 단위를 가장 먼저 두는 이유는 주기가 가장 짧아서 공통 기반(저장 방식, 이름 규칙, 날짜 처리, 실패 시 처리 방식 등)을 가장 빨리 검증할 수 있기 때문이다.
의도적으로 미룬 것도 있다. "이번 주가 지난주보다 뜨거워지고 있다" 같은, 기억끼리 비교해서 추세를 판단하는 부분은 이번 설계에 넣지 않았다. 비교는 비교할 역사가 충분히 쌓인 뒤에야 의미가 있다. 지금 쌓지도 않은 기억을 놓고 비교 로직부터 만드는 건 데이터보다 앞서 짓는 일이라고 판단했다. 그래서 이번 단계는 "기억을 남기는 부분"까지만 확정하고, "그 기억으로 과거와 현재를 비교하는 부분"은 기억이 실제로 쌓인 뒤의 다음 장으로 미뤘다. 먼저 쌓아야 비교할 수 있다. 이번 설계에서 제일 중요하게 붙잡은 원칙이다.
같은 계기로 나온 리포트 추천 품질 검증 쪽 과제는 이번 설계와는 별개의 트랙으로 남아 있다. 오늘은 건드리지 않았다.
원래 하고 싶었던 건 "반복되는 흐름을 찾고 싶다"는, 꽤 실용적이고 작은 욕구였다. 그런데 그 문제를 끝까지 따라가 보니, 결국 마주친 건 AI가 시간을 건너 무엇을 어떻게 기억할 것인가라는, 훨씬 근본적인 질문이었다. 작은 도구를 계속 붙잡고 있으면 이런 순간이 온다는 걸 이번에 다시 느꼈다.
아직 구현은 시작하지 않았다. 오늘은 방향을 찾았을 뿐이고, 구현은 이제부터다. 그래도 이 방향을 글로 남겨두는 게 맞다고 생각했다. 나중에 실제로 하루·한 주·한 달 기억이 쌓이고, 그 위에서 진짜 비교가 시작될 때, 오늘 이 결정들이 왜 이렇게 내려졌는지를 다시 꺼내 볼 수 있게.