JunSoft
DreamTune AI
헬스 · 웰니스

DreamTune AI

수면 추적 · 스마트 알람 · 코칭

App Store에서 보기
개요

DreamTune AI는 HealthKit의 수면·심박·HRV·호흡·SpO2 등 8종 지표를 읽어 0~100 수면 점수를 산출하고, 실시간 심박에 반응하는 사운드스케이프와 스마트 알람으로 더 나은 수면을 돕는 iOS 앱입니다. 모든 분석은 결정적 순수 함수로 온디바이스에서 처리하며, Lock Screen 위젯·Apple Watch 컴플리케이션·Live Activity까지 확장됩니다.

풀고자 한 문제

사람들은 수면 데이터를 가지고 있어도 그것이 무엇을 의미하는지, 무엇을 바꿔야 하는지 알기 어렵습니다. DreamTune AI는 8요소 점수·수면 부채·패턴 예측·CBT-I 코칭으로 데이터를 실행 가능한 수면 루틴으로 바꿉니다.

스크린샷

앱 미리보기

  • DreamTune AI 스크린샷 1
  • DreamTune AI 스크린샷 2
  • DreamTune AI 스크린샷 3
  • DreamTune AI 스크린샷 4
핵심 기능

무엇을 할 수 있나요

01

8요소 수면 점수

수면 시간(0.22)·효율(0.18)·깊은수면(0.18)·REM(0.13)에 더해 심박(0.09)·HRV(0.08)·호흡수(0.06)·SpO2(0.06)까지 8개 요소를 가중 합산해 0~100 점수를 계산합니다. 생체 데이터가 없으면 가중치를 자동 재분배하며, 입력만으로 결정적인 순수 함수로 구현됐습니다.

02

생체 반응형 사운드스케이프

AVAudioEngine 멀티 레이어 믹서가 파일 음원과 절차적 노드를 동시에 재생하고, HKAnchoredObjectQuery로 받은 실시간 심박을 active(75+)·relaxing(65~75)·sleeping(55~65)·deep(<55) 4단계로 분류해 레이어 음량을 부드럽게 전환합니다.

03

절차적 사운드 합성 엔진

번들 음원이 없어도 끊기지 않도록, AVAudioSourceNode로 핑크·브라운(deep/warm 변형)·화이트 등 5종 노이즈와 비·파도·숲·바람 4종 자연음을 실시간 합성합니다. 파도 위상·빗방울·바람 LFO 등 상태 변수로 자연스러운 질감을 만듭니다.

04

스마트 알람 & 윈드다운

최적 기상 시각 기준 30분 창에서 깨우는 스마트 알람과, 취침 60분 전 시작되는 윈드다운 루틴(4-7-8 호흡 포함)을 UNUserNotifications로 스케줄링합니다. 스케줄링은 actor NotificationManager가 담당합니다.

05

수면 부채 & 패턴 예측

목표 수면 시간 대비 누적 부채를 일별로 계산해 회복 일수·야간 추가 수면·낮잠 추천을 담은 보상 계획을 제시하고, 최근 14일 기록을 분석해 최적 취침·기상 시각과 예상 점수를 규칙 기반으로 예측합니다. Swift Charts로 추세를 시각화합니다.

06

CBT-I 코칭 프로그램

주차별 세션과 수면 제한 창(시작/종료 시각)을 관리하는 CBT-I(불면증 인지행동치료) 프로그램을 SwiftData @Model로 추적하고, 세션 완료율로 진행률을 산출합니다. 스트릭과 7·30·100·365일 배지로 꾸준함을 유도합니다.

07

Apple Watch · 위젯 · Live Activity

watchOS 앱과 수면 점수 컴플리케이션, Lock Screen 게이지 위젯(circular·rectangular·inline), 취침 중 경과 시간·심박·재생 상태를 보여주는 ActivityKit Live Activity를 제공합니다. App Group으로 데이터를 공유하고 WatchConnectivity로 동기화합니다.

08

Siri 단축어 연동

AppIntents로 "취침 루틴 시작"·"수면 점수 확인"·"사운드 정지" 3개의 App Shortcut을 노출해, 앱을 열지 않고도 Siri와 단축어 앱에서 핵심 동작을 실행할 수 있습니다.

기술 스택

어떻게 만들었나요

Language

Swift 6.0Strict Concurrency (complete)

UI

SwiftUISwift Charts

Persistence

SwiftData (@Model)App GroupUserDefaults

Health

HealthKitHKAnchoredObjectQuery

Audio

AVFoundationAVAudioEngineAVAudioSourceNode

System

WidgetKitActivityKitAppIntentsUserNotificationsWatchConnectivity

Commerce

StoreKit 2

Platforms

iOS 17+watchOS 10+
아키텍처

서드파티 의존성 없이 온디바이스로 동작하는 멀티 타겟 SwiftUI 앱입니다. Swift 6 strict concurrency(complete)를 적용해 서비스는 actor, ViewModel은 @MainActor @Observable로 분리하고, 분석 로직은 결정적 순수 함수로 구현했습니다.

  1. 1

    동시성 모델 분리: HealthKitService·NotificationManager 등 I/O 서비스는 actor로 스레드 안전성을 보장하고, ViewModel은 @MainActor @Observable로 작성해 .environment()로 주입한다.

  2. 2

    결정적 순수 함수 분석 엔진: SleepScoreCalculator·SleepDebtCalculator·SleepPatternPredictor·SleepStreakCalculator를 입출력만으로 결정적인 정적 순수 함수로 작성해 테스트 가능성을 극대화했다.

  3. 3

    적응형 점수 가중치: 8개 요소에 고정 가중치를 두되, 호흡·SpO2 등 생체 데이터가 누락되면 잔여 가중치를 재분배해 결측에도 점수가 왜곡되지 않게 한다.

  4. 4

    실시간 오디오 그래프: SoundscapeEngine이 AVAudioEngine 위에 파일 PlayerNode와 절차적 SourceNode를 혼합한 레이어 그래프를 구성하고, 심박 단계 전환 시 레이어 음량을 점진적으로 보간한다.

  5. 5

    멀티 서피스 확장: 메인 앱 외에 Lock Screen 위젯(WidgetKit), Live Activity(ActivityKit), Apple Watch 앱·컴플리케이션을 App Group으로 데이터 공유하고 WatchConnectivity로 동기화한다.

  6. 6

    디자인 토큰 시스템: DTColors·DTTypography·DTSpacing 토큰으로 다크 수면 테마를 일관되게 유지하고, 원시 값 대신 토큰만 사용하도록 컨벤션을 강제한다.

  7. 7

    XcodeGen 기반 다중 타겟: project.yml을 단일 진실 원천으로 iOS 앱·Widget 확장·watchOS 앱·테스트 타겟을 선언적으로 관리하고, AppIntents로 Siri/단축어 진입점을 제공한다.

지표

108

Swift 파일

40

단위/UI 테스트

8

HealthKit 지표

8

수면 점수 요소

iPhone · Watch · Widget · Live Activity

지원 서피스