Vividiary를 처음 만들기 시작했을 때, 우리는 매우 단순하고 다소 순진한 가설을 세웠습니다. 빈 페이지를 쳐다보는 것보다 AI와 하루에 대해 이야기하는 것이 더 쉽다는 것이었죠.
그 부분은 우리가 옳았습니다. 초기 베타 테스트 결과, 사용자들은 대화형 인터페이스를 매우 좋아했습니다. 하지만 14일째 되는 날, 놀라운 일이 벌어졌습니다. 유지율 곡선이 급격히 떨어졌습니다. 베타 테스터의 72%가 2주 차에 이탈했습니다.
저는 이탈한 사용자 12명에게 연락해 가상 커피를 마시며 이야기를 나누었습니다. 피드백은 만장일치로 혹독했습니다. "심각한 단기 기억 상실증에 걸린 사람과 대화하는 기분이에요. 상사가 누구인지, 왜 다가오는 이사에 스트레스를 받는지, 내 기본적인 불안감이 어떤 느낌인지 매일 다시 설명해야 하거든요."
그들의 말이 전적으로 옳았습니다. 우리는 기억상실증 환자를 만든 셈이었습니다.
사용자를 몇 달, 몇 년 동안 실제로 유지할 수 있는 AI 일기 앱을 만드는 방법을 찾고 있다면, 기억 문제를 해결해야 합니다. 사용자는 AI 일기 동반자가 자신의 감정적 역사를 기억하고, 패턴을 인식하며, 함께 성장하기를 기대합니다.
하지만 일기를 위한 LLM 메모리 아키텍처를 구축하는 것은 단순히 채팅 로그를 저장하는 것만큼 간단하지 않습니다. 성능, 비용, 엄격한 데이터 개인정보 보호라는 복잡한 삼중고를 해결해야 합니다. 여기 Vividiary의 기억을 어떻게 구축했는지, 어떤 접근 방식을 폐기했는지, 그리고 우리가 여전히 고민 중인 엔지니어링 절충안에 대한 솔직한 견해를 공유합니다.
기억상실증 AI 일기의 문제점
전통적인 LLM은 설계상 상태가 없습니다(stateless). 새로운 세션을 열 때마다 모델은 새로 태어나며, 어제 나눈 대화에 대해 전혀 알지 못합니다.
코딩 보조 도구라면 괜찮습니다. 하지만 웰니스 및 일기 앱에서는 치명적인 결함입니다. 일기는 본질적으로 누적되는 것입니다. 가치는 단 하루를 기록하는 것에서 오는 것이 아니라, 몇 주와 몇 달에 걸쳐 점들을 연결하는 것에서 나옵니다.
AI 기억을 다루기 전에 데이터 입력 방식부터 수정해야 했습니다. 사용자를 곧바로 자유 형식의 채팅으로 유도하는 것이 마찰을 일으킨다는 것을 깨달았습니다. 그래서 우리는 3초 분량의 5급 기분 체크인(최고에서 최악까지)과 선택적인 감정 및 활동 태그로 시작하는 핵심 루프를 설계했습니다.
이 구조화된 낮은 진입 장벽은 대화가 시작되기 전부터 AI에게 사용자의 현재 상태에 대한 즉각적이고 확실한 데이터를 제공합니다. 하지만 일단 대화가 시작되면, AI는 오늘 느낀 "최악"의 기분이 3주 전 화요일의 "나쁨"과 어떻게 연결되는지 어떻게 알 수 있을까요?
우리가 거부한 것: 순진한 컨텍스트 윈도우 접근 방식
장기 기억이 필요하다는 것을 깨달았을 때, 우리 엔지니어링 팀은 가장 쉬운 해결책을 계획했습니다. 우리는 그것을 "컨텍스트 윈도우 채우기(Context Window Stuffer)"라고 불렀습니다.
거부된 접근 방식 1: 프롬프트 채우기 아이디어는 간단했습니다. 사용자가 새 채팅을 시작할 때마다 지난 30개의 일기 항목을 가져와 시스템 프롬프트에 보이지 않게 붙여넣고 이렇게 말하는 것입니다. *"여기 사용자의 기록이 있습니다. 이제 대화하세요."
- 지연 시간: 과거 일기 항목 15,000 토큰을 프롬프트에 주입하는 테스트를 실행했습니다. 첫 토큰 생성 시간(TTFT)이 8.4초까지 치솟았습니다. 모바일 앱 UX에서 8.4초는 영겁의 시간입니다. 테스트 사용자의 65%가 AI가 응답하기도 전에 생성을 중단했습니다.
- 비용: 모든 상호작용마다 방대한 양의 중복 텍스트를 LLM에 보내는 것은 스타트업에게 재정적 자살 행위입니다. 우리는 클라우드 기반 AI 비용 균형 맞추기가 토큰 사용량이 사용자 근속 기간에 따라 선형적으로 증가한다면 불가능하다는 것을 빠르게 깨달았습니다.
- "중간에 묻히는" 현상: LLM은 방대한 프롬프트 중간에 묻힌 정보를 기억하는 데 매우 취약합니다. AI는 첫 번째 항목과 마지막 항목은 기억하지만, 2주 전의 감정적 맥락은 완전히 무시하곤 했습니다.
거부된 접근 방식 2: 롤링 요약 체인 다음으로 우리는 롤링 요약을 시도했습니다. 매일 끝날 때마다 AI가 새로운 항목을 읽고, 이전 요약을 읽고, 사용자의 삶에 대한 새로운 마스터 요약을 작성하는 방식입니다.
우리가 이 방식을 폐기한 이유:
뉘앙스가 파괴되었습니다. 요약은 "이선은 업무 때문에 스트레스를 받고 있다"라고 말할 것입니다. 하지만 특정 공급업체와의 10시 정기 동기화 때문에 스트레스를 받는다는 식의 구체적이고 세밀한 정보는 사라졌습니다. 나중에 AI가 내 스트레스에 대해 언급하려 할 때, 그것은 일반적이고 기계적으로 들렸습니다. 구체적인 회상에서 오는 공감이 부족했습니다.
개인정보 보호 중심의 클라우드 아키텍처 설계
우리는 토큰 수를 늘리거나 매우 민감한 개인 데이터의 보안을 타협하지 않으면서, 정확히 필요할 때 관련성 있는 과거 기억만 선택적으로 검색할 수 있는 시스템이 필요하다는 것을 깨달았습니다.
또한, 개인정보 보호에 있어서는 타협할 수 없었습니다. Vividiary는 개인정보 보호를 최우선으로 하는 플랫폼입니다. 원활한 기기 간 동기화와 고급 AI 처리를 위해 클라우드에 데이터를 저장하지만, 우리는 이 데이터를 최고 수준의 암호화로 다룹니다. 모든 데이터는 전송 중 및 저장 시 암호화됩니다.
우리가 대신 선택한 것은 감정적 맥락에 최적화된 벡터 기반 검색 증강 생성(RAG) 아키텍처입니다.
단계 1: 기억 형성 최적화 우리는 초기에 중요한 제품 결정을 내렸습니다. 우리는 방대하고 구조화되지 않은 채팅 로그를 저장하지 않습니다.
Vividiary AI와 대화할 때, 그 대화는 도구일 뿐입니다. 대화는 구조화 에이전트 역할을 합니다. 대화가 끝나면 AI는 대화를 종합하여 1인칭 일기 초안을 생성합니다. "오늘 나는 ~ 때문에 압도당하는 기분이었다..."
사용자는 이 초안을 검토, 수정 및 승인합니다. 이는 사용자가 자신의 이야기의 저자로 남도록 보장합니다. 더 중요한 것은 우리 아키텍처 입장에서, 우리가 저장하는 "기억"은 40줄의 지저분한 챗봇 대화가 아니라 깔끔하고 구조화된, 사용자가 승인한 서사라는 점입니다.
단계 2: 벡터 임베딩 사용자가 항목을 승인하면, 우리는 해당 텍스트를 임베딩 모델에 통과시킵니다. 임베딩 모델을 텍스트를 읽고 방대한 다차원 지도상의 좌표를 할당하는 기계라고 생각하세요.
"업무 스트레스"에 관한 항목은 지도의 한 영역에 모입니다. "가족의 기쁨"에 관한 항목은 다른 영역에 모입니다. 우리는 이러한 수학적 좌표(벡터)를 클라우드 데이터베이스(Supabase)에 안전하게 저장합니다.
단계 3: 맥락적 검색 이제 사용자가 화요일에 "최악"의 기분을 기록하고 "불안" 태그를 달았다고 가정해 봅시다.
AI가 인사를 건네기도 전에, 우리 시스템은 현재 상태를 벡터로 변환하고 사용자의 암호화된 클라우드 데이터베이스에서 수학적으로 가장 가까운 과거 항목을 검색합니다. 시스템은 사용자가 비슷한 불안을 느꼈던 지난 두 달간의 항목 3개를 찾아냅니다.
우리는 그 3개의 관련성 높은 항목만 AI의 프롬프트에 주입합니다.
결과는 어떨까요? AI는 즉시 응답하고(낮은 지연 시간), 비용은 몇 센트의 일부만 발생하며(낮은 토큰 사용량), 이렇게 말합니다. "오늘 불안함을 느끼시는군요. 지난달 분기별 평가 직전에 비슷한 기분을 느끼셨던 것을 기억합니다. 오늘 불안함은 업무와 관련이 있나요, 아니면 다른 이유인가요?"
그것이 마법의 순간입니다. AI가 챗봇에서 동반자로 변하는 순간이죠.
벡터 검색이 장기적인 감정 패턴을 표면화하는 방법
이 아키텍처는 일일 채팅을 개선할 뿐만 아니라 앱의 전체 분석 백엔드를 구동합니다.
우리는 이미 사용자의 감정 상태를 수학적으로 매핑하고 있기 때문에 이를 시각화할 수 있습니다. 여기서 우리의 프리미엄 모델이 등장합니다. 모든 사용자는 매일 무제한 기분 기록과 3회의 AI 대화를 무료로 이용할 수 있습니다. 하지만 더 깊이 파고들고 싶은 사용자를 위해 프리미엄 티어($2.99/월 또는 $11.99/년)는 고급 시각적 통찰력을 제공합니다.
벡터 데이터를 사용하여 사용자가 어떤 활동과 주제가 자신의 최고 및 최악의 날과 상관관계가 있는지 정확히 보여주는 버블 차트와 히트맵을 생성합니다. 이러한 AI 감정 패턴 인식은 번아웃이나 만성 스트레스를 겪는 사용자에게 판도를 바꾸는 기능입니다. 무엇이 자신을 지치게 하는지 추측할 필요 없이 데이터가 보여주기 때문입니다.
우리는 또한 이 기억을 게임화 루프에 직접 연결합니다. Vividiary는 30일 동안 진화하는 "클레이(Clay)" 캐릭터를 특징으로 합니다. 기분을 기록하고 AI가 패턴을 학습함에 따라 클레이 캐릭터는 시각적으로 진화하며, 정신 건강 여정을 가시적이고 게임화된 형태로 보여줍니다. 클레이의 시각적 상태는 벡터 데이터베이스에서 추출된 감정 분석에 의해 직접적인 영향을 받습니다.
우리가 여전히 고민 중인 엔지니어링 절충안
솔직하게 말하겠다고 약속했으니, 이 시스템이 완벽하다고 가장하지는 않겠습니다. 현대적인 웰니스 앱 기술 스택 2026을 구축하는 것은 끊임없는 타협을 포함합니다. 현재 우리의 스택인 프론트엔드용 React Native와 Expo, PostgreSQL/벡터 데이터베이스용 Supabase, 보안 ID 관리를 위한 Firebase Auth, 구독 관리를 위한 RevenueCat은 매우 강력하지만, 그만큼 도전 과제도 따릅니다.
절충안 1: 의미론적 검색 vs. 시간적 현실 벡터 검색은 주제적으로 유사한 항목을 찾는 데는 뛰어나지만, 시간 감각은 없습니다.
초기 테스트에서 사용자가 "강아지 때문에 슬퍼"라고 말하면, AI는 어제 강아지가 동물병원에 다녀온 항목 대신 4년 전 이전 강아지가 세상을 떠났을 때의 항목을 검색할 수도 있었습니다.
이를 해결하기 위해 우리는 하이브리드 검색 시스템을 구축해야 했습니다. 이제 우리는 최근 항목에 더 높은 가중치를 두는 감쇠 알고리즘을 사용하면서도, 관련성이 매우 높은 오래된 항목이 나타날 수 있도록 합니다. 이러한 가중치를 조정하는 것은 우리 엔지니어링 팀의 지속적인 주간 과제입니다.
절충안 2: 공감 vs. 임상적 관찰의 경계 AI가 완벽한 기억력을 가지면 때때로 소름 끼치거나 지나치게 임상적으로 보일 수 있습니다. 벡터 검색의 첫 번째 반복에서 AI는 자신이 기억한다는 것을 증명하기 위해 과거의 트라우마를 자랑스럽게 나열하곤 했습니다. 그것은 충격적이었습니다.
우리는 감정 AI UX 디자인에 집중하기 위해 시스템 프롬프트를 완전히 수정해야 했습니다. 우리는 모델이 과거 기억을 암송할 사실이 아니라 어조를 위한 맥락으로 사용하도록 훈련했습니다. 우리는 좋은 감정 중심 제품 디자인이란 AI가 서류를 읽는 탐정이 아니라 당신의 역사를 기억하는 지지적인 친구처럼 느껴져야 한다는 것을 깨달았습니다.
다음 단계
우리는 현재 벡터 임베딩과 함께 "엔티티 추출(Entity Extraction)"을 실험하고 있습니다. 이는 시스템이 당신의 삶에서 중요한 사람, 장소, 반려동물 목록을 구체적으로 학습하고 안전하게 저장하여 파트너나 가장 친한 친구의 이름을 절대 잊지 않도록 보장한다는 의미입니다.
기억을 가진 AI를 만드는 것은 어렵습니다. 개인정보를 존중하고, 빛의 속도로 작동하며, 사람들이 자신의 마음을 이해하도록 진정으로 돕는 AI를 만드는 것은 훨씬 더 어렵습니다. 하지만 AI가 매우 개인적인 것을 기억하고 그것을 사용하여 위로를 제공하는 첫 번째 "콜백" 순간을 경험한 사용자의 유지율 지표를 보면, 이러한 아키텍처의 골칫거리가 충분히 가치 있다는 것을 알 수 있습니다.



