Situation

이마트앱의 걷기 미션 기반 시즌제 서비스 "워크이마트"를 신규 개발했습니다. QR 체크인, 걸음수 미션, 바코드 스캔, 건강 다이어리, 리워드 뽑기 등 복합 기능과 네이티브 앱 연동이 필요한 프로젝트였습니다.

Problem

네이티브 걸음수 센서 연동과 웹뷰 간 양방향 통신의 복잡성이 가장 큰 도전이었습니다. 여러 미션 타입(WALKING, BARCODE, PURCHASE)별 상태 머신을 관리해야 했고, 비로그인/로그인 상태, 시간 제한(자정 리셋), 에러 케이스 등 고려해야 할 분기가 다수 존재했습니다.

Approach

Composable 기반 아키텍처를 설계하여 역할별로 파일을 분리했습니다(mission, missionActions, barcode, gate, error, walk). 엔티티 모델을 단순화하여 타입을 59줄에서 30줄로 줄였고, 에러 코드별 분기와 공통 팝업으로 에러 처리 체계를 갖추었습니다. 통합 테스트를 선행 작성하여(BarcodeScan, Mission, Gate, RewardDrawPopup) 안정성을 확보했습니다.

composables/walkEmart/
  • useMission.ts
  • useMissionActions.ts
  • useBarcodeScan.ts
  • useGate.ts
  • useError.ts
  • useWalk.ts
  • useRewardDraw.ts
  • useTutorial.ts

Implementation

  1. 2025-04

    기획 리뷰 회의 3회 — 엣지 케이스 논의, UML 작성, 공수산정

  2. 2025-05 초

    풀 피처 구현 (Gate, Mission, BarcodeScan, HealthDiary, RewardDraw, Tutorial)

  3. 2025-05-26

    QA 시작 — 5차까지 총 10+건 버그 대응

  4. 2025-05-28

    운영 배포 완료, 무장애 운영 진입

QA 과정에서 주요 대응 내역으로는 바코드 로컬 검증 전환과 상태별 상품 정렬, 자정 이후 스캔 완료 얼럿 방지, 포그라운드 복귀 시 데이터 재조회, 비로그인 시 시작하기 버튼 표시 등이 있었습니다.

Result

🗓️

2개월 내 완료

기획 리뷰부터 운영 배포까지

🛡️

무장애 운영

QA 5차 대응으로 안정성 확보

📐

팀 레퍼런스

Composable 아키텍처가 설계 표준으로 활용

이후 워크이마트 리팩토링(SCRUM-18683)에서도 동일 패턴이 유지되었습니다.

Learnings

네이티브 연동 서비스에서 콜백 비동기 불확실성을 타임아웃+재시도로 방어하는 패턴을 체득했습니다. 복합 상태 머신은 composable 분리가 핵심이며, 하나의 파일이 300줄 이상이 되면 분할 시점이라는 기준을 세웠습니다.

QA 5차까지 가더라도 초기에 에러 체계를 갖추면 수정 범위가 한정된다는 확신을 얻었습니다. 기획 초기부터 참여하면 불필요한 re-work가 체감상 80% 감소한다는 것도 이 프로젝트에서 확인했습니다.