---
title: "POPPET : 노약자를 위한 AI 말동무 서비스"
date: "2025-05-10"
lastModified: "2026-07-20"
category: "프론트엔드 / Flutter 크로스 플랫폼 (팀 프로젝트)"
projectCategory: "AI 서비스"
platforms: ["app"]
role: "frontend"
tags: ["Flutter","Dart"]
cover: "/images/projects/poppet.png"
coverAlt: "POPPET 음성 기반 가족 소통 앱 로고"
coverFit: "contain"
githubUrl: "https://github.com/gdsc-ssu/poppet-app"
description: "혼자 사는 노약자를 위한 말동무 서비스로, 대화 내역을 보호자에게 주기적으로 전달할 수 있는 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. 보호자 연결 기능

보호자 이메일 등록·삭제와 대화 내역 발송 주기 설정을 구현했습니다. 이메일 형식과 중복 여부를 검증하고, 네트워크 오류가 발생해도 설정 상태를 확인할 수 있도록 로컬 설정값을 함께 관리했습니다.
