말 그대로입니다. 에이전트를 잘 쓰지 못하는 와이프에게 제 텔레그램 방에 텔레봇2와 와이프를 초대하고 저는 쓱 방에서 나가줬습니다. 그냥말로 분양이죠, 이 아이의 이름은 '판다리' 입니다...(작명 센스하고는...)
공인중개사 시험은 외워야 할 양이 많습니다. 특히 2차 과목은 공법, 공시법, 세법, 중개사법처럼 과목이 나뉘고, 한 번 틀린 문제를 다시 틀리는지까지 봐야 실력이 보입니다.
그래서 이번에는 아내 전용으로 공인중개사 2차 문제출제 AI봇을 하나 만들었습니다. 그냥 “문제 내주는 챗봇”이 아니라, 가족 텔레그램방에 정해진 시간마다 기출문제를 보내고, 1-5번 버튼을 누르면 바로 채점하고, 나중에는 오답 복습까지 이어갈 수 있는 작은 학습 시스템입니다.
핵심은 기능보다 운영 분리였습니다. 제가 쓰는 기존 텔레봇과 아내의 공부용 봇이 서로 영향을 주면 안 됐기 때문입니다.
시작은 단순했습니다
처음 목표는 이랬습니다.
로컬에 있는 공인중개사 2차 기출문제 자료를 문제은행으로 만든다.
월-목은 과목별 새 문제를 낸다.
금-토는 그 주에 틀린 문제를 다시 낸다.
답을 누르면 바로 정답, 오답, 해설을 보여준다.
테스트 기간에 누른 답은 실제 오답노트에 넣지 않는다.
다음 주부터 실제 오답 추적을 시작한다.
겉으로 보면 간단하지만, 실제로는 몇 가지 함정이 있었습니다. 문제 데이터가 깔끔한 API가 아니라 PDF, HTML, OCR 텍스트처럼 섞여 있었고, 텔레그램 버튼을 누르는 순간 실제 학습 기록이 바뀌기 때문에 테스트와 운영을 분리해야 했습니다. 기존 봇 하나로 다 처리하면 제 운영 알림, 코딩 세션, 가족방 공부 데이터가 섞일 수도 있었습니다.
그래서 “문제 생성”보다 먼저 “봇을 분리해서 안전하게 운영하는 구조”를 잡았습니다.
만든 방식
문제출제 로직은 하나의 실행 스크립트로 모았습니다. 이 스크립트가 하는 일은 크게 네 가지입니다.
로컬 기출문제 폴더에서 문제를 읽어 SQLite 문제은행을 만든다.
과목별 요일 규칙에 맞 춰 오늘 낼 문제를 고른다.
텔레그램 가족방에 1-5번 버튼이 붙은 문제를 보낸다.
버튼 클릭 결과를 받아 정답 여부와 복습 상태를 기록한다.
문제는 단순히 “정답은 3번입니다”로 끝내지 않았습니다. 기출문제와 참고 자료에서 관련 문단을 뽑아 해설 후보를 만들고, Telegram에서 읽기 좋게 다시 정리했습니다. 처음에는 해설이 너무 시험 해설집처럼 딱딱하고 길었는데, 실제 화면에서 보니 공부할 때 바로 읽기엔 부담스러웠습니다.
해설 형식 개선
문제와 선택지를 분리해서 보여주기
선택지 사이에 빈 줄 넣기
정답/오답 결과를 먼저 짧게 보여주기
해설은 “쉽게 말하면...” 톤으로 줄이기
마지막에 암기포인트처럼 짧게 남기기
AI가 만든 글이라도 최종 표면은 사람이 실제로 공부하는 화면이어야 했습니다.
텔레봇을 하나 더 만든 이유
이번 작업에서 가장 중요했던 부분은 “봇 분양”이었습니다.
기존에 쓰던 텔레봇은 제 운영용입니다. 모델 변경, 자동화 상태, 블로그, 대시보드, 코딩 세션 같은 여러 일을 처리합니다. 여기에 아내의 시험공부까지 얹으면 문제가 생깁니다.
가족방 공부 메시지와 제 운영 메시지가 섞일 수 있습니다.
봇의 기억이나 컨텍스트가 섞일 수 있습니다.
버튼 콜백 권한이 넓어질 수 있습니다.
테스트 중 누른 답이 실제 오답노트에 들어갈 수 있습니다.
그래서 텔레그램 봇을 추가하고, 설정을 분리했습니다. 겉으로는 같은 Hermes 시스템이지만, 텔레그램 입구를 별도로 둔 방식입니다.
Hermes core
├─ 기존 운영용 Telegram bot
└─ 공인중개사 공부용 Telegram bot
├─ 별도 봇 인증값
├─ 별도 bot username
├─ 별도 허용 사용자
├─ 별도 memory directory
├─ 공부 전용 isolation prompt
└─ 공인중개사 2차 문제 콜백만 처리중요한 건 Hermes를 하나 더 복제하지 않았다는 점입니다. 코어 시스템은 그대로 두고, 텔레그램 adapter 계층에서 봇 정체성, 전달 대상, 허용 사용자, 메모리 범위만 나눴습니다.
이렇게 하니 기존 자동화와 공부용 봇이 서로 영향을 주지 않습니다. 제 운영용 봇은 계속 제 운영용으로 남고, 아내가 쓰는 봇은 공인중개사 2차 공부방 역할만 합니다.
버튼 클릭도 따로 안전장치를 뒀습니다
텔레그램 버튼은 편하지만 위험 합니다. 버튼 하나가 실제 DB 기록을 바꿀 수 있기 때문입니다.
이번에 만든 버튼 데이터는 rq2:문제ID:선택번호 형태입니다. 사용자가 3번을 누르면 게이트웨이가 그 값을 받아서 문제출제 스크립트의 callback 모드로 넘깁니다.
여기서 일부러 조심한 부분이 있습니다. 게이트웨이가 문제출제 모듈을 직접 import하지 않도록 했습니다. 예전에 테스트 중 import 부작용 때문에 실제 문제가 발송될 수 있는 위험이 있었기 때문입니다. 그래서 콜백은 명시적인 subprocess 호출로 분리했습니다.
텔레그램 버튼 클릭
→ Gateway가 사용자 권한 확인
→ realtor2_quiz.py callback 실행
→ 정답/오답/기록 여부 계산
→ 원래 메시지를 정답 공개 화면으로 수정또 하나의 장치는 “기록 여부”입니다. 오늘은 테스트 기간이기 때문에 버튼을 눌러도 실제 오답노트에는 반영하지 않도록 했습니다. 실제 추적 시작일을 다음 주 월요일로 잡고, 그 전 클릭은 채점 화면만 보여주고 복습 순위에는 넣지 않게 했습니다.
지금 상태
공인중개사 2차 기출문제를 문제은행으로 구성
과목별 문제 출제 규칙 적용
텔레그램 가족방에 1-5번 버튼 문제 발송
버튼 클릭 시 정답/오답 표시
허용된 사용자만 채점 가능
공부 당사자의 답만 복습 순위에 반영
테스트 기간 클릭은 실제 오답노트에서 제외
기존 운영용 텔레봇과 공부용 텔레봇 설정 분리
문제 수나 점수 같은 성과를 자랑하기엔 아직 이릅니다. 이건 이제 막 실사용에 들어가는 학습 도구입니다. 대신 이번 작업의 성과는 “운영 가능한 구조”를 만든 것입니다.
아내는 텔레그램에서 문제를 받고 버튼만 누르면 됩니다. 저는 뒤에서 문제은행, 채점, 오답 추적, 주간 대시보드까지 점진적으로 붙일 수 있습니다.
개인적으로 좋았던 지점
이번 작업은 AI를 “대단한 선생님”으로 만든 게 아니라, 가족의 루틴에 들어가는 작은 도구로 만든 사례에 가깝습니다.
공부 앱을 새로 설치하라고 하면 귀찮습니다. 웹사이트에 로그인하라고 하면 안 씁니다. 그런데 이미 쓰는 텔레그램방에 문제가 오고, 버튼을 누르면 바로 채점되면 진입장벽이 낮아집니다.
그리고 AI가 잘하는 부분과 시스템이 잘해야 하는 부분을 나눴습니다.
AI: 해설을 쉽게 풀어쓰기
스크립트: 문제은행, 스케줄, 채점, 기록
텔레그램 봇: 가족방에서 바로 풀 수 있는 인터페이스
설정 분리: 서로 다른 봇이 서로의 맥락을 침범하지 않게 막기
AI 자동화는 “똑똑한 답변”만으로는 부족합니다. 실제로 매일 쓰려면 권한, 기록, 테스트 데이터, 컨텍스트 분리 같은 운영 장치가 더 중요합니다.
<사례글 쓰는 사이에 이미 만들어 버렸다...>
다음 단계
다음에는 오답노트를 붙일 예정입니다.
월-목에 틀린 문제를 금-토에 다시 내고, 다시 틀리면 “진짜 모르는 문제”로 체크합니다. 그리고 일요일 오전에는 한 주의 오답을 예쁘게 정리한 대시보드를 보내는 방식으로 가려고 합니다.
결국 목표는 단순합니다.
아내가 시험공부를 할 때 “오늘 뭐 풀지?”를 고민하지 않게 만드는 것.
AI가 매일 문제를 고르고, 텔레그램이 문제를 배달하고, 버튼이 채점하고, 오답노트가 다음 복습을 정해주는 구조.
이번에는 그 첫 버전을 가족방에 분양했습니다.