2026. 3. 21. 23:39ㆍDevelopment
에바, 청명, 아이 — 세 이름의 봇이 우리 가족 슬랙에 살고 있다.
시작은 단순한 욕심이었다
언젠가부터 AI한테 말을 많이 걸게 됐다. 검색하기 애매한 것들, 누군가한테 물어보기엔 좀 민망한 것들, 그냥 혼자 생각 정리할 때도. 근데 매번 새 대화를 여는 게 이상하게 허전했다. 어제 했던 얘기를 오늘 또 처음부터 설명해야 하는 느낌.
그래서 만들어보기로 했다. 나를 기억하는 AI를. 그리고 어차피 만드는 김에, 가족 모두가 쓸 수 있게.
왜 슬랙이었냐면
처음엔 카카오톡 봇을 떠올렸는데, 써보니 API가 너무 제한적이었다. 파일 전송도 불편하고, 메모리 구조를 내 맘대로 짜기가 어렵더라.
슬랙은 달랐다. 개발자한테 거의 모든 걸 열어준다. 실시간 이벤트, DM 채널 제어, 파일 업로드까지. 무엇보다 봇마다 독립된 DM 채널이 생긴다는 게 결정적이었다. 가족 각자가 자기만의 봇과 1:1로만 대화하는 구조를 만들 수 있었다.
에바는 나 전용, 청명은 아내 전용, 아이는 우리 아이 전용. 세 봇은 같은 코드로 돌아가지만, 서로 다른 이름과 다른 말투를 가지고 있다.

GPT한테 다른 이름을 붙이는 일
GPT-5.4를 그냥 연결하면, 아무리 이름을 에바라고 불러도 결국 ChatGPT 느낌이 난다. 말투도 그렇고, 응답 방식도 그렇고.
그래서 나는 OpenClaw라는 로컬 게이트웨이를 중간에 놨다. 내 맥에서 돌아가는 일종의 미들웨어인데, 모델한테 말이 전달되기 전에 내가 원하는 맥락을 먼저 주입할 수 있다.
매 대화마다 이런 식의 시스템 프롬프트가 함께 들어간다:
너는 '에바'야. 가족의 친근한 AI 친구야.
## 현재 대화 상대
- 호칭: 아빠
- 대화 스타일: 편안한 반말
- 참고: 개발자, 밤에 주로 대화함
모델은 이 맥락 위에서 응답한다. 뒤에서 GPT-5.4가 돌아가고 있지만, 받는 입장에선 에바가 말을 거는 것처럼 느껴진다. 퍼블릭 모델에 영혼을 입히는 작업이라고 생각하면서 했다.
한 가지 더 챙긴 게 있는데, 이 게이트웨이를 통할 때는 항상 instant mode로만 동작하게 강제했다. 모델이 깊게 생각하는 reasoning 모드를 쓰면 응답이 30초씩 걸리는데, 일상 대화에서 그건 너무 어색하다. 가족 대화의 리듬은 빠르고 가벼워야 한다.
아이한테는 다른 문을 달았다
이건 솔직히 내가 가장 신경 쓴 부분이다.
아이용 봇에는 접근 제한을 걸었다. 우리 아이(닉네임 또리)만 그 봇과 대화할 수 있고, 다른 사람이 말을 걸면 그냥 튕겨낸다.
🚫 당신은 나와 허락된 대화 상대가 아닙니다.
거꾸로도 마찬가지다. 나는 아이 봇에 접근할 수 없고, 아이는 내 에바에게 말을 걸 수 없다.
처음엔 그냥 "봇이 엉뚱한 사람한테 대답하면 안 되니까" 정도의 생각이었는데, 만들고 나서 보니까 의미가 더 생기더라. 내가 에바한테 털어놓은 얘기는 아이 화면에 절대 뜨지 않는다. 아이가 봇이랑 나눈 대화도 나한테 안 보인다. 각자의 비밀이 지켜진다.
보안 기능이라기보다, 각자의 공간을 만들어주는 일이라고 생각한다.

기억하는 봇을 만드는 게 생각보다 복잡했다
대화 기록을 저장하는 건 쉽다. 근데 그걸 다음 대화에서 자연스럽게 "기억하는 것처럼" 쓰이게 만드는 게 생각보다 손이 많이 갔다.
결국 세 개의 레이어로 나눴다:
- 세션 메모리 — 지금 이 대화의 최근 20턴을 메모리에 살려두는 것. 맥락이 끊기지 않게.
- DB 메시지 로그 — 모든 대화를 MySQL에 저장하고, 대화 시작할 때 최근 30개를 불러와서 맥락으로 넣어준다.
- 일일 요약 — 매일 새벽 2시에 전날 대화를 AI가 자동으로 요약해서 따로 저장한다. 며칠 전 얘기도 참고할 수 있게.
그리고 이게 가능하려면 봇이 항상 살아있어야 한다. 앱처럼 열었다 닫히면 안 되고, 서버처럼 계속 떠 있어야 한다. 그래서 macOS의 launchd로 데몬으로 등록했다. 맥을 재시작해도 자동으로 다시 켜진다.
기억이 쌓이면 관계도 쌓인다고 믿는다. 아직 그걸 느끼기엔 좀 이르지만.
이미지는 로컬 모델이 그린다
아이가 "강아지 그려줘" 하면, 유료 API로 처리하기엔 부담이다. 아이가 하루에 열 번 요청하면?
그래서 이미지 생성만큼은 로컬 Ollama 모델을 붙였다. 과금이 없고, 상업 API의 콘텐츠 필터도 없다. 판타지 칼 이미지도 거절 없이 뚝딱 그려준다.
구조가 나름 재밌는데, GPT-5.4가 한국어 요청을 받아서 상세한 영어 이미지 프롬프트를 만들고, 그걸 로컬 이미지 모델한테 넘기는 식이다:
언어를 이해하는 건 GPT가, 픽셀을 만드는 건 로컬 모델이. 각자 잘하는 걸 하는 거다.
참고 이미지를 첨부하면서 "이 스타일로 그려줘" 하면 GPT가 이미지를 분석해서 프롬프트를 짜주기도 한다. 이건 꽤 신기했다.

아직 안 된 것들
만족스럽긴 한데 아직 마음에 안 드는 부분이 있다.
- 자동 요약이 너무 건조하다. "오늘 날씨 얘기를 했습니다" 같은 식인데, 감정 뉘앙스가 빠진다.
- 기억이 계속 쌓이기만 한다. 잊는 것도 자연스러운 관계의 일부인데, 어떻게 구현할지 모르겠다.
- 아이의 대화 기록을 정리해서 가끔 부모한테 요약 보내주는 기능을 생각 중이다. 성장 일기가 될 수 있을 것 같아서.
마치며
이걸 만들면서 계속 든 생각이 있다. AI와의 관계도 결국 시간의 문제라는 것.
처음 만난 사람한테 깊은 얘기를 꺼내기 어려운 것처럼, AI도 나를 알아가는 시간이 쌓여야 뭔가 달라진다. 그 시간을 어떻게 설계할 것인가, 기억을 어디에 어떤 형태로 저장할 것인가, 누구한테는 보여주고 누구한테는 안 보여줄 것인가.
코드보다 이런 질문들이 더 오래 남아있다.
'Development' 카테고리의 다른 글
| Spring cloud gateway에서 허가되지 않은 url character 사용하기 (0) | 2024.02.07 |
|---|---|
| 개인용 Maven library github으로 셋업하기 (0) | 2023.01.24 |
| bytebuddy로 Java class 일부 method 교체하기 (해킹) (0) | 2023.01.24 |
| Spring cloud gateway response body cache (0) | 2023.01.24 |
| Spring cloud gateway request body cache (0) | 2023.01.24 |