You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SleepTight는 사용자의 수면 패턴을 분석하고 개인화된 수면 코칭을 제공하는 크로스 플랫폼 애플리케이션입니다. 수면 중 발생하는 소리(코골이, 이갈이 등)를 딥러닝 모델로 분석하고, Wear OS 기기와 연동하여 활동량 데이터를 수집합니다. RAG(Retrieval Augmented Generation) 기반의 AI 코칭 시스템을 통해 사용자 맞춤형 수면 개선 가이드를 제공합니다.
1.2 핵심 가치
정확한 수면 분석: 수면 단계 추적 및 수면 품질 점수 산출
AI 사운드 분석: 딥러닝 기반 수면 중 이상 소리 감지 및 분류
개인화된 코칭: RAG 기반 LLM을 활용한 맞춤형 수면 개선 조언
멀티 디바이스 연동: 스마트폰과 Wear OS 기기 간 실시간 데이터 동기화
1.3 주요 특징
다중 플랫폼 지원: Flutter 기반 Android/iOS 앱, Kotlin 기반 Wear OS 앱
비동기 사운드 처리: RabbitMQ를 통한 음성 파일 비동기 분석 파이프라인
Blue-Green 배포: 무중단 배포를 통한 서비스 연속성 보장
GPU 가속 추론: RunPod을 활용한 ML 모델 추론 성능 최적화
분산 저장: AWS S3와 연동한 대용량 오디오 파일 저장
벡터 검색: Pinecone을 활용한 수면 관련 지식 검색
2. 기술 스택
2.1 Mobile Application
기술
버전
용도
Flutter
3.7.2
크로스 플랫폼 모바일 앱 프레임워크
Dart
3.x
메인 개발 언어
Riverpod
2.6.1
상태 관리 (코드 생성 방식)
Go Router
15.1.1
선언적 라우팅
Dio
5.8.0
HTTP 클라이언트
Flutter Sound
9.28.0
오디오 녹음
Just Audio
0.9.46
오디오 재생
Health
12.2.0
iOS HealthKit 연동
Firebase Messaging
15.2.6
푸시 알림
Kakao Flutter SDK
1.9.7
카카오 소셜 로그인
2.2 Wear OS Application
기술
버전
용도
Kotlin
1.9.x
메인 개발 언어
Jetpack Compose
Latest
선언적 UI 프레임워크
Wearable Data Layer API
Latest
스마트폰-워치 간 통신
Health Services
Latest
심박수, 걸음 수 수집
2.3 Backend API Server
기술
버전
용도
NestJS
11.0.1
백엔드 프레임워크
TypeScript
5.7.3
메인 개발 언어
TypeORM
11.0.0
데이터베이스 ORM
PostgreSQL
13
메인 관계형 데이터베이스
Redis
Latest
세션 캐시
RabbitMQ
3.x
메시지 큐 (AI 서비스 연동)
Passport JWT
4.0.1
JWT 인증
Swagger
11.1.6
API 문서화
AWS S3 SDK
3.8.0
파일 스토리지
Firebase Admin
13.4.0
푸시 알림 발송
2.4 AI Coaching Service
기술
버전
용도
FastAPI
0.115.12
AI 서비스 프레임워크
LangChain
0.3.25
LLM 오케스트레이션
OpenAI
1.78.0
GPT 모델 API
Pinecone
6.0.2
벡터 데이터베이스
Tiktoken
0.9.0
토큰 카운팅
2.5 Sound Analysis Service
기술
버전
용도
FastAPI
0.115.12
AI 서비스 프레임워크
PyTorch
2.x
딥러닝 프레임워크
Transformers
4.51.3
사전 학습 모델
Pydub
0.25.1
오디오 파일 처리
Soundfile
0.13.1
오디오 I/O
Pika
1.3.2
RabbitMQ 클라이언트
Boto3
1.38.10
AWS S3 연동
2.6 Infrastructure & DevOps
기술
용도
Docker
컨테이너화
Docker Compose
멀티 컨테이너 오케스트레이션
Nginx
리버스 프록시, 로드 밸런싱
Jenkins
CI/CD 파이프라인
AWS S3
오디오 파일 저장
RunPod
GPU 인스턴스 (ML 추론)
GitLab
버전 관리
3. 시스템 아키텍처
3.1 전체 아키텍처
3.2 수면 분석 시퀀스 다이어그램
4. 주요 기능
4.1 수면 모드
기능
설명
수면 시작/종료
사용자 수면 시간 기록 및 자동 계산
오디오 녹음
수면 중 주기적인 음성 녹음 (청크 단위)
백그라운드 실행
앱이 백그라운드에서도 지속적인 녹음 유지
알람 설정
수면 종료 알람 및 스마트 알람
4.2 수면 분석
기능
설명
수면 단계 분석
깊은 수면, 얕은 수면, REM 수면 단계 구분
수면 품질 점수
수면 효율, 수면 시간 기반 점수 산출
주간/월간 리포트
기간별 수면 패턴 시각화
캘린더 뷰
날짜별 수면 기록 조회
4.3 수면 사운드 분석
기능
설명
이상 소리 감지
AI 기반 코골이, 이갈이, 수면 무호흡 감지
이벤트 클립
감지된 소리 구간 자동 클리핑
클립 재생
감지된 이벤트 오디오 재생
통계 제공
이벤트 유형별 발생 횟수 및 시간대 분석
4.4 AI 수면 코칭
기능
설명
개인화 분석
사용자 수면 패턴 및 활동량 기반 분석
RAG 기반 조언
수면 과학 지식 기반 맞춤형 코칭
실천 가이드
구체적인 수면 개선 행동 제안
히스토리 관리
코칭 기록 저장 및 조회
4.5 Wear OS 연동
기능
설명
활동량 동기화
걸음 수, 소모 칼로리 실시간 수집
심박수 모니터링
수면 중 심박수 데이터 수집
양방향 통신
스마트폰-워치 간 데이터 교환
독립 실행
워치 단독 데이터 조회
4.6 부가 기능
기능
설명
수면 유도 음악
카테고리별 백색소음, 자연 소리 재생
수면 일기
주관적 수면 평가 및 메모 작성
카카오 로그인
소셜 인증을 통한 간편 로그인
푸시 알림
수면 리마인더, 코칭 알림
5. 프로젝트 구조
5.1 전체 디렉토리 구조
SleepTight/
├── client/
│ ├── app/ # Flutter 모바일 앱
│ └── wear/ # Wear OS 앱
│
├── server/
│ ├── api/ # NestJS 백엔드 API
│ ├── ai/ # AI 코칭 서비스 (FastAPI)
│ └── sound-ai/ # 사운드 분석 서비스 (FastAPI)
│
├── cicd/ # CI/CD 설정
├── doc/ # 문서 및 산출물
└── exec/ # 실행 관련 파일
5.2 Flutter App 구조
client/app/
├── lib/
│ ├── core/ # 공통 설정 및 인프라
│ │ ├── config/
│ │ │ ├── app_config.dart # 앱 설정 (API URL 등)
│ │ │ ├── router.dart # Go Router 설정
│ │ │ └── theme/ # 테마 설정
│ │ │ ├── color.dart # 색상 정의
│ │ │ ├── text_styles.dart # 텍스트 스타일
│ │ │ └── theme.dart # 테마 데이터
│ │ ├── network/
│ │ │ ├── dio_client.dart # Dio HTTP 클라이언트
│ │ │ ├── dio_provider.dart # Dio Riverpod Provider
│ │ │ ├── api_interceptor.dart # 요청/응답 인터셉터
│ │ │ └── api_error_handler.dart # 에러 처리
│ │ ├── service/
│ │ │ ├── fcm_messaging_service.dart # FCM 푸시 알림
│ │ │ └── alarm_service.dart # 알람 서비스
│ │ ├── storage/
│ │ │ ├── secure_storage_provider.dart # 보안 저장소 (토큰)
│ │ │ └── shared_preferences_provider.dart # 로컬 설정
│ │ ├── state/navigation/ # 네비게이션 상태
│ │ ├── data/models/ # 공통 모델
│ │ ├── error/ # 예외 클래스
│ │ └── utils/ # 유틸리티 함수
│ │
│ └── features/ # 기능별 모듈 (Clean Architecture)
│ ├── auth/ # 인증 기능
│ │ ├── data/
│ │ │ ├── datasources/ # 로컬/원격 데이터 소스
│ │ │ ├── models/ # DTO (Request/Response)
│ │ │ └── repositories/ # Repository 구현체
│ │ ├── domain/
│ │ │ └── repositories/ # Repository 인터페이스
│ │ └── presentation/
│ │ ├── providers/ # Riverpod Provider
│ │ ├── screens/ # 화면 Widget
│ │ └── widgets/ # UI 컴포넌트
│ │
│ ├── sleep_mode/ # 수면 모드
│ │ ├── data/
│ │ │ ├── datasources/ # 수면 데이터 소스
│ │ │ ├── models/ # 수면 모델
│ │ │ └── services/ # 녹음 서비스
│ │ └── presentation/
│ │ ├── providers/ # 수면 상태 관리
│ │ ├── screens/ # 수면 모드 화면
│ │ └── widgets/ # 수면 UI 컴포넌트
│ │
│ ├── analysis/ # 수면 분석
│ │ ├── data/
│ │ │ ├── datasources/ # 리포트 데이터 소스
│ │ │ ├── models/ # 리포트 모델
│ │ │ └── services/ # 리포트 서비스
│ │ ├── domain/
│ │ │ ├── entity/ # 도메인 엔티티
│ │ │ └── repositories/ # Repository 인터페이스
│ │ └── presentation/
│ │ ├── providers/ # 분석 상태 관리
│ │ ├── screens/ # 분석 화면
│ │ └── widgets/ # 차트, 캘린더 등
│ │
│ ├── coach/ # AI 코칭
│ │ ├── data/ # 코칭 데이터 레이어
│ │ ├── domain/ # 코칭 도메인 레이어
│ │ └── presentation/ # 코칭 UI 레이어
│ │
│ ├── music/ # 수면 음악
│ │ ├── data/ # 음악 데이터 레이어
│ │ ├── domain/ # 음악 도메인 레이어
│ │ └── presentation/
│ │ ├── providers/ # 오디오 컨트롤러
│ │ └── widgets/ # 플레이어 UI
│ │
│ ├── health/ # 헬스 데이터
│ │ ├── models/ # 수면 데이터 모델
│ │ └── services/
│ │ ├── health_service.dart # HealthKit 연동
│ │ └── wear_communication_service.dart # Wear OS 연동
│ │
│ └── user/ # 사용자 프로필
│ ├── data/ # 사용자 데이터 레이어
│ └── presentation/ # 프로필 화면
│
├── assets/
│ ├── images/ # 이미지 리소스
│ ├── icons/ # 아이콘 리소스
│ ├── fonts/ # 폰트 파일 (Pretendard 등)
│ └── sound/ # 오디오 리소스
│
├── pubspec.yaml # Flutter 의존성
└── .env # 환경 변수
5.3 Wear OS App 구조
client/wear/
├── app/src/main/java/com/example/sleeptight/wear/
│ ├── SleepTightApplication.kt # Application 클래스
│ ├── data/
│ │ ├── model/
│ │ │ └── HealthData.kt # 헬스 데이터 모델
│ │ ├── repository/
│ │ │ └── WearableRepository.kt # 데이터 저장소
│ │ ├── service/
│ │ │ └── WearableMessageService.kt # 메시지 서비스
│ │ └── util/
│ │ └── ConnectionChecker.kt # 연결 상태 확인
│ └── presentation/
│ ├── MainActivity.kt # 메인 액티비티
│ ├── SplashActivity.kt # 스플래시 화면
│ ├── viewmodel/
│ │ └── HealthViewModel.kt # 헬스 뷰모델
│ ├── components/
│ │ ├── MainScreen.kt # 메인 화면
│ │ ├── MetricPage.kt # 지표 페이지
│ │ └── chart/
│ │ └── CircularProgressBar.kt # 원형 프로그레스
│ └── theme/
│ └── SleepTightTheme.kt # 앱 테마
│
├── app/src/main/res/ # 리소스 파일
├── build.gradle.kts # Gradle 빌드 설정
└── gradle/libs.versions.toml # 버전 카탈로그
# 프로젝트 디렉토리 이동cd client/app
# 의존성 설치
flutter pub get
# 코드 생성 (Riverpod providers)
flutter packages pub run build_runner build
# 환경 변수 설정
cp .env.example .env
# .env 파일 수정# 개발 모드 실행
flutter run
# Android APK 빌드
flutter build apk --release
# iOS 빌드
flutter build ios --release
8.3 Wear OS 앱 실행
# 프로젝트 디렉토리 이동cd client/wear
# Gradle 빌드
./gradlew build
# 연결된 Wear OS 기기에 설치
./gradlew installDebug
# Release APK 빌드
./gradlew assembleRelease
8.4 백엔드 API 실행
# 프로젝트 디렉토리 이동cd server/api
# 의존성 설치
npm install
# 환경 변수 설정
cp .env.example .env
# .env 파일 수정# 개발 모드 실행
npm run start:dev
# 프로덕션 빌드
npm run build
npm run start:prod
# 테스트 실행
npm test
npm run test:e2e
8.5 AI 코칭 서비스 실행
# 프로젝트 디렉토리 이동cd server/ai/app
# 가상환경 생성 및 활성화
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate# 의존성 설치
pip install -r requirements.txt
# 환경 변수 설정export OPENAI_API_KEY=your_api_key
export PINECONE_API_KEY=your_api_key
# 서버 실행
uvicorn main:app --reload --host 0.0.0.0 --port 8081
8.6 사운드 분석 서비스 실행
# 프로젝트 디렉토리 이동cd server/sound-ai/app
# 가상환경 생성 및 활성화
python -m venv venv
source venv/bin/activate
# 의존성 설치
pip install -r requirements.txt
# 환경 변수 설정export AWS_ACCESS_KEY_ID=your_key
export AWS_SECRET_ACCESS_KEY=your_secret
export RABBITMQ_URL=amqp://localhost:5672
# 서버 실행
uvicorn main:app --reload --host 0.0.0.0 --port 8082
# cicd 디렉토리 이동cd cicd
# Docker 네트워크 생성
docker network create app-network
# 인프라 서비스 실행 (PostgreSQL, Redis, RabbitMQ)
docker-compose -f docker-compose-infra.yml up -d
# 상태 확인
docker-compose -f docker-compose-infra.yml ps
9.2 애플리케이션 배포
# 애플리케이션 서비스 실행
docker-compose -f docker-compose.yml up -d
# 로그 확인
docker-compose -f docker-compose.yml logs -f
9.3 Blue-Green 배포
배포 프로세스:
1. Green 인스턴스에 새 버전 배포
2. 헬스 체크 통과 확인
3. Nginx 설정 변경 (Blue → Green)
4. Blue 인스턴스 대기 상태로 전환