AI/ML Project
냥냥편지
스마트폰 행동 데이터 기반 정신 건강 모니터링 서비스
Tech Skills
ML Pipeline
BGM Pipeline
Critical Agent
Audio Guardrail
Project Summary
이 프로젝트의 문제 배경과 해결 방식, 핵심 아이디어를 간단히 정리했습니다.
Why We Need
48.9%
1인 가구가 평소 외로움을 느낀다고 응답
2024 국가데이터처
17.2%
15년 장기 추적 연구에서 사회적 고립이 조기 사망 위험과 직접 연결됨을 확인
질병관리청 · 국립보건연구원, 224만명 대상
What Exists Today
기본 건강 앱
감정 기록과 체크인을 중심으로 동작하는 서비스
한계
감정 상태를 직접 입력해야 함
스마트워치
웨어러블 센서로 건강 상태를 추적하는 방식
한계
별도 기기 필요 / 보급률 33%
중국 앱: 죽었니?
현재 중국 앱스토어 상위권의 안부 확인형 서비스
한계
Check-in 버튼을 당사자가 직접 눌러야 함
사회적 고립은 단순한 감정 문제가 아니라, 조기 사망 위험 증가와 연결된 건강 위험 요인
BUT 현존하는 서비스는 당사자가 스스로 인지해야만 작동하는 구조
↓
Our Approach
01
행동 데이터 수집
화면 켜짐·꺼짐, 앱 사용, 이동 패턴, 알림 반응 등의 스마트폰 사용 로그를 수집하고 일별 단위로 정리해 상태 변화의 간접 신호로 사용
02
상태 변화 해석
개인 베이스라인과 이상탐지 모델을 기반으로 일상 패턴의 변화를 해석하고 상태를 판정
03
관계 기반 연결
앱 상태 표시, BGM, 친구 알림, Critical 에이전트 등 다양한 방식으로 서로의 상태를 자연스럽게 공유
System Architecture
AWS Seoul Region 기반, EKS 멀티 AZ 구성 위에 데이터 수집 · 서비스 처리 · ML 학습이 통합된 구조입니다.
Data Collection
Android -> API Gateway -> Firehose -> S3 Bronze/Silver/Gold
수집과 저장 분리로 클라이언트 부하 절감, 3단계 정제로 ML 입력 데이터 품질 보장
EKS Service Layer
ALB -> Ingress -> UserPod / Inference Pod / Critical Agent / Msg Pod
기능별 Pod 분리로 장애 전파 차단, AZ1·AZ2 이중화 + Pod Auto Scaling으로 트래픽 급증 대응
ML Pipeline
SageMaker Training(주 1회) -> S3(model) -> EKS CronJob 배치 추론(매일)
학습과 추론 완전 분리로 재학습 중 서비스 무영향, MLflow로 학습 이력 및 재현성 관리
CI/CD
GitHub Actions -> ECR -> EKS
브랜치 기반 dev/prod 환경 분리, Rolling Update로 배포 중 다운타임 없음
My Contributions
ML Engineer로서 담당한 4개 파트입니다.
고양이 상태변화 ML
My PartML Architecture
Daily Status 처리 파이프라인
01
ETL Data
스마트폰 행동 로그
1분 주기로 수집된 사용자 로그를 일별로 수집 및 정제
02
Feature Eng.
56개 피처
행동 변화를 설명할 수 있는 5개 그룹 피처를 일 단위로 집계
03
Individual Baseline
개인 기준선 사용
사용자마다 사용 패턴 분포가 크게 달라, 전역 기준이 아닌 개인별 비교
06
Cat State
7종 상태 분류
이상치 점수와 Z-score 점수를 결합하여 고양이 캐릭터 상태로 변환
05
Context 보정
과도한 위험도 억제
여행/수집불완전/하루치 스파이크 상황에서 과추정을 방지
04
이상 탐지
이상치 정도 정량화
Z-score
평균 편차 측정
Isolation Forest
Anomaly Score (0-1)
오늘의 이상치 정도를 정량화해 위험도를 일관된 스코어로 계산
01
ETL Data
스마트폰 행동 로그
1분 주기로 수집된 사용자 로그를 일별로 수집 및 정제
02
Feature Eng.
56개 피처
행동 변화를 설명할 수 있는 5개 그룹 피처를 일 단위로 집계
03
Individual Baseline
개인 기준선 사용
사용자마다 사용 패턴 분포가 크게 달라, 전역 기준이 아닌 개인별 비교
04
이상 탐지
이상치 정도 정량화
Z-score
평균 편차 측정
Isolation Forest
Anomaly Score (0-1)
오늘의 이상치 정도를 정량화해 위험도를 일관된 스코어로 계산
05
Context 보정
과도한 위험도 억제
여행/수집불완전/하루치 스파이크 상황에서 과추정을 방지
06
Cat State
7종 상태 분류
이상치 점수와 Z-score 점수를 결합하여 고양이 캐릭터 상태로 변환
Cat State
오디오 가드레일
My Part01
입력 검증
업로드된 파일을 16kHz mono로 표준화하고, Onset 검출로 발화 시작점을 찾아 최대 4초를 추출합니다. 무음·클리핑·0.3초 미만은 이 단계에서 차단됩니다.
02
텍스트 판정
AWS Transcribe로 변환된 텍스트를 3단계로 판정합니다. 냐옹 패턴이면 즉시 통과, 문장으로 감지되면 즉시 차단하고, 애매한 경우 Gemini Flash가 최종 판정합니다.
03
파일 저장
판정을 통과한 파일은 -20dBFS로 볼륨을 정규화하고 무음을 트리밍한 뒤 S3에 최종 저장합니다.
개인화 BGM 파이프라인
My Part01
BGM 생성
EventBridge가 매주 일요일 22시에 Orchestrator Lambda를 트리거하면 Worker Lambda가 상태별로 Suno AI에 곡 생성을 요청합니다. 생성된 곡은 Kits AI로 보컬과 반주를 분리해 S3에 저장됩니다.
02
개인화
추론 Pod가 SQS에 메시지를 전송하면 Lambda가 DynamoDB에서 사용자 등록 음성(enroll.wav)을 조회하고 SageMaker Processing Job을 실행합니다. Job 내부에서 Seed-VC가 보컬을 사용자 목소리로 변환하고, 반주와 믹싱한 뒤 S3에 저장해 User API로 URL을 전달합니다.
Critical 에이전트 — 최적 구조자 선정
My PartCritical Agent 전체 흐름
36시간 이상 로그가 없는 사용자가 감지되면 친밀도·거리·활동 확률을 종합해 Bedrock이 알림을 보낼 친구 순위를 결정합니다.
활동 확률 계산 Lambda
Critical 발생 시각을 기준으로 Athena에서 최근 7일 동일 시간대 활동 로그를 조회합니다. 평소 해당 시간대에 얼마나 자주 활동했는지를 바탕으로 친구별 awake_prob을 산출하고 Agent에 반환합니다.
What I Learned
01
다양한 AI 기술을 서비스 수준으로 통합하기
음성 변환, 콘텐츠 검증, 우선순위 판단까지 서로 다른 AI 기술을 하나의 서비스 안에서 각자의 역할에 맞게 연결했습니다.
02
AWS 서비스 조합으로 프로덕션 아키텍처 설계하기
SageMaker · EKS · Lambda · Athena 등 다양한 서비스를 목적에 맞게 선택하고 연결하며 클라우드 기반 서비스 설계 전반을 경험했습니다.