
【초보 탈출】 Python과 Gemini API로 대화가 사라지지 않는 '나만의 전용 채팅 AI'를 초고속으로 만들기!
요약
Streamlit과 Gemini API를 활용하여 대화 기록이 유지되는 전용 채팅 AI 앱을 제작하는 튜토리얼입니다. 새로고침 시 데이터가 사라지는 문제를 JSON 파일 저장 방식을 통해 해결하고, 기록 삭제 기능까지 구현하는 과정을 다룹니다.
핵심 포인트
- Streamlit의 재실행 구조 이해 및 데이터 영속화 방법 습득
- JSON 파일을 활용한 로컬 대화 기록 저장 로직 구현
- Windows 환경의 문자 인코딩 에러 및 API 에러 핸들링 해결
- 사이드바를 활용한 사용자 인터페이스(UI) 기능 추가
서론
지난번에는 Python 라이브러리 streamlit을 사용하여, Gemini API를 브라우저 상에서 구동하는 채팅 앱을 제작했습니다. 하지만 실제로 사용해 보니 "페이지를 새로고침하면 대화 기록이 사라져 버린다"는 과제에 직면했습니다.
이번에는 엔지니어 초보자인 제가, "채팅 기록의 영속화 (Persistence)"와 "기록 삭제 기능"을 구현하여, 더욱 실용적인 도구로 진화시킨 기록을 정리했습니다.
이번에 완성된 UI
먼저, 완성된 화면은 다음과 같습니다. 왼쪽 사이드바에 기록 삭제 버튼을 배치하였고, 메인 화면에서는 과거의 대화가 새로고침 후에도 유지되도록 구성되었습니다.

※새로고침해도 기록이 남는 「나만의 전용 AI」가 완성!
1. 대화 기록의 영속화 (저장 메커니즘)
왜 새로고침하면 기록이 사라질까요? 그것은 Streamlit이 "새로고침할 때마다 프로그램을 처음부터 다시 실행하는" 구조이기 때문입니다. 그래서 대화 데이터를 JSON 파일로서 로컬에 저장하는 로직을 추가했습니다.

※프로그램의 뒷단에서는 이와 같이 JSON 형식으로 대화 데이터가 관리되고 있습니다.
2. 원클릭으로 기록 리셋
오랫동안 사용하다 보면 기록이 쌓이기 때문에, 사이드바에 삭제 버튼을 설치했습니다.

※오조작 방지를 위해 사이드바에 기능을 모았습니다.
gemini.py
구현 코드 (이번 전체 코드입니다. 에러 핸들링 (Error Handling) 및 문자 인코딩 대책도 포함되어 있습니다.)
import streamlit as st
import json
import os
...
개발의 벽: 배운 점
이번에 다음과 같은 벽에 부딪혔으나, 이론적인 배경을 학습함으로써 극복할 수 있었습니다.
- 왜 기록이 사라지는가?: Streamlit은 새로고침할 때마다 코드가 재실행되기 때문. → "로컬 파일로의 저장"으로 해결.
- 왜 문자 인코딩 에러가 발생하는가?: Windows 환경에서의 파일 읽기/쓰기 문자 인코딩 불일치. →
ensure_ascii=True와utf-8지정으로 해결. - 에러 발생 시 프리징 (Freeze): API 호출 실패 시 변수가 미정의 상태가 되는 문제. →
try-except문을 통한 안전한 처리로 해결.
마치며
검은 화면 (터미널)에서의 API 조작부터 시작하여, 브라우저에서의 채팅 앱화, 그리고 이번 영속화 기능 구현까지 경험하며, 제 안의 "AI 개발 해상도"가 확 올라간 기분이 듭니다.
다음에는 PDF 요약 기능이나 UI 테마 설정 등, 더욱 제 취향에 맞게 커스터마이징해 나갈 예정입니다. 웹 앱 개발의 즐거움에 푹 빠져 있습니다!
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기