Duke Jeon
Flutter developer who ships.
Flutter를 주력으로 물류·헬스케어·무인 점포·공공 교통 서비스를 개발·운영해 온 경력 3년 9개월의 모바일 개발자입니다.
백엔드 개발자와 앱을 공동 기획하고, 설계부터 개발·검증·Android·iOS 스토어 출시까지 단독으로 담당한 경험이 있습니다. Java·Swift 기반 네이티브 앱의 유지보수도 수행했습니다. 사용자의 조작 부담과 실제 운영 환경을 고려해 기능을 설계하고, 위치 데이터 처리·데이터 동기화·차트 시각화·운영 안정성 문제를 개선해 왔습니다.
- 앱 기획·출시기사·보호자용 Flutter 앱 공동 기획 및 단독 개발, 실주행 QA와 Android·iOS 출시
- 사용성과 위치 데이터 처리주행 중 수동 입력을 줄이는 자동 승하차 구현, 실제 이동을 파악하기 위한 GPS 데이터 처리 방식 개선
- 데이터 보존·상태 복구스캔 히스토리와 서버 처리 상태 분리, 송장 전송 재시도, WebSocket 재연결 시 예약·타이머 복구
- 운영 안정화Java·Swift 기반 앱 16개 유지보수 및 성공버스 Android 일평균 크래시 200.2건→3.3건 감소
- 유지보수 구조 개선개별 관리로 공통 코드가 달라진 화이트라벨 프로젝트 8개→2개 통합
- 차트 개발·최적화fl_chart를 포크해 제스처·좌표·렌더링 처리를 수정하고, 혈당·인슐린 차트 동기화와 확대·이동 성능 개선
| 3Y 9M | / Career |
|---|---|
| −98.3% | / Daily crashes |
| ~80% | / Core coverage |
SELECTED WORK
- 케이씨지소프트
- 무브히
- 큐어스트림
- 히얼위고
- SIDE
케이씨지소프트
기사·보호자용 Flutter 앱 단독 개발 및 Java(Android)·Swift(iOS) 기반 기존 앱 16개 유지보수
01 기사용·보호자용 통학 앱
- 기사·보호자용 앱 공동 기획 및 단독 개발·출시 백엔드 개발자 1명과 서비스를 공동 기획했습니다. 두 앱의 설계·개발·실주행 QA·Android·iOS 스토어 출시까지 앱 개발 전 과정을 단독으로 담당했습니다.
- 개발 규칙과 테스트를 고려한 아키텍처·상태 관리 선택 일관된 개발 규칙, 테스트 용이성, 특정 라이브러리에 대한 의존성 분리를 목적으로 Clean Architecture를 선택했습니다.
널리 알려진 구조를 코드 파악의 기준으로 삼고, 반복 코드 작성 부담은 AI 활용으로 낮출 수 있다고 판단했습니다.
테스트 작성 편의성, 학습 비용, 선택 당시의 업데이트·유지보수 활동을 비교해 Riverpod을 선택했습니다.
GetX의 간편한 전역 접근에 필요한 관리 규칙과 이벤트 기반 BLoC의 추가 코드 작성 비용도 함께 고려했습니다.
인증·공지·운행·권한·프로필 등을 기능별로 구분하고, 두 앱과 앱 전반에서 사용하는 공통 서비스는 core 영역으로 분리했습니다. - 주행 중 조작 부담을 줄이는 자동 승하차 구현 고령 사용자 가능성과 주행 환경을 고려해, 승객별 승하차·미탑승 여부를 수동 입력하는 부담을 줄이고자 자동 처리를 도입했습니다. 정류장 지오펜스 내 GPS 속도가 0이면 정차로 판단해 승하차 기록을 자동 처리하고, 구역 이탈 시 서버로 전송합니다. 혼잡 상황의 다음 정류장 전송과 확정 기록 수정을 지원해 지연 탑승 등 예외 상황에 대응했습니다.
- 실제 이동을 반영하기 위한 위치 데이터 처리 개선 노선에 좌표를 맞추는 방식으로는 상·하행 중첩 구간과 노선 이탈 주행에서 실제 이동을 파악하기 어려워, 실측 위치 데이터 중심의 필터링·보정 방식으로 변경했습니다. 정확도가 낮거나 오래된 좌표를 제외하고, 거리·시간·속도·방향과 후속 좌표로 이상치를 걸러낸 뒤 Kalman Filter를 적용했습니다. 실주행·도보 테스트로 실제 이동과 화면의 위치 표시를 비교·검증했습니다.
- Flutter
- Dart
- Clean Architecture
- Riverpod
- Firebase
02 기존 Android·iOS 앱
- 기존 Android·iOS 앱 16개 유지보수 기사·보호자용 Flutter 앱 개발과 별도로, Java(Android)·Swift(iOS) 기반의 기존 앱 16개를 유지보수했습니다.
- 성공버스 Android 일평균 크래시 200.2건→3.3건 감소 Google Play Console 로그에서 리스트 범위를 벗어난 인덱스 접근 등 주요 원인을 확인했습니다.
AI를 활용한 레거시 코드 점검과 인덱스 접근 전 범위 검사 등 수정을 수행했습니다.
개선 전 28일간 일평균 200.2건이 이후 4개월간 3.3건으로 줄었습니다.
비교 기간에 이용자 규모와 집계 방식의 큰 변화는 없었으며, 남은 크래시는 강제 업데이트 적용 전 구버전에서만 발생한 것으로 확인됐습니다. - 화이트라벨 프로젝트 8개→2개 통합 성공버스·내편중구버스·노원행복버스·관악강감찬버스를 개별 프로젝트로 관리하면서 공통 코드가 서로 달라지는 문제를 확인했습니다. Android·iOS 프로젝트 8개를 플랫폼별 하나씩, 총 2개로 통합하고 서비스별 차이는 Android Build Variants·iOS Target으로 분리했습니다. 공통 기능을 각 플랫폼의 한 코드에서 수정해 4개 서비스에 반영하도록 바꾸고, 서비스별 수동 테스트로 동작을 검증했습니다.
- Java
- Swift
- Android
- iOS
무브히
무인 점포의 예약 현황과 점수판을 표시하는 단말 앱 개발·운영
03 탁구발전소24
- 예약 조회의 WebSocket 전환 및 재연결 시 상태 복구 서버 개발자와 함께 10초 주기 폴링을 WebSocket으로 전환했습니다. 연결이 끊긴 동안에는 마지막 예약 정보를 유지하고, 재연결 시 최신 데이터를 기준으로 취소된 예약은 지우고 ID가 바뀐 예약은 교체합니다. 예약 시작 시간으로 남은 시간을 계산해 타이머 진행 상태를 복구합니다.
- 로그 보존과 기록 대조를 통한 예약 미표시 원인 추적 오류 발생 계층·메서드 정보를 로컬에 기록하고, 서버 수신이 확인된 로그만 삭제하도록 했습니다. 오류 로그와 네트워크·MDM 기록을 대조해 노후 네트워크 장비를 원인으로 확인했습니다. 장비 교체 후 같은 증상은 재발하지 않았습니다.
- 20개 지점·약 80대 단말 원격 관리 Headwind MDM으로 현장 방문 없이 단말 재부팅과 로그 확인을 했습니다. 재부팅 후 앱이 자동 실행되도록 설정해, 20개 지점 약 80대 단말을 원격으로 관리했습니다.
- Flutter
- Dart
- BLoC
- WebSocket
- Firebase
큐어스트림
혈당·인슐린 차트 개발 및 코드 리팩터링
04 모두스트림
- fl_chart 포크 및 커스터마이징을 통한 혈당·인슐린 차트 동기화 인슐린 막대 차트와 혈당 선 차트를 함께 확대·이동하기 위해, fl_chart를 포크한 cs_chart의 내부 제스처·좌표·렌더링 처리를 수정했습니다. InteractiveViewer로 두 차트의 제스처를 하나로 묶고, 차트 반전에 따른 좌표 변화에 맞춰 툴팁 로직을 수정했습니다.
- 확대 수준과 표시 범위를 고려한 렌더링 최적화 24시간 데이터를 표시할 때 확대·이동 제스처가 끊겨, 확대 수준별로 데이터를 5분·30분·1시간·3시간 단위로 집계했습니다. 화면 밖 데이터는 그리지 않았고, 직접 조작하며 끊김이 줄고 제스처가 나아진 것을 확인했습니다.
- 펌프 BLE 통신 코드 가독성 개선 배터리·주입·용량 관련 BLE 코드값의 의미를 정리하고, 메서드별 처리 상황을 주석으로 남겨 코드를 파악하기 쉽게 했습니다.
- 코드 리뷰를 통한 안내 화면 중복 개선 단계별로 반복되던 AppBar와 여백을 공통 레이아웃으로 분리하자고 제안했고, 담당 개발자가 그 구조로 코드를 수정했습니다.
차트 예시
- Flutter
- Dart
- BLoC
- BLE
- Firebase
히얼위고
배송 라이더 앱 UI·비즈니스 로직·API 연동 및 Android·iOS 배포·심사 대응
05 탱고앤고
- 스캔 히스토리 보존과 서버 처리 상태의 분리 불안정한 물류창고 네트워크에 대응해 스캔 히스토리는 바로 로컬에 저장하고, 처리 상태는 서버 응답 뒤에 갱신해 저장하도록 나눴습니다. 응답을 받지 못하면 재조회·재시도 결과로 상태를 갱신하고, 앱을 다시 열어도 서버 데이터를 조회해 반영합니다.
- 외부 서버 연동의 타임아웃에 대응한 송장 분할 전송 200건을 한 번에 보내면 타임아웃이 나서, 20건 단위로 나누고 실패한 건만 다시 보내도록 했습니다. 서버 측 개선과 함께 200~300건이 약 5초 안에 처리되도록 개선했습니다.
- 행정동 경계 데이터 기반 배송 현황 지도 구현 QGIS로 단순화한 행정동 경계 데이터로, 기존 시·구·동 선택 화면에 배송 현황 지도를 추가했습니다. 표와 지도 중 선택한 보기는 SharedPreferences에 저장해 유지합니다.

- 내비게이션 사용 중 배송 위치 추적 제어 flutter_overlay_window로 다른 앱을 쓰는 중에도 위치 추적을 켜고 끌 수 있게 했습니다. 위치는 FusedLocationProviderClient로 받고, 배송 완료 시 사진 업로드로 이어집니다.
- 배송 완료 사진 업로드 용량 절감 업로드 전 4~5MB 사진의 해상도를 낮추되, 배송 호수를 읽을 수 있는 화질은 유지하도록 조정했습니다.
- Flutter
- Dart
- GetX
SIDE
06 픽어라운드
- 횟감 추천·어종 안내 웹 MVP와 주문·결제·웹훅 연동
- bubble.io
- TossPayments
- Amplitude
07 제일스폰지
- 스폰지·스포츠 용품 업체 Flutter 웹 홈페이지 기획·디자인·개발·배포
- Flutter
- Dart
- Supabase
- Firebase
SKILLS
- Flutter
- Dart
- Android
- iOS
- Java
- Swift
- Kotlin
- Clean Architecture
- Riverpod
- BLoC
- GetX
- REST API
- WebSocket
- Firebase
- BLE
- GitHub
- Jira
- Slack
EDUCATION
- 2024.07–2025.02 학점은행제 컴퓨터공학 학사
- 2020.03–2023.02 영진전문대학 컴퓨터정보계열
- 2015.03–2018.02 경북기계공업고등학교 공업전자과
정보처리산업기사, 2022.06, 한국산업인력공단
육군 병장 만기전역, 2018.05–2020.01
