Gemma 4 기반 ADHD 앱 Vestige: 당신의 뇌를 추적합니다.
Gemma 4를 활용하여 사용자의 일상 행동 패턴을 분석하고, ADHD 환자에게 유용한 정보를 제공하는 안드로이드 앱 Vestige 개발
LiteRT-LM 런타임을 사용하여 오디오 입력, 텍스트 변환, 3가지 렌즈 기반의 패턴 추출을 로컬 환경(Local Environment)에서 처리
데이터 미저장 정책(Zero-Retention Policy) 및 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 개인 정보 보호를 강화하고, CI(Continuous Integration) 환경에서 개인 정보 보호 검증 자동화
Jetpack Compose 및 Material 3를 사용하여 UI를 구성했으나, UI 관련 ADR(Architecture Decision Record) 설계 미흡으로 개발 지연 발생
향후 Agentic tool-calling을 통해 패턴 감지 레이어를 개선하고, 경계선상에 있는 항목에 대한 프롬프트(Prompt)를 개선할 예정
Gemma 4를 활용한 로컬 기반의 패턴 분석 아키텍처
Vestige는 Gemma 4 E4B 모델을 사용하여 사용자의 음성 입력을 3개의 렌즈(Literal, Inferential, Skeptical)로 분석하고, 패턴을 추출한다.
LiteRT-LM 런타임을 통해 오디오 입력, 텍스트 변환, 3가지 렌즈 기반의 패턴 추출을 로컬 환경(Local Environment)에서 처리하여 개인 정보 보호를 강화
각 렌즈는 서로 다른 방식으로 텍스트를 해석하며, ConvergenceResolver를 통해 3개의 렌즈 결과를 종합하여 최종 결론 도출
3-lens approach는 다양한 해석을 시도하고, 모순을 감지하여 분석의 정확도를 높이는 데 기여한다.
개인 정보 보호를 위한 설계 및 구현 전략
Vestige는 데이터 미저장 정책(Zero-Retention Policy)을 기반으로 설계되어, 사용자의 음성 데이터가 외부로 전송되지 않도록 한다.
NetworkGate.kt를 통해 모델 다운로드 외 모든 네트워크 연결을 차단하고, 데이터 격리 아키텍처(Data Isolation Architecture)를 구현
verifyNoTelemetry Gradle task를 통해 빌드 시 개인 정보 보호 관련 코드를 검증하고, CI 환경에서 자동화된 검증 수행
Polyform Shield 1.0.0 라이선스를 사용하여 소스 코드의 무단 사용 및 배포를 방지하고, 개인 정보 보호에 대한 개발자의 책임을 강조
Jetpack Compose 기반 UI 개발 과정에서의 경험
본문에서는 Jetpack Compose와 Material 3를 처음 사용하면서 겪은 어려움과 교훈을 공유한다.
UI 관련 ADR(Architecture Decision Record) 설계를 늦게 시작하여, 개발 초기에 UI 관련 테스트 부족으로 인한 문제 발생
UI 개발 경험 부족으로 인해, UI 관련 ADR을 4번째로 배치하는 실수를 범함
1,200개 이상의 JVM @Test 메서드와 12개의 instrumented SmokeTest를 통해 테스트를 강화하고, Lefthook을 사용하여 코드 품질을 유지
성능 최적화를 위한 LiteRT-LM 런타임 선택
Vestige는 LiteRT-LM 런타임을 선택하여, 로컬 환경에서 Gemma 4 모델을 실행하고 있다.
E4B 모델을 선택하여, 네이티브 오디오 입력, 구조화된 추출, 3-lens resolver를 위한 충분한 성능 확보
E2B 모델 대비 품질과 성능의 균형을 맞추어, 사용자 경험을 향상
CPU 기반 오디오 처리를 통해, GPU 사용에 따른 문제점을 해결하고, 안정적인 성능을 유지
테스트 주도 개발(TDD) 및 CI/CD 파이프라인 구축
Vestige는 테스트 주도 개발(TDD)을 통해 코드 품질을 높이고, CI/CD 파이프라인을 구축하여 개발 생산성을 향상시켰다.
1,200개 이상의 JVM @Test 메서드를 통해 코드의 정확성을 검증하고, JUnit 5 Jupiter를 사용하여 테스트 코드 작성
GitHub Actions를 사용하여 CI 파이프라인을 구축하고, CodeQL, Sonar, Kover, commitlint, verifyNoTelemetry를 통해 코드 품질 및 개인 정보 보호 검증 자동화
Lefthook을 사용하여 pre-commit 및 pre-push 단계에서 코드 스타일, 보안 취약점, 커밋 메시지 등을 검사하여 코드 품질을 유지