POPPET : 노약자를 위한 AI 말동무 서비스
혼자 사는 노약자를 위한 말동무 서비스로, 대화 내역을 보호자에게 주기적으로 전달할 수 있는 Flutter 기반 모바일 서비스입니다.
플랫폼 · 앱담당 역할 · 프론트엔드
작성자 김준하
작성일수정일
프로젝트 개요
POPPET은 노약자가 하루 동안 있었던 일을 음성으로 편하게 이야기하면 음성으로 응답하고, 보호자와의 정서적 연결을 돕는 모바일 서비스입니다. 2025 GDG Solution Challenge에 참여했습니다.
- 구분: 팀 프로젝트 (프론트엔드 담당)
- 기간: 2025.05
- 담당 범위: Flutter 모바일 앱 프론트엔드 전반
- 팀 구성: 프론트엔드 1명, 백엔드 2명, 디자이너 1명
- 기술 스택: Flutter, Dart, Riverpod, GoRouter, Dio, Retrofit, Secure Storage
- 주요 성과: 2025 GDG Solution Challenge 참가
서버의 음성 처리와 응답 생성은 백엔드에서 담당했으며, 저는 사용자가 음성 대화를 시작하고 응답을 확인하기까지의 모바일 화면, 상태 관리, API 연동을 구현했습니다.
담당 기능
- 음성 대화: 마이크 권한 요청, 최대 58초 녹음, 음성 파일 업로드, 서버 응답 음성 재생
- 인증: 카카오·Apple·Google 로그인, Access Token·Refresh Token 보관, 자동 로그인
- 보호자 설정: 보호자 이메일 최대 5개 등록·삭제, 이메일 유효성 검사, 발송 주기 설정
- 화면 흐름: Splash, 온보딩, 로그인, 홈, 마이페이지, 보호자 설정 화면
- 사용자 피드백: 녹음·업로드·응답 대기·재생 상태에 따른 안내 문구, 캐릭터, 로딩 애니메이션
개발 기록
1. 음성 대화 중심의 사용자 경험
노약자가 별도의 학습 없이 음성 대화를 시작하고 응답을 확인할 수 있도록 마이크 버튼을 중심으로 화면을 단순화했습니다. 녹음·업로드·응답 대기·재생 상태를 구분하고, 상태별 안내 문구와 캐릭터·로딩 UI를 제공해 현재 처리 단계를 쉽게 파악할 수 있도록 구성했습니다.
2. 인증과 클라이언트 상태 관리
Riverpod으로 인증·음성 녹음·보호자 설정 등 기능별 상태를 분리하고, GoRouter로 Splash부터 온보딩·로그인·홈·마이페이지까지의 화면 흐름을 구성했습니다. 인증 토큰은 Secure Storage에 저장하고 Dio·Retrofit으로 인증·대화·이메일 API를 연동했습니다.
3. 보호자 연결 기능
보호자 이메일 등록·삭제와 대화 내역 발송 주기 설정을 구현했습니다. 이메일 형식과 중복 여부를 검증하고, 네트워크 오류가 발생해도 설정 상태를 확인할 수 있도록 로컬 설정값을 함께 관리했습니다.
