Show GN: [CodeStudy] 일부러 불편하게 만든 Swift 학습 앱 (AI 튜터)
(apps.apple.com)안녕하세요.
개인 프로젝트로 만든 iOS 학습 앱을 소개합니다.
만든 계기
ChatGPT나 Claude에 Swift 개념을 물으면 깔끔한 답이 바로 나옵니다.
그런데 며칠 뒤 같은 개념이 또 나왔을 때 머릿속이 비어있는 경험을 반복하면서, "답을 받는 학습"과 "답을 찾는 학습"이 다르다는 걸 새삼 느꼈습니다.
그래서 소크라테스식 교수법 즉, 답을 주는 대신 질문을 던져서 스스로 깨닫게 하는 방식을 AI 튜터로 구현해봤습니다.
사실, 일부러 불편하게 만든 앱입니다.
어떤 앱인가
- 50개의 Swift 개념 (입문 → 고급, async/await, Actor, Associated Types 등 포함)
- 유저가 질문해도 AI는 답을 주지 않습니다. 대신 역질문으로 사고를 유도
- 매일 한 개념, 대화를 통해 "마스터리" 달성하는 구조
- 대화 중 Swift 코드를 직접 입력할 수 있는 내장 에디터 (구문 강조 + 자동 들여쓰기)
- 학습 기록(잔디), 위젯, 다크모드
기술 스택
- iOS: SwiftUI + SwiftData, MVVM + @Observable, 외부 의존성 0
- Backend: Node.js on Vercel Functions (SSE 스트리밍)
- LLM: Claude Haiku 4.5 via OpenRouter. provider 추상화해서 Gemini/OpenAI 교체 가능
- 커리큘럼: JSON 기반 50개 concept, 서버 사이드 프롬프트 엔지니어링으로 "답 대신 질문" 제약 강제
현재 상태
- 회원가입/로그인 없음 — 지금은 기기 로컬 저장만, 익명 사용
- 광고 없음 — 학습 앱 톤과 맞지 않다고 봐서
- 결제 없음 — 아직 베이스 검증 단계. 추후 구독 모델 검토 중
솔직한 한계 / 고민 중
- 출근길 사용이 버겁다는 피드백이 있어, 세션 길이를 예측 가능하게 만드는 "5분 모드"를 설계 중입니다
- 첫 응답 p99가 약 9초 (OpenRouter 관측치). prompt caching 적용으로 다음 버전에서 3~4초 목표
- 사용자당 토큰 비용 $0.005/DAU 수준. 스케일링 시 재검토 필요
링크
출시 3일차라 데이터가 많지 않습니다.
특히 "답 안 주는 AI가 오히려 답답하지 않나?"는 구조적 질문에 대한 의견이 궁금합니다.
써보시고 피드백 주시면 감사하겠습니다!
댓글과 토론
제가 만들면서 가장 놀란 건, "답 안 주는 AI"를 만드려고 system prompt에 넣은 제약([MASTERY] 토큰 기반 마스터리 판정)을 LLM이 자꾸 깨뜨리려해서 프롬프트 엔지니어링에 생각보다 많은 시간을 썼다는 점입니다.
Claude Haiku보다 Gemini Flash가 이 제약을 더 잘 지켰는데, 반대로 질문의 깊이는 Claude가 좋았어요. 지금은 Claude + prompt 정밀화 조합입니다.
혹시 비슷한 "LLM을 억제하는" 프롬프트 설계 경험 있으신 분 계시면 노하우 공유 부탁드려요 🙏
저도 GPT랑 Claude 둘 다 커스텀 프롬프트로 해봤었는데, 며칠 하다보면 결국 "아 그냥 알려줘!" 해버리거든요...그리고 계속 하다보면 답을 알려주는 상황이 자주 나오더라고요.
그래서 학습이라기보단 검색이 되는 느낌이 너무 강했습니다.
제가 만든 앱은 system prompt랑 마스터리 판정이 서버 쪽에 있어서 그게 좀 덜 풀립니다.
세션 끝나는 타이밍도 정해져있어서 출근길엔 사용하기에는 편하다고 생각합니다.
사실, 말씀하신대로 방법 자체는 GPT나 Claude로도 충분히 할 수 있어요.
근데 저처럼 혼자서 꾸준히 안 되는 사람한테 맞는 포맷이라고 생각하시면 될 것 같습니다! :)