Flutter 개발

Flutter 배송 추적 시스템 실전 구축 시리즈 가이드

Supabase 기반 배송 기사 앱 구축 로드맵

John Doe
2025년 10월 8일
15분 읽기
60

시리즈 개요

이 시리즈는 이론적인 아키텍처 설계를 실제 동작하는 애플리케이션으로 구현하는 과정을 다룹니다. Supabase를 백엔드로 사용하여 서버 구축 없이 빠르게 개발하고, 배송 기사가 실제 업무에 사용할 수 있는 수준의 앱을 완성합니다. 주문자 앱은 제외하고 배송 기사 앱에만 집중하여, 핵심 기능인 위치 추적과 배송 관리를 완벽하게 구현합니다.
시리즈 특징설명
구현 범위배송 기사 앱만 구축 (주문자 앱 제외)
백엔드Supabase (PostgreSQL, Realtime, Storage, Auth)
핵심 기능실시간 위치 추적, 배송 목록 관리, 상태 업데이트
난이도중급 이상 (Platform Channels, 백그라운드 서비스 포함)
예상 시리즈총 8편 (기초 → 고급 → 최적화)

시리즈 전체 구성

1편: 프로젝트 기초 설정과 Supabase 구성

시리즈의 첫 단계로 개발 환경을 구축하고 Supabase 프로젝트를 설정합니다. Flutter 프로젝트를 생성하고 필요한 의존성을 추가한 후, Supabase 콘솔에서 데이터베이스 테이블을 설계합니다. 배송 기사가 사용할 핵심 테이블 구조를 정의하고, Row Level Security 정책을 설정하여 각 기사가 자신의 데이터만 접근하도록 보안을 구성합니다.
다룰 내용세부 항목
환경 설정Flutter 프로젝트 생성, 의존성 추가, 폴더 구조
Supabase 테이블riders, deliveries, delivery_locations, delivery_status_history
인증 설정Supabase Auth 연동, 이메일 로그인, 세션 관리
기본 UI로그인 화면, 메인 레이아웃, 네비게이션 구조

2편: 배송 목록 조회와 상태 관리

배송 기사가 할당받은 배송 건을 조회하고 관리하는 기능을 구현합니다. Supabase에서 배송 목록을 가져와 화면에 표시하고, 각 배송의 상태를 업데이트할 수 있도록 합니다. Riverpod을 사용하여 상태를 관리하고, Supabase Realtime을 활용하여 새로운 배송이 할당되면 자동으로 목록이 업데이트되도록 구현합니다.
다룰 내용세부 항목
데이터 조회Supabase 쿼리, 필터링, 정렬
상태 관리Riverpod Provider 구성, AsyncValue 처리
Realtime 연동Supabase Realtime 구독, 자동 UI 업데이트
UI 구현배송 목록 화면, 상세 정보, 상태 변경 버튼

3편: 네이티브 위치 수집 구현 (Android)

Android에서 백그라운드 위치 수집을 구현합니다. Foreground Service를 생성하여 앱이 백그라운드에 있어도 위치를 계속 수집하고, FusedLocationProviderClient를 사용하여 배터리 효율적인 위치 추적을 구현합니다. Platform Channels를 설정하여 네이티브에서 수집한 위치를 Flutter로 전달하는 구조를 만듭니다.
다룰 내용세부 항목
Foreground Service서비스 생성, 알림 표시, 생명주기 관리
위치 수집FusedLocationProviderClient, LocationRequest 설정
권한 처리위치 권한, 백그라운드 위치 권한 요청
MethodChannel위치 추적 시작/중지 명령 전달
EventChannel위치 데이터 스트리밍

4편: 네이티브 위치 수집 구현 (iOS)

iOS에서 백그라운드 위치 수집을 구현합니다. CLLocationManager를 사용하여 위치를 추적하고, Background Modes를 활성화하여 백그라운드 동작을 보장합니다. Android와 동일한 Platform Channels 인터페이스를 사용하여 플랫폼 간 일관된 API를 제공하며, iOS 특유의 권한 처리와 제약사항을 다룹니다.
다룰 내용세부 항목
CLLocationManager위치 관리자 설정, Delegate 구현
Background ModesInfo.plist 설정, Background Location Updates
권한 처리위치 권한, Always 권한 요청 흐름
배터리 최적화정확도 조절, 거리 필터, Significant Location Changes
플랫폼 통합Android와 동일한 채널 인터페이스

5편: Flutter와 Supabase 위치 동기화

네이티브에서 수집한 위치를 Flutter로 받아 Supabase에 저장합니다. EventChannel로 위치 스트림을 구독하고, 배치 처리를 통해 효율적으로 서버에 전송합니다. 네트워크 오류 발생 시 로컬 데이터베이스에 저장했다가 재시도하는 로직을 구현하고, 배송 상태에 따라 위치 수집 주기를 동적으로 조절합니다.
다룰 내용세부 항목
스트림 처리EventChannel 구독, 위치 데이터 파싱
배치 전송여러 위치를 묶어서 Supabase에 저장
오프라인 대응Drift (SQLite) 로컬 저장, 자동 동기화
동적 주기 조절배송 상태별 위치 수집 빈도 변경
에러 처리재시도 로직, 지수 백오프

6편: 배송 상태 관리와 워크플로우

배송의 전체 생명주기를 관리하는 워크플로우를 구현합니다. 배송 시작, 픽업 완료, 배송 중, 배송 완료 등 각 단계를 상태 머신으로 관리하고, 상태 변경 시 Supabase에 히스토리를 기록합니다. 낙관적 업데이트를 적용하여 즉각적인 UI 반응을 제공하고, 서버 동기화 실패 시 롤백하는 로직을 구현합니다.
다룰 내용세부 항목
상태 머신배송 상태 정의, 유효한 전이 규칙
상태 업데이트Supabase RPC 함수, 트랜잭션 처리
히스토리 기록상태 변경 이력 저장, 타임스탬프 관리
낙관적 업데이트즉시 UI 변경, 서버 실패 시 롤백
알림배송 시작/완료 시 관리자에게 알림

7편: 지도 통합과 경로 표시

Google Maps를 통합하여 배송 경로를 시각화합니다. 현재 위치를 실시간으로 지도에 표시하고, 배송지까지의 경로를 그립니다. 수집된 위치 히스토리를 폴리라인으로 표시하여 이동 경로를 보여주고, 배송지 마커와 거리 정보를 함께 제공합니다. 지도 성능 최적화를 위해 마커와 폴리라인을 효율적으로 관리하는 방법을 다룹니다.
다룰 내용세부 항목
Google Mapsgoogle_maps_flutter 패키지, API 키 설정
실시간 위치현재 위치 마커, 부드러운 이동 애니메이션
경로 표시Polyline으로 이동 경로 그리기
배송지 마커목적지 표시, 거리 계산
성능 최적화마커 클러스터링, 폴리라인 간소화

8편: 성능 최적화와 배포

앱의 성능을 측정하고 최적화합니다. 배터리 소모를 분석하여 위치 수집 전략을 조정하고, 메모리 누수를 찾아 수정합니다. 네트워크 사용량을 줄이기 위한 압축과 캐싱 전략을 적용하고, 앱 크기를 최적화합니다. 마지막으로 Play Store와 App Store 배포를 위한 준비 과정과 주의사항을 다룹니다.
다룰 내용세부 항목
배터리 측정Android Profiler, Xcode Instruments 사용
메모리 최적화DevTools로 누수 탐지, 스트림 정리
네트워크 최적화gzip 압축, 이미지 최적화, 캐싱
앱 크기 감소코드 난독화, 미사용 리소스 제거
배포 준비서명, 권한 설명, 스토어 메타데이터

시리즈 연결 구조

핵심 주제이전 편과의 연결다음 편 준비
1편프로젝트 초기 설정없음 (시작점)테이블 구조가 2편의 기반
2편배송 목록 관리1편의 테이블 사용상태 관리가 6편의 기반
3편Android 위치 수집독립적 (네이티브)5편에서 Flutter와 연결
4편iOS 위치 수집3편과 동일 인터페이스5편에서 Flutter와 연결
5편위치 동기화3, 4편의 채널 활용6편에서 상태와 통합
6편상태 워크플로우2편의 상태 관리 확장7편에서 지도와 결합
7편지도 통합5편의 위치 데이터 사용8편에서 성능 검증
8편최적화와 배포전체 시리즈 통합완결

기술 스택 정리

영역기술사용 목적
Flutter3.24+ (최신 안정 버전)크로스 플랫폼 개발
상태 관리Riverpod 2.5+상태 관리, 의존성 주입
백엔드Supabase (PostgreSQL, Realtime)데이터 저장, 실시간 업데이트
로컬 DBDrift (SQLite)오프라인 데이터 저장
지도google_maps_flutter위치 시각화
Android 위치FusedLocationProviderClient효율적인 위치 수집
iOS 위치CLLocationManageriOS 위치 추적
Platform ChannelsMethodChannel, EventChannel네이티브-Flutter 통신

학습 전제 조건

이 시리즈는 중급 이상의 Flutter 개발자를 대상으로 합니다. 시작하기 전에 다음 내용을 이해하고 있어야 원활하게 따라올 수 있습니다.
필수 선행 지식수준
Flutter 기본위젯, 상태, 비동기 프로그래밍
Dart 언어클래스, Future, Stream, async/await
상태 관리Provider 또는 Riverpod 기초
REST APIHTTP 통신, JSON 파싱
네이티브 기초Android (Kotlin/Java), iOS (Swift) 읽기 수준
Git버전 관리 기본 명령어

시리즈 완료 후 성과

이 시리즈를 완료하면 실무에 바로 적용할 수 있는 배송 추적 앱을 구축할 수 있습니다. Platform Channels를 통한 네이티브 통합 능력, Supabase를 활용한 백엔드 연동 경험, 백그라운드 위치 추적 구현 능력을 갖추게 됩니다. 또한 성능 최적화와 배포 과정까지 경험하여 엔터프라이즈급 앱 개발의 전체 흐름을 이해하게 됩니다.
성과구체적인 역량
완성된 앱실제 배송 업무에 사용 가능한 기사용 앱
네이티브 통합Android/iOS 백그라운드 위치 수집 구현
Platform ChannelsMethodChannel, EventChannel 실전 활용
Supabase 활용Auth, Database, Realtime 전체 기능 사용
성능 최적화배터리, 메모리, 네트워크 최적화 경험
배포 경험Play Store, App Store 배포 준비

마무리

이 시리즈는 이론에서 실전으로 나아가는 완전한 학습 경로를 제공합니다. 앞서 작성된 아키텍처 가이드에서 제시한 설계 원칙을 실제 코드로 구현하면서, 엔터프라이즈급 앱 개발의 모든 단계를 경험하게 됩니다. 각 편은 독립적으로 학습할 수 있지만, 순서대로 따라가면 자연스럽게 완성된 앱을 만들 수 있도록 구성했습니다. 시리즈를 통해 배운 내용은 배송 앱뿐만 아니라 위치 기반 서비스, 실시간 추적이 필요한 모든 앱에 적용할 수 있습니다.
#Flutter
#Supabase
#Platform Channel
#Series
#Delivery App