01DailyOPIc
2025.11 – PresentAI 기반 OPIc 학습 iOS 서비스
개인 프로덕트 · 운영 중 · 기획 · iOS · Backend · Infra 단독
Swift · SwiftUI · Python · FastAPI · OpenAI API · Firestore · Cloud Run · Docker · GitHub Actions · StoreKit 2 · RevenueCat

Overview
AI가 OPIc 문제를 생성하고, 사용자의 음성 답변을 분석해 예상 등급과 개선점을 돌려주는 iOS 학습 서비스입니다. 2025년 11월에 기획해 12월에 첫 버전을 출시했고, iOS 앱부터 Backend·Infra·배포·운영까지 전 구간을 직접 구축해 현재도 운영하고 있습니다.
Problem
직접 OPIc을 준비하면서, 혼자 공부하는 과정이 여러 도구로 분절되어 있다는 점이 가장 큰 불편이었습니다. 매 문항마다 앱을 오가며 복사·붙여넣기를 반복해야 했고, 기록이 남지 않아 학습 흐름이 이어지지 않았습니다.
- GPT로 문제 생성
- 별도 녹음 앱
- STT
- Transcript 재입력
- 예상 등급 · 분석 요청
이 과정을 질문 · 녹음 · 분석 · 기록이 이어지는 하나의 학습 Flow로 통합하는 것이 서비스의 출발점이었습니다.
Product

Daily오늘의 질문 확인 후 바로 답변 시작 
Recording앱 안에서 직접 음성 답변 · 180초 제한 
TranscriptSTT 결과를 확인하고 제출 또는 재녹음 
Result예상 등급 · 강점 · 개선점 · 항목별 피드백
Architecture
iOS App
Swift · SwiftUI
- Recording
- STT
- TTS
- RevenueCat
- AdMob
- Firebase App Check
FastAPI Backend
Python
- Question Generation
- Answer Evaluation
- Rubric Validation
- RevenueCat Webhook
- AdMob SSV
AI · Data
- OpenAI API
- Firestore
AI 호출과 채점 규칙을 클라이언트가 아닌 서버에 두어, 앱 심사·배포 주기와 무관하게 평가 로직을 교정할 수 있도록 했습니다.
GitHub Actions
Docker
Artifact Registry
Google Cloud Run
AI Evaluation
LLM이 생성한 예상 등급을 그대로 노출하지 않고, Rubric 결과와 서버 규칙을 이용해 다시 검증합니다.
Voice Answer
STT Transcript
LLM Evaluation
5 Rubric Domains
- Task Completion
- Grammar
- Vocabulary
- Discourse
- Fluency
Band Classification
- Foundation
- Developing
- Functional
- Strong
- Advanced
Server Validation
Final Result
- Estimated Grade
- Strengths
- Improvements
- Sample Answer
AI가 임의의 연속 점수를 만들어내면 같은 수준의 답변에도 매번 다른 숫자가 나옵니다. 그래서 AI에게는 영역별 band 판정만 맡기고, 예상 등급은 서버가 규칙으로 다시 계산합니다.
- 모든 영역 Foundation → 최대 IL
- Strong 영역 없음 → 최대 IM3
- Task 또는 Discourse가 Functional 미만 → 최대 IM3
- AL → 모든 영역 Strong 이상 + 최소 하나 Advanced
공식 라벨을 기준으로 한 정확도 실험은 하지 않았기 때문에 채점 정확도가 올랐다고는 말할 수 없습니다. 이 구조로 확보한 것은 평가 결과의 일관성, 검증 가능성, 그리고 장애 상황에서의 복구 가능성입니다.
Reliability & Production
Retry
문제 생성이 실패해도 전체 세트를 버리지 않고 실패한 문항만 최대 3회 재생성
Structured Output
JSON Schema로 응답 형식을 검증하고, 형식이 어긋난 응답은 재요청
Fallback
AI 장애 시 미리 검증해 둔 문제 Catalog로 대체해 학습 흐름 유지
Production Security
App Check · App Attest · RevenueCat Webhook · AdMob SSV로 서버에서 검증
초기에는 시험 구성과 문제 내용을 모두 AI가 생성했습니다. 문항 수나 유형이 흔들리면 시험 자체가 성립하지 않아, 서버가 시험 구조를 고정하고 AI는 질문 내용만 생성하도록 역할을 나눴습니다.
Cost Optimization
- 작업 성격에 맞춰 lightweight model 사용
- 15개 문제를 개별 호출하지 않고 batch로 한 번에 생성
- 모의고사 15개 답변 분석도 가능한 범위에서 묶어서 처리
Real User Issue
- 말하다 잠깐 멈추면 녹음이 자동 종료되던 문제 — silence auto-stop을 제거하고 직접 종료하거나 180초 제한에 도달할 때만 끝나도록 변경
- 녹음 파일 용량 문제 — AAC/M4A 48kbps로 인코딩해 180초 기준 약 5.4MB에서 약 1.1MB로 감소
Results
- App Store Downloads
- 2,200+App Store Downloads
- Real / Active Users
- 250+Real / Active Users
- 구독 매출 발생
- Subscription구독 매출 발생
- 광고 매출 발생
- Ads광고 매출 발생