이 글은 Obsidian에 LLM Wiki 만들기 시리즈의 2편이다.
기본 뼈대를 잡고 나서 AI가 날짜를 착각하는 걸 발견했다. LLM은 실시간으로 흐르는 시계가 없다. 프롬프트로 알려주지 않으면 학습 시점 즈음의 과거 날짜를 오늘인 것처럼 자신 있게 말한다 — 흔한 현상이라 대수롭지 않게 넘어갈 뻔했다.
내가 던진 질문 하나
그런데 해결책(전송할 때 시스템 날짜를 프롬프트에 같이 넣어주기)을 듣고 나니 궁금한 게 생겼다.
UI 레이아웃은 나중 문제야. 그건 기능상의 문제가 아니니까… 지금은 기능상의 문제를 해결해야 하거든. 그러면 prompt 상에서 내가 오늘 날짜를 알려 주면 현재 연결이 끊어 지기전이나 내가 따로 얘기하기전에는 그걸 오늘 날짜로 인식하겠네. 그렇다면 만약에 오늘 저녁 11시 50분에 연결이 되었고 자정을 넘어서 새벽까지 쓰고 있으면 그걸 인지 날짜를 물어 보면 다음날로 인지할까?
이 질문에 대한 반응이 “정확하게 짚으셨습니다. 핵심을 꿰뚫는 아주 날카로운 질문입니다”였다. 실제로 정확히 맞았다.
왜 자정이 지나도 안 바뀌나
원인은 단순했다. 이 플러그인은 대화가 이어질 때마다 chatHistory라는 배열에 지금까지
주고받은 내용을 통째로 누적해서 매번 구글 서버로 보낸다.
[
{ role: "user", parts: [{ text: "오늘 2026년 6월 13일이야" }] },
{ role: "model", parts: [{ text: "확인했습니다." }] },
... (자정이 지남) ...
{ role: "user", parts: [{ text: "지금 오늘이 몇 일이지?" }] }
]
Gemini 입장에서는 바깥세상과 연결된 시계가 전혀 없고 오직 이 대화 기록 텍스트만 보고 판단한다. 자정이 지나 새벽 1시가 됐어도, 기록 맨 위에는 여전히 “오늘 2026년 6월 13일이야”라는 문장이 그대로 박혀 있으니 AI는 계속 13일을 오늘이라고 우길 수밖에 없다. 시간의 흐름을 감지할 방법 자체가 없는 구조였다.
해결: 매 전송마다 “지금 이 순간”을 몰래 끼워넣기
사용자가 매번 직접 날짜를 알려주는 건 번거롭고 애초에 자정을 넘기는 경우를 해결해주지도 못한다. 그래서 “전송 버튼을 누르는 바로 그 순간의 시스템 날짜·시간을 자동으로 프롬프트 뒤에 붙여서 보내는” 방식으로 바꿨다.
// 예시: API 호출 전에 현재 날짜를 시스템 지침으로 추가하는 방법
const today = new Date();
const dateString = `${today.getFullYear()}년 ${today.getMonth() + 1}월 ${today.getDate()}일`;
// chatHistory 맨 앞에 "현재 날짜는 OOOO년 OO월 OO일입니다"라는 컨텍스트를 주입
이렇게 하면 밤 11시 50분에 보낼 때는 (현재시각: 6월 13일 23:50)이 붙고 자정을 넘긴
새벽 1시 20분에 보낼 때는 (현재시각: 6월 14일 01:20)이 붙는다. AI는 대화 기록에
박제된 옛날 문장이 아니라 매번 새로 주입되는 이 정보를 보고 판단하게 되니, 자정이
지나가는 순간도 정확히 인지한다.
남는 교훈
LLM이 시계가 없다는 건 알고 있었지만 “그럼 자정을 넘기면 어떻게 되지?”라는 구체적인 엣지케이스를 직접 의심해보기 전까지는 그냥 넘어갈 뻔한 문제였다. 일반론을 아는 것과, 그 일반론이 내 코드의 어느 지점에서 실제로 터지는지 짚어내는 건 다른 문제라는 걸 새삼 느꼈다.
다음 편은 여기서 한 걸음 더 나간 설계 이야기다 — 매번 노트 전체를 AI에게 같이 보내는 게 아까워서 만든 “일회성 뱃지” UX, 그리고 그 과정에서 내가 AI의 첫 제안을 그냥 받아들이지 않고 반박했던 이야기.