
Clarity
AI 사고 · 의사결정 코치
막연한 고민을 텍스트나 음성으로 입력하면 AI가 구조화된 분석을 돌려주는 사고 정리 iOS 앱입니다. 문제 정의, 감정 분석, 객관적 사실, 장단점이 담긴 선택지 카드, 최선·최악·현실 시나리오, 추천 전략까지 단계별로 제시합니다. SwiftUI·SwiftData 기반 클린 아키텍처 클라이언트와 FastAPI·OpenAI 백엔드로 구성된 모노레포 제품으로, iOS는 외부 SPM 의존성 0개로 Apple 1st-party 프레임워크만 사용합니다.
머릿속에서만 맴도는 복잡한 고민은 감정에 휩쓸려 객관적 판단이 어렵습니다. Clarity는 그 막연한 생각을 정의·감정·사실·선택지·시나리오로 분해하고, 선택한 사고 프레임워크의 관점으로 다시 비춰 의사결정을 구조화합니다.
앱 미리보기
무엇을 할 수 있나요
AI 사고 구조화
한 번의 입력으로 문제 정의, 감정 분석, 객관적 사실, 선택지, 시나리오, 추천 전략까지 6단계 분석을 생성합니다. OpenAI gpt-4o-mini를 JSON 모드(response_format json_object)로 호출해 항상 동일한 스키마의 구조화된 결과를 받아 단계별로 펼쳐 보여줍니다.
15가지 사고 프레임워크
First Principles, SWOT, Six Thinking Hats, Eisenhower Matrix, Ikigai, 5 Whys, Pre-mortem, Regret Minimization, Second-Order Thinking, Inversion, 10/10/10, Decision Matrix 등 15개 사고법을 선택하면, 백엔드가 프레임워크별 프롬프트를 시스템 프롬프트에 주입해 같은 고민을 다른 관점으로 다시 분석합니다.
감정 분석
입력에서 감정을 유형·강도(1~10)와 함께 추출하고 전체 감정 강도를 산출합니다. joy·sadness·anger·fear·anxiety·excitement·calm·confusion 8개 감정 유형이 각각 브랜드 색상으로 매핑되어 강도 바와 배지로 시각화됩니다.
선택지 비교 · 시나리오 예측
장단점과 리스크 레벨(1~10)이 담긴 2~3개의 선택지 카드를 가로 스크롤로 보여주고, 가장 낮은 리스크의 선택지를 별표로 추천합니다. 여기에 최선·최악·현실 세 갈래 시나리오 카드를 더해 결정을 입체적으로 검토하게 합니다.
음성 입력 · AI 후속 대화
Apple Speech 프레임워크(SFSpeechRecognizer)로 고민을 말로 입력하면 부분 결과까지 실시간 받아쓰기합니다. 분석 이후에는 맥락을 유지한 멀티턴 후속 질문 대화를 이어갈 수 있습니다.
히스토리 & 인사이트 대시보드
지난 분석을 SwiftData에 저장하고, Swift Charts 기반 의사결정 유형 차트(주간 누적 막대)와 여정 타임라인으로 사고 패턴을 돌아봅니다. 카테고리·프레임워크별 사용 흐름을 한눈에 확인할 수 있습니다.
프라이버시 우선 설계
백엔드는 입력 본문을 어디에도 저장하지 않고, 입력 길이·카테고리·프레임워크·응답 시간 같은 버킷화된 메타데이터만 기록합니다. 벤더 SDK 없는 1st-party 애널리틱스는 화이트리스트 이벤트만 다루며, 설정의 옵트아웃 토글로 클라이언트·서버 양쪽에서 수집을 영구 중단합니다.
구독 · 무료 게이팅
StoreKit 2 월/연 구독을 서버 측 영수증 검증(Apple verifyReceipt, 샌드박스 자동 폴백)으로 처리하고, 무료 사용자는 디바이스별 일 10회 분석으로 제한됩니다. 체험 만료 임박(3일·1일) 안내와 구독 갱신·유예 상태 감지도 포함합니다.
어떻게 만들었나요
iOS Client
Backend
AI
Auth & Security
Architecture
Tooling
iOS 클라이언트는 Presentation → Domain ← Data 클린 아키텍처를 따르며, Domain 레이어는 Foundation만 import하는 순수 Swift로 프레임워크 의존성이 없습니다. 백엔드는 routers → services → models 3계층 FastAPI 구조이고, 클라이언트와 서버가 단일 모노레포로 관리됩니다.
- 1
@Observable @MainActor DI 컨테이너가 6개 Repository 프로토콜(AI·Auth·Subscription·Speech·Session·Analytics)을 주입하고, 외부 SPM 의존성 없이 전부 Apple 1st-party 프레임워크만 사용합니다.
- 2
Domain은 AnalyzeThinking·TranscribeSpeech·CheckEntitlements·ComputeInsights 등 UseCase와 Entity로 구성된 순수 Swift 레이어이며, Repository 구현·DTO·APIClient·KeychainStore는 Data 레이어에 격리됩니다.
- 3
인증은 디바이스 ID 기반 HMAC-SHA256 토큰을 Keychain에 보관하고 서버는 constant-time compare로 검증합니다. 토큰 최대 수명은 90일이며, 클라이언트는 401 응답 시 디바이스를 자동 재등록하고 새 토큰으로 요청을 1회 재시도합니다.
- 4
프라이버시 우선 — 백엔드는 분석 본문을 저장하는 컬럼 자체가 없고, analysis_logs에는 입력 길이·카테고리·프레임워크·응답 시간만 남깁니다. 애널리틱스 이벤트의 입력 길이는 <50·50-200·200-500·500+ 버킷으로만 기록됩니다.
- 5
벤더 SDK 없는 1st-party 애널리틱스: 클라이언트가 14종 화이트리스트 이벤트를 SwiftData에 버퍼링(임계치 5건 도달 시 flush, 배치당 최대 50건)했다가 /events 배치 엔드포인트로 전송하며, 서버는 동일한 화이트리스트로 재검증합니다.
- 6
옵트아웃은 analytics_opt_out 테이블에 영구 저장되며, 90일 보존 정책(retention) 적용 대상에서 제외됩니다. 커밋 전 트랜잭션 내에서 옵트아웃 상태를 다시 확인해 경합 조건을 막습니다.
- 7
Freemium 수익화 — StoreKit 2 월/연 구독을 Apple verifyReceipt(샌드박스 자동 폴백) 서버 검증으로 게이팅하고, 인메모리 레이트 리미터가 daily_usage 테이블로 무료 10회/일을 추적하며 구독 만료 시 tier를 자동 강등합니다.
407
iOS 테스트
138
백엔드 테스트
226
Swift 파일
15
사고 프레임워크
0
외부 SPM 의존성
7
지원 언어



