답안을 LINE에 보내면 채점되고, 틀린 부분이 복습으로 돌아가는 학습 Bot 'StudyCoach' 제작기
요약
사용자가 LINE을 통해 답안 사진을 보내면 채점 결과와 상세 해설 페이지로 연결되는 학습 Bot 'StudyCoach' 제작 과정을 소개합니다. 이 봇은 모든 학습 기록(문제, 정답 시도, 오답 등)을 하나의 SQLite DB에 저장하여 체계적인 복습이 가능하게 설계되었습니다. 특히, AI의 답변 처리 과정에서 발생하는 오류를 방지하고, 클라우드 환경에서도 안정적으로 서비스를 운영하기 위한 아키텍처와 로직 구현 과정을 상세히 다루고 있습니다.
핵심 포인트
- LINE 연동을 통해 답안 사진 전송 및 채점 결과 수신이 가능합니다.
- 모든 학습 기록은 SQLite DB에 저장되어 체계적인 복습 시스템을 구축했습니다.
- 클라우드 환경에서 안정성을 확보하기 위해 Webhook과 Queue를 활용했습니다.
- 다양한 AI 모델(Gemini, Claude 등) 간의 장애 및 용량 초과 시 인계 로직을 구현했습니다.
이전에는 공부할 때 AI의 무료 사용량만 이용했습니다. 제한에 걸릴 때마다 다른 AI로 옮겨가야 했기 때문에, 주고받은 내용들이 여기저기로 흩어지곤 했습니다. 나중에 복습하려고 해도 이전 기록이 어디 있는지 찾는 것이 힘들었습니다. 돌아오는 글이나 수식이 읽기 어려웠다는 점도 불만스러웠습니다.
그래서 저만의 학습 Bot인 'StudyCoach'를 만들게 되었습니다. 답안 사진을 LINE으로 보내면, 짧은 강평과 상세 해설 페이지로 연결되는 링크가 돌아옵니다. 답안 없이 문제만 보내면 해설 모드로 전환되고, '모범답안'이라고 보내면 직전 문제의 정답이 도착합니다. 어떤 AI를 사용하든, 문제-답안-오답-교훈은 동일한 학습 기록에 남기 때문에 나중에 한 번에 복습할 수 있습니다.
이 글에서는 채점 결과를 다음 복습 과정으로 연결하는 설계와, 가장 어려움을 겪었던 '직전 문제' 및 '직전 질문'의 혼동을 어떻게 해결했는지 소개합니다.

답안 사진을 보내면 판정 결과와 강평 페이지 링크만 짧게 돌아옵니다 (샘플 데이터로 재현)
'허가 대기 중' 문구가 강평으로 돌아왔다
처음에는 PC의 특정 폴더에 놓인 사진을 가져와 채점하는 방식이었습니다. 여기에 LINE으로부터 사진을 받는 입구를 연결하자, 답안을 보내도 '허가 대기 중'이라는 문구가 강평처럼 돌아왔습니다.
알아보니 이미지가 AI가 읽기를 허용한 폴더 밖에 있었기 때문에, AI가 허가를 기다리며 멈춰있었던 것입니다. 게다가 StudyCoach는 그 '허가 대기 중' 메시지를 그대로 강평으로 받아들이고 있었습니다. 그래서 이미지를 놓을 폴더를 명확히 지정하고, 강평답지 않은 답변은 채택하지 않고 다음 AI로 넘기는 체크 로직을 추가했습니다. 채점 결과의 정확성을 신경 쓰기 전에, 애초에 채점이 끝났는지 여부를 구분할 필요가 있었던 것입니다.
그 후, 아침 복습 드릴과 '모범답안' 기능을 추가하고, 채점 및 해설 과정을 클라우드로 이전했습니다. PC 전원이 꺼져 있어도 LINE으로 답변이 도착하도록 만들기 위해서입니다.
채점 결과를 다음 복습 과정에 연결하기
한 번의 답변으로 끝내서는 같은 실수를 반복해도 알아차리기 어렵습니다. 그래서 문제만 보냈을 때 단계적인 해설, 오답 분류, 시간 간격을 둔 재출제를 추가했습니다. StudyCoach는 질문에 답하는 창구인 동시에, 실수를 기록해 두는 장소이기도 합니다.
문제, 정답 시도, 오답, 복습 드릴, 대화 이력, AI 사용 현황 등 모든 것을 하나의 SQLite 데이터베이스(기록을 저장하는 파일)에 기록합니다. 복습은 다음 날, 3일 후, 7일 후의 3단계로 이루어집니다. 해설만 읽었던 문제도 나중에 다시 풀어야 할 대상에 포함시켰습니다.
처리 역할 분담
구현 시에는 grading,
・solving
・verify
・drill_service
・cloud_results
이 각각 채점, 해설, 검증, 드릴, 클라우드 결과 수신을 담당합니다. LINE에는 짧은 알림만 보내고, 상세 강평은 별도의 페이지에 배치했습니다.
PC가 멈춰 있어도 답변이 도착하도록
현재는 LINE에서 온 답안이나 질문이 클라우드의 Webhook(LINE으로부터의 알림을 받는 통로)과 Queue(처리 대기열)를 거쳐 처리됩니다. 평소에는 Gemini의 무료 사용량을 사용하고, 장애나 용량 초과 시에는 Claude를, 더 나쁘면 ChatGPT/Codex로 인계합니다. 아침 드릴도 클라우드의 주기적 실행(cron job)을 통해 전송하고 있습니다.
여기서 주의한 점은 월간 플랜의 할당량이 그대로 클라우드에서의 API 호출에 사용될 수 없다는 것입니다. 따라서 클라우드의 주 경로에는 다른 무료 사용량을 사용하고, 대체 경로는 전용 메커니즘으로 연결했습니다.
어떤 AI가 답변하든, 문제와 강평은 동일한 학습 기록으로 돌아가야 합니다. 클라우드에서 처리가 완료된 결과는 별도의 큐를 통해 PC 측의 학습 데이터베이스에 동기화됩니다. 같은 결과를 두 번 받더라도 중복 등록되지 않도록 했습니다. 클라우드에서 제대로 답변이 나와도, PC 측 이력이 손상되어 있다면 복습 내용이 어긋나기 때문입니다.
아침 드릴에 필요한 최소한의 정보만 암호화하여 클라우드 쪽에 보관하고 있습니다. 상세 기록은 PC 데이터베이스에 모으고 있습니다.
| 기능 | 입력과 출력 | 고안한 점 |
|---|---|---|
| 답안 채점 | 사진 → 짧은 결과와 상세 페이지 | 틀린 이유와 교정 방법을 남기기 |
| ... |
학습에 사용되는 피드백에는 읽기 쉬운 문장과 정확한 수식이 모두 필요합니다. 채점과 피드백을 작성하는 것은 AI가 담당하지만, 그 결과물을 검토하는 것은 정해진 프로그램이 합니다. 피드백을 정리하는 처리가 체크를 통과하지 못하면 이전 경로로 되돌아갑니다. 수식의 경우, 안전하게 다룰 수 있는 숫자 등식만을 기계적으로 검산하며, 문장이나 단위가 붙은 식을 무리하게 계산하도록 하지는 않습니다.
사용하는 AI도 하나로 고정하지 않았습니다. PC 측에서는 역할별로 어떤 AI를 사용할지 할당표를 사용하여 이미지 읽기, 최초 채점, 오답에 대한 상세 피드백 등에서 AI를 다르게 사용하고 있습니다. 순서는 속도뿐만 아니라 피드백의 정확성과 활용 가능한 자원량으로 결정했습니다. 이 모든 것은 유료 API 사용량을 늘리지 않는다는 조건 하에 구축되었습니다.
사진을 읽는 것부터 알림까지 어느 단계에서 문제가 생기면, 잘못된 결과를 다음 복습에 쌓지 않도록 하고 있습니다. AGENTS.md
여기에는 '품질은 거대 모델이 아니라 시스템(機構)으로 지켜야 한다'고도 쓰여 있습니다.
스스로 다시 읽어볼 수 있는 상세 피드백 페이지를 마련한 것도, 체크만으로는 내용의 정확성까지 보장할 수 없기 때문입니다.

링크된 피드백 페이지. 판정/오답 지적/정확한 풀이 과정을 수식과 함께 표시합니다 (샘플 문제)
'직전 문제'와 '직전 질문'을 분리하기
가장 어려웠던 부분은 대화의 문맥 혼동이었습니다. 내부의 하나의 값이 '직전 문제'와 '직전 질문' 둘 다를 나타내고 있었기 때문입니다. 이 때문에, 문장으로 질문하면 문제 참조 위치가 덮어쓰여지고, 이어서 '모범 답안'을 보내면 질문 자체에 대한 모범 답안을 만들려고 하는 문제가 발생했습니다.
먼저, 문장 질문이 '직전 문제'를 덮어쓰지 않도록 수정했습니다. 그런데 다른 AI의 검토에서, 그것만으로는 '또 한 문제를 만들어줘'와 같은 추가 질문 시 문맥이 손실된다는 지적을 받았습니다. 그래서 문제와 질문을 분리하고, 질문에 답할 때만 가장 최근 질문을 첨부하도록 했습니다. 문제를 가리키는 '이 식'과 질문을 가리키는 '그 다음'은 별도의 정보로 다루어야 할 필요가 있었습니다.
추가 질문에는 직전 답변 자체가 필요한 경우도 있습니다. 처음에는 답변을 1,500자로 잘라서 저장할 계획이었습니다. 그런데 기록에 남아 있던 답변 18건 중 1,500자에 들어오는 것은 28%밖에 되지 않았습니다. 중간에 자르면 이전에 제시했던 문제의 내용이 사라지게 됩니다. 그래서 직전 답변 한 건만 최대 6,000자까지 보관하는 방식으로 변경했습니다.
더 나아가 검토 과정에서 질문을 추가하면 아침 드린 문제 하나가 문맥상 밀려나는 경우도 알게 되었습니다. 지금은 질문을 문제와 별도의 영역으로 전달하고 있습니다.
문맥은 늘릴수록 좋은 것이 아니었습니다. 무엇을 참조해야 하는지, 언제까지 유효한지, 어떤 순서로 전달할지까지 정해두지 않으면, 불필요한 문맥이 오히려 오류의 원인이 될 수 있었습니다.
채점 피드백을 다음 문제에 연결하기
StudyCoach에서 가장 좋았던 점은 채점 피드백이 다음 문제로 이어질 수 있게 되었다는 것입니다. LINE 창구, AI를 사용할 수 없을 때의 대체 경로, 동일 데이터베이스 동기화, 복습 예약까지 하나의 흐름으로 통합되었습니다. 되돌아보면, 실제로 어려웠던 부분은 문제와 질문의 구분이나 수식의 경계 같은 '경계'에 관한 것이었습니다.
참고로, StudyCoach는 제가 개인적으로 운영하는 것이며 일반에 공개된 서비스가 아닙니다. 체크를 통과하더라도 AI가 틀린 답을 그럴듯하게 설명해버릴 가능성은 있습니다.
비슷한 것을 만든다면, 답안 접수와 피드백뿐만 아니라 '다음 복습을 위해 무엇을 남길지'를 처음에 결정하는 것이 좋습니다. 창구를 하나로 통일하면 학습 기록도 한곳에 모이게 됩니다.
Discussion

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