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을 억제하는" 프롬프트 설계 경험 있으신 분 계시면 노하우 공유 부탁드려요 🙏