이 글은 2024년 당시 자격시험을 준비하면서 만든 AI 기반 구술 학습 앱의 기획·설계·개발 과정을 다룬 회고입니다. 단순 기능 구현이 아니라 불확실성이라는 사용자 문제를 기술로 해결한 과정을 설명하고 있습니다.
이 프로젝트는 사용자 중심 사고를 어떻게 서비스로 연결하는지를 보여주기 위한 핵심 사례입니다.
AI 구술 암기 앱의 탄생 배경
결국, 구술 시험에서 84점으로 안전하게 합격할 수 있었다. 그렇다면, 암기 앱은 내게 먼저 효용성이 증명되었으니 다른 사람들에게서도 유용하지 않을까? 그래서 2025년에는 다른 사람들을 위해서 암기 앱을 만들고 배포해 보기로 했다. 잘하면 새로운 아이템으로 시장에 진출할 수도 있겠다는 기대와 함께 사활을 걸어 보기로 했다.
AI 구술 암기 앱을 만들기로 결심했던 이유
생활스포츠지도사 구술 시험을 준비하며 내가 가장 불안했던 건 불확실성이었다. 내가 암기한 이 답변으로 몇 점이나 받을 수 있을까? 이 정도 답변이면 과연 합격할 수 있을까? 불안은 깊었다. 다른 자격증 시험과는 달리 생활스포츠지도사 시험은 구술시험의 평가 기준이 모호했고, 결과 발표가 나올 때까지 끊임없이 불확실성 속에서 살아야 했다. 실기 시험은 몸으로 익히고 반복하면 됐지만, 구술시험은 한마디 한마디가 모두 내 결과에 영향을 미치는 만큼 단순 암기로 해결하기에는 부족하다고 느꼈다. 그래서 실제 시험장에서 긴장 속에서도 확신을 가질 수 있는 방법이 필요했다. 이왕 필기 시험을 붙었으니, 구술 시험도 확실히 끝내고 싶었다.
문제를 정의하고 기획하기
작년에 시험을 준비하면서, 구술 답변이 점수를 얼마나 받을 수 있을지에 대한 명확한 기준을 찾기 어려웠다. 기존의 수험서나 자료는 단순히 '모범답안'만 제공할 뿐, 이 답변이 실제 시험장에서 몇 점이나 될지 명확하게 알 수 없었다. 생활스포츠지도사 구술 시험에서는 단순한 답변 암기가 아닌, 이 답변이 얼마나 유효한지 객관적인 판단이 필요했다. 그래서 AI 모델을 활용하여 심사위원 기준에서 답변을 평가하면서 점수를 미리 예측할 수 있는 시스템을 만들어 보기로 했다.
구술 카드에 적힌 답만 무조건 외우기만 하면 합격할 수 있을까?
내가 이 답변으로 몇 점이나 받을 수 있을까?
이 정도 답변하면 합격일까 불합격일까?
암기한 답변이 실전에서 합격할 만한 수준일까?
그래서 결국, 작년에 채점 기준을 산정하고 AI에 심사위원의 역할을 부여했다. 그 뒤 피드백을 통해 답변을 개선하고 문제당 만점에 가까운 점수를 득점할 수 있도록 다듬었다.
암기할 내용이 상당히 많기 때문에 작년에는 완성도를 신경써서는 안 됐다. 핵심 기출 문제만 하더라도 300개가량 된다. 그래서 CSR 기반으로 빠르게 껍데기를 만들어 두고 구술 질의 응답 데이터는 JSON 형식으로 외부에서 주입하는 방식으로 제작했다. 구술 데이터는 DB가 아니라 구글 스프레드시트에 보관하고 Apps Script를 이용해 JSON 형식으로 변환하는 방식으로 데이터를 업데이트했다. 개인 용도로 사용하기 때문에 불편함을 감수하더라도 충분히 의미 있었다.
암기 플래시 카드의 효용성이 작년에 증명된 만큼, 이번에는 다수의 사용자를 모집하고 데이터도 체계적으로 관리하기로 했다. 하지만, AWS와 같은 서비스를 이용해서 인프라를 구축하자니 일을 크게 벌이는 것 같았다. 그래서 PaaS 서비스를 이용한다면 수고를 덜고 빠르게 서비스를 개발할 수 있을 것 같았다. Netlify 배포 플랫폼과 Supabase를 이용한다면, 비용을 들이지 않고도 충분히 서비스를 운영할 수 있을 것 같았다. Next.js를 통해 서버에서 렌더링하면서 로그인 기능을 도입했다. 구술 데이터를 이격하지 않아 조금 더 안전할 것 같았다. 개발의 속도를 높이기 위해 AI 기반의 개발 도구인 Cursor를 적극 활용했다. 빠르게 프로토타입을 제작하면서, 실제 사용자들이 어떻게 활용할 수 있을지 빠르게 검증할 수 있었다.
AI 구술 암기 앱의 장점
1. 실물 구술카드 들고 다닐 필요가 없다.
무거운 노트북을 메고 출퇴근하는 길에는 실물 카드를 주머니에 넣어두기도 부담되고 꺼내 보기도 부담됐다. 하계 시험이라서 바지에 스마트폰과 지갑을 넣으면 보관할 곳이 없었기 때문에 가방에서 넣었다가 꺼내야 했다. 가방 수납이 잘 되지 않는다면 암기카드가 구겨지거나 찢어질 수도 있다. 그렇게 물건을 험하게 다루는 편이 아닌데도 실물 암기 카드는 꽤 작기 때문에 구겨지기 일쑤였다.
그런데 어차피 휴대해야 하는 스마트폰을 꺼내서 학습하게 되면 지하철에 탑승해서 서서 가더라도, 환승하더라도 학습에 쉽게 몰입할 수 있었다.
2. 반응형 웹
카페에서 노트북/태블릿으로 학습할 수 있다. 화면 공간이 넓어지면 사이드바가 보이기 때문에 카드를 제어하기가 좀 더 수월해진다. 그리고 대중교통에서는 스마트폰으로 카드 형식으로 편리하게 복습을 진행할 수 있다. 화면 공간이 모자란 만큼 플래시 카드에 집중하도록 했다.
3. AI 채점된 답변으로 불확실성 해소
구술 암기 앱은 이전부터 많이 있었다. 나보다 빠르게 개발하신 분들이 생각보다 많다. 하지만, 내가 개발한 앱만큼은 AI가 답변을 채점해서 보여준다. 불확실성이 해소되니 수험생은 스트레스를 받지 않고 마음 편히 공부할 수 있다. 단순히 프롬프팅으로 채점을 요청한 게 아니라, 실제 가채점 데이터를 바탕으로 AI의 채점 방식과 심사위원 채점 방식을 동기화해서 정확도가 높을 것으로 기대하고 있다.
4. 모범 답안 자동 정리
모범 답안이 자동으로 정리되어 있어서 일일이 정리할 필요가 없다. 심지어 작년에 내가 합격을 위해 몇 번을 고민하며 정제한 답안이라서 수험생 입장에서 불안감을 해소하면서 시험 준비하기에도 탁월하다.
5. 반복 학습을 위한 플래시 카드 구조
시험장에서는 머릿속에서 자동으로 튀어나오게 암기하는 게 전부가 된다. 카드 기반 구조는 진짜로 시험장 뇌 사용 흐름과 가장 유사하다고 느꼈다. 시험장에서도 제비뽑기를 통해 펼치게 되었을 경우 질문만을 통해 답변해야 하기 때문이다. 덕분에 수험생은 플래시 카드 구조를 사용하면서 “나 지금 공부 잘하고 있다”는 효능감으로 지속적으로 암기할 가능성이 높아 보인다고 생각했다.
6. 시험 끝난 사람의 성공 체험 기반
만든 사람이 실제로 시험 보고 합격선 점수(70점 이상)를 상회하는 사례를 만들었다는 점에서 신뢰감 생길 것으로 기대했다. 이건 앱의 기능이라기보다는 불안감을 가진 수험생들에게 큰 강점으로 작용할 수 있다고 생각했다. 만약에 마케팅까지 곁들이게 된다면, 이런 브랜딩 요소를 강화할 수 있는 방안까지 고려해 보면 좋을 것 같다.
7. 시험 범위가 넓고 자주 바뀌는 상황에서 유연한 업데이트 가능
종이책이나 실물카드는 출판 시점에 고정된다. 하지만, 플래시 카드는 당일 출제된 문제도 추가 배포 없이 DB 쿼리 업데이트만 한다면, 빠르게 반영할 수 있다. 2024년도 구술 시험장에서는 수험생을 당황케 하는 새로운 문제가 대거 등장했었다. 이때 다음 시간대를 대비하는 수험생들을 위해 발빠르게 대처한다면, 내년을 위해 사용자를 확보할 수 있다고 생각했다.
AI 구술 채점위원 GPTS 만들기
AI가 일정한 기준대로 채점하기 위해서는 GPTS가 필요했다. GPT 4o 기반의 모델이 각 질문마다 답변하면, AI는 구술 시험 심사위원의 기준으로 평가하고 개선된 답변을 제시해 준다. 이 내용을 바탕으로 구술 암기 카드의 답변을 구성했다.
[프롬프트 요청]
Q. 근육의 데피니션, 세퍼레이션, 스트리에이션을 설명하세요
답변:
근육의 데피니션(Definition)은 체지방이 낮고 근육량이 많아 근육 형태가 선명한 정도를 말합니다. 세퍼레이션(Separation)은 각 근육 사이 경계선이 뚜렷한 정도입니다. 스트리에이션(Striation)은 근섬유의 다발이 명확하게 구분되어 마치 줄무늬처럼 보이는 걸 말합니다.
1. 평가 및 채점
항목 | 내용 |
총점 | 22점 / 25점 |
•
총평: 3가지 키워드를 비교적 명확하게 설명했으나, 기능적 의미 또는 심사 기준에서의 의미를 부각하지 않아 부분 감점.
감점 사유 | 세부 내용 |
‘데피니션’은 단순히 ‘형태가 선명함’이 아닌 ‘근육 간 경계와 윤곽의 뚜렷함’을 통해 심사 항목과 연계되어야 함 | |
‘줄무늬처럼 보임’만 언급하고, ‘근육의 수축 방향 또는 섬유 배열로 인한 가시성’까지 설명하지 않음 | |
3가지 요소가 ‘심사 기준에서 어떤 역할을 하는가’에 대한 연계가 없었음 |
2. 상세 분석
항목 | 포함된 키워드 | 분석 및 보완점 |
체지방, 근육량, 선명한 형태 | 단순 설명에 그치고, 근육의 전체 윤곽선이나 외형적 대비를 통해 판단된다는 점 부재 | |
근육 사이, 경계선, 뚜렷함 | 상대적으로 명확하지만, 상·하체 근육 간 구분의 중요성까지 언급 시 더 완벽 | |
근섬유, 줄무늬 | 줄무늬 언급은 정확하지만, ‘수축 방향에 따른 섬유 배열’ 또는 ‘근비대의 결과’ 등 심사 기준의 직접 연관 설명 부족 |
3. 개선된 답변 제시 (예상 점수: 24점)
근육의 데피니션은 전체적인 근육 윤곽이 체지방 감소로 뚜렷하게 드러나는 상태를 의미합니다. 세퍼레이션은 근육 간의 경계선이 분명한 상태이며, 스트리에이션은 근섬유의 줄무늬가 명확히 보이는 것으로 근육의 밀도와 완성도를 나타냅니다.
구술 앱을 개발하며 아쉬웠던 점
OAuth2 (카카오 → 구글)
원래는 이용권 발급 후 계정 공유를 우려해서 카카오 로그인을 이용해 보려고 했다. 하지만, Supabase의 카카오 로그인 기반에서는 한계점을 발견할 수밖에 없었다. 탁월한 인증 방법이 될 수 있었지만, 앱이 완성되지 않은 상태에서 심사 절차 및 구현 부담을 고려해 MVP 단계에서는 구글 로그인을 우선 적용했다.
•
•
카카오 이메일을 등록하지 않은 사용자가 존재할 수 있음
•
카카오 개발자 센터에서 별도의 비즈 심사 필요
구글 로그인을 사용하게 되면서 좀 더 빠르게 인증 기능을 작업할 수 있었다. 나중에 다듬고 나서 다시 카카오 로그인을 고려해 볼 수도 있을 테니까. Supabase에서는 다양한 Authentication 수단을 지원하는데 로그인 방식을 바꾸는 방식은 매우 간편했다.
인앱 브라우저 대응
구글 로그인으로 변경한 뒤에는 OAuth 연장선 상의 문제가 됐다. 홍보 채널은 카카오톡 오픈채팅방인데 링크를 클릭하면 인앱 브라우저로 열린다는 것. 사용자는 인앱 브라우저에서 대부분 로그인을 시도했다. 그런데 구글에서는 인앱 브라우저에서의 로그인을 정책상 허용하지 않았다. 결국, 인앱 브라우저를 사용하지 않도록 우회하는 방법을 선택했고 로그인은 외부 브라우저를 띄우도록 프로그램 코드를 수정했다. 구글에서 인앱 브라우저 로그인 정책을 금지한다는 정책적 한계 상황을 인지한 뒤, 사용자의 불편을 해결하면서도 본래의 목적(인증)까지 고려한 최선의 방책을 찾기까지 빠른 대응이 필요하다는 점도 이번 경험을 통해 새롭게 배웠다.
체력과 시간 분산의 벽
다양한 역할을 병행하면서 ‘개발만 파는 상태’는 아니었기에, 빠르게 MVP를 완성한 것 자체에 의미를 뒀다. 다만 체계적인 기능 설계나 사용자 피드백 반영은 그만큼 미뤄질 수 있으므로 MVP 기반으로 빠르게 실험하며 피드백을 반영하는 쪽이 훨씬 생산적이라는 점을 알게 되어 차츰 방향을 옮겨 갔다. 처음에는 Production 환경과 DEV 환경을 구분지으면서 개발 프로세스를 나름 정립해 나가려고 했다. 하지만, 시간이 촉박해질수록 점차 목표를 하향하면서 사용자를 유치해서 이 앱을 통해 효과를 얻는 경험 그 자체에만 집중하기로 했다. 결국 DEV 환경을 배포 환경으로 이용하기로 했다. 지금 수준에서는 무료로 제공하고 있고 사용자도 많지 않으니 나중에 별도 환경을 구축해 보기로 했다.
[1월~3월: 우아한테크코스 레벨1 준비]
2024년 12월에는 2025년도 학생 선발(7기)이 완료되고 1월까지는 정비하는 기간이었다. 이후에는 7기를 맞이하기 위해 레벨1 커리큘럼을 준비하는 시기를 보냈다. 이때 슬쩍 Next.js 뼈대 코드를 구성하고 방치했었다. 생활스포츠지도사 2급 필기 시험은 4월이고, 보통 수험생들은 구술 시험을 준비하려면 필기 시험 발표일이 지난 뒤에 본격적으로 준비하기 때문에 시급성이 없었던 프로젝트였다. 3월에는 레벨1 강의를 준비, 진행하다 보니 생각보다 에너지가 급격히 소진됐다. 병행하는 웨이트 트레이닝조차도 ‘한계치’에 다다를 정도로 힘에 받혀 있는 체력이어서 이 프로젝트에 신경쓸 여력이 없었다.
[4월~5월: 방송통신대학교 & WNGP 대회 사전 준비]
레벨1을 마치고 쉬면서 바로 개발하면 좋으련만, 대학교 과제 제출 마감일이 4월 중순에 쏠려 있었다. 결국, 본업에서 강의가 끝나자마자 학교 과제를 제출하는 데 힘을 쏟았고 4월 말에는 출석 수업에 참석하게 됐다. 또한, 4월에는 보디빌딩 대회에 출전해 보기로 다짐했던 터라 유산소 1.5시간, 웨이트 트레이닝 1.5시간으로 주5~6회 운동으로 3시간씩을 보내다 보니 사이드 프로젝트를 개발할 정신이 없었다. 다만, 대회를 준비하면서 주5~6회 3시간 이상 운동에 시간을 쏟으면서 8월까지 투입하기에는 학업과 프로젝트를 놓칠 수도 있기에 결국 다음 기회를 노려 보기로 했다
. 그로 인해 운동의 비중을 줄이고 Cursor를 통해 AI Agent 모드로 개발을 빠르게 진행했다.
구술 시험 공고의 뒤늦은 확인
이번엔 콘텐츠 재활용 중심의 접근에 집중하다 보니, 시험공고 변화를 즉각 반영하지 못했다. 즉각적으로 반영하지 못한 이유는 내가 올해 시험을 직접 응시하지 않다 보니, 플랫폼을 어떻게 구성하고 작년의 데이터를 마이그레이션할지만 생각했던 것 같았다. 이 경험을 통해 ‘정책 변화 대응력’이야말로 사용자 중심 기획에서 핵심임을 새롭게 인지하게 되었다. 생각보다 기획은 더욱 섬세해야 한다는 점을 깨달았다. 시험 공고의 변화로 시험 범위가 변경되거나 추가될 수도 있었기에 수험생은 아주 작은 변화에도 민감하다는 걸 놓쳤다. 이번 기회를 통해 사용자 관점에서 제품만이 아니라, 문제 그 자체를 바라봐야 한다는 시각이 필요하다는 걸 뒤늦게 깨달았다.
유소년/노인 과목 미반영과 배포 지연
구술 시험의 공고도 뒤늦게 확인했으니 어떻게 과목을 나눠서 콘텐츠를 구성할지, 작년 콘텐츠에서 답변을 어떻게 개선할지 고민도 그만큼 늦어졌다. 콘텐츠가 미완성된 상태에서 배포하는 것도 꺼려졌다. 하지만 돌아보면, “완성된 기능만으로도 필요한 사람에게는 충분히 유용했을 것”이란 생각이 든다. 그래서 결국, 5월 24일에 2024년도 기준 구술 시험 콘텐츠를 등록해 두고 알파 테스터를 모집했다. 기능 그 자체보다는, 이용하면서 사용성에 관한 피드백을 주로 받아 볼 목적이었다.
5월 중순부터는 기말고사 시험 공부, 기말 과제 제출와 같이 학업 일정도 이어져야 했다. 그 밖에도 다른 일정들이 겹치게 되어 생각보다 구술 앱 개발에 몰입할 수 있는 시간이 적었다. 기능은 이전에 완성되었으나, 2025년도 콘텐츠를 만드는 데 시기상 늦게 됐다. 시험 일정은 6월 중순이기에 더 늦어져서는 안 된다고 판단하고 기존 자료에서 부족한 부분을 빠르게 재구성하되, 유소년/노인 과목은 일단 배제하기로 했다. 완전하지 않아도 나누고, 빠르게 완성하고 배포하는 것부터 우선순위로 삼았다면 좀 더 빠르게 배포할 수 있었는데 타이밍을 놓친 것 같아서 아쉽다. 하지만, 무료로 배포하는 만큼 다음 해에 더 잘하면 되니까 실패하면서 깨달은 교훈들을 새겨 두려 한다.
제한적인 사용자 유치 환경
1.
홍보 채널의 한계
•
대부분의 수험생 커뮤니티는 교재 판매/교육 위주의 카카오톡 오픈채팅방이 중심이었기 때문에, 그 안에서 AI 기반 학습 앱을 홍보하는 건 적절하지 않다고 판단했다.
•
2024년 취득 준비를 위해 기존에 참여했던 스터디 그룹이나 지인 중심 채팅방에서 소규모로 사용자를 모집했고, 이는 확산력은 낮지만 높은 신뢰 기반의 접근으로 유의미한 피드백 확보에는 효과가 있었다.
2.
교육 시장의 구조적 보수성
•
공신력 있는 교재와 강사가 중심인 수험 시장에서, AI 기반 제품이라는 기술적 우위만으로 진입 장벽을 돌파하긴 어려웠다.
•
불확실성 해소라는 강점을 내세웠지만, 1위 교재, 강사의 브랜딩 효과를 넘어서는 데엔 좀 더 강력한 신뢰 구축 전략이 필요하다는 점을 깨닫게 됐다.
3.
시험 제도 및 응시 조건의 제한
•
실제 수험생 중 일부는 시험 접수에 실패하게 되어 AI 학습 도구뿐 아니라 구술/실기 시험 준비 자체가 무의미해진 사례가 있었다.
•
특히, 보디빌딩 종목은 추가 접수를 제한적으로만 받았기 때문에 시험을 치를 수 없는 수험생 대상 마케팅은 자연스럽게 무력화되었다.
연 1회로 진행되는 시험이라 합격 인원수만큼은 응시 조건이 보장되어야 한다고 생각했지만, 여러 모로 체육지도자 자격검정 연수원의 현실적인 한계로 응시 기회가 제한되니 아쉬웠다. 내년에는 더 많은 수험생에게 기회가 주어졌으면 하는 바람이다.
개발 후기
AI로 인해 점점 더 중요해지는 기본기
프런트엔드 생태계는 어지러울 만큼 새로운 기술이 쏟아진다. 이제 AI까지 합세해서 기술적으로 빠르게 완성할 수 있도록 돕는다. 요구사항만 구체적으로 명시하면, Claude 3.7 Sonnet 모델은 한 번에 용케 구현해낸다. 리액트 컴포넌트를 자동으로 구성하고, 사용된 UI 라이브러리를 인식해서 설치까지 해주는 그 과정을 보며 사람보다 잘한다는 생각이 스쳤다. 결국 개발의 최종 몫은 내가 하는 거지만, ‘앞으로 이걸 AI가 다 하게 된다면 나는 뭘 해야 하지?’라는 질문 앞에서 나는 작아만 졌다.
그런데 프로젝트 구조 상 Supabase에서 데이터를 불러오는 과정에서 오류가 발생했는데, 처음에는 단순히 클라이언트 fetch 관련 문제라고만 생각했다. 하지만 Next.js는 서버 렌더링 방식과 클라이언트 렌더링 방식을 모두 지원하기 때문에 데이터 호출 위치를 분명히 설정해야만 했다. 특히 use client가 명시된 파일에서는 Supabase의 비공개 데이터를 다룰 수 없다는 점을 알았어야 했다. 내가 만약에 렌더링 방식의 개념을 몰랐다면 왜 안 되는지도 모르고 계속 헤맬 수밖에 없는 상황에 머물렀을 것 같다.
또 다른 예시로는, 클라이언트에서 상태를 제어하는 컴포넌트를 SSR로 렌더링되는 페이지 컴포너트에서 제어하려고 하다가 오류가 발생했던 부분이었다. 렌더링이 어디서 되는지에 관한 차이점을 알지 못했더라면, AI에 마땅히 문제를 해결해 달라고 구체적으로 요청하지 못했을 것이다. 아직까지 AI는 사람이 시키는 명령은 잘 수행하는데 섬세함이 부족하다. 어디서 문제가 발생하는지 원인을 곧 잘 찾기도 하지만, 아직까지는 개발자가 분명한 원인을 짚어낼 줄 알아야 한다. 그래야 AI와 원활하게 협업할 수 있다고 생각한다.
기술을 바라보는 나의 철학
개발은 문제 해결을 위한 도구
프런트엔드 코치로 활동하면서 학생들에게 항상 강조한 점이 있었다. 진짜 개발의 매력이 무엇인지 내게 묻는다면, 나는 개발은 문제를 해결하는 강력한 도구를 꼽을 것이다. 개발은 단지 기술적으로 활용하는 것이 아니라, 현실의 문제를 해결하는 도구가 되어야 한다고 생각하기 때문이다. 내가 초창기 개발자가 되었을 때는 요구사항을 단지 수정해 주는 개발자로, 프로그래밍 언어로 코드를 작성하는 사람으로만 생각했다. 하지만, 개발의 본질은 결국 사람의 불편함을 해결해 주는 도구 중 하나였다. 이번 앱을 개발하면서 다시금 내 철학을 확인할 수 있었다. 구술 시험의 불확실성이라는 문제를 기술을 통해 해결했고 기술적 성취뿐 아니라 기획 사이클을 경험할 수 있었다.
AI와 협업할 때는 견고한 기본기
AI는 분명히 부족한 시간을 줄여 준다. 혼자서 붙잡고 개발했다면 1개월 걸릴 작업량을 1시간 만에 해결해 주기도 한다. 그만큼 AI는 엄청난 도구이지만, 단순히 코드를 작성해 주는 기계라고 생각해서는 안 된다고 생각했다. ‘내 사고를 더 넓게 확장시켜주는 존재’로 협업해야 한다는 생각이 들었다. 또한, AI가 개발하면서 발생하는 문제점의 원인은 결국 개발자가 추적해야 하고 추적하기 위해서는 견고한 기본기가 바탕이 되어 있어야 함을 체감했다. AI의 생산성 극대화로 인해 개발 프로세스와 문화는 확실히 많이 바뀔 것 같다.