Gitsunmin

마켓봄 (구 마켓봄 프로)

← Works
마켓

마켓봄 (구 마켓봄 프로)

마켓보로

2020.10 ~ 2023.08

식자재 유통사를 위한 B2B SaaS 플랫폼 마켓봄(구 마켓봄 프로)의 프론트엔드를 담당했습니다. 네이티브 WebView 안에서 동작하는 인앱 하이브리드 앱을 개발하며 배포 버전 불일치 진단·금액 계산 정합성 등 운영 이슈를 해결했고, 웹 서비스·정산 관리자·디자인 시스템까지 전 레이어에 걸쳐 개발했습니다.

React Vue.js Nuxt.js TypeScript GraphQL Apollo Client Emotion Storybook Datadog ag-Grid Vite

담당 범위

  • 거래처 주문 앱 — 초기 설계·개발을 단독 수행
  • 마켓봄 웹 — 거래전표 등록, 자료 일괄 등록, 세금계산서 대조 화면
  • 유통사 전용 앱 — 수주 관리 화면과 네이티브 기능 연동
  • 통합 운영 관리자 — 세 서비스 운영 화면을 신규 구축
  • 사내 디자인 시스템 — MUI 의존 제거와 모바일 컴포넌트 개발
B2B 식자재 유통 플랫폼 — 유통사 관점
마켓봄 프로 플랫폼마켓봄 프로대기 중
📋
🚚
거래처 음식점거래처 A
📋
🚚
거래처 음식점거래처 B
📋
🚚
거래처 음식점거래처 C
📋
🚚
거래처 음식점거래처 D
발주 수신
발주 확인
출고 처리
발주 수신

새벽 6시, 수십 개 거래처의 발주가 한꺼번에 들어온다

전화·팩스 시대에는 직원이 한 통씩 받아 수기로 적었습니다. 마감 시간이 지나도 전화는 계속 왔고, 받아 적다 빠뜨린 품목이 배송 당일에야 발견되곤 했습니다. 마켓봄 프로는 이 모든 발주를 실시간 디지털 데이터로 전환합니다.

  • 음식점 사장님이 앱에서 직접 발주
  • 유통사는 실시간으로 발주 수신
  • 전화·팩스 없이 자동 기록
발주 확인

한 화면에서 모든 거래처의 발주를 한눈에

유통사 담당자는 웹이나 모바일 앱 어느 환경에서도 발주를 확인하고 출고 수량을 수정할 수 있습니다. 거래처별·상품별로 정렬된 발주 목록은 창고 출고 준비의 첫 번째 신호입니다.

  • 거래처별 발주 목록 실시간 조회
  • 출고 수량·단가 인라인 수정
  • 자동발주 처리로 반복 주문 부담 절감
출고 처리

출고 지시서 한 장으로 배송 시작

발주 확인 → 출고 지시 → 배송 → 세금계산서 발행. 전 과정이 하나의 플랫폼 안에서 이어집니다. 수기 장부와 전화 통화로 채워졌던 유통사의 하루가, 데이터로 관리되는 워크플로우로 전환됩니다.

  • 출고 지시서 자동 생성·정렬
  • 배송 상태 실시간 추적
  • 정산·세금계산서 자동 연동

고지: 전 직장의 영업비밀 보호를 위해 내부 식별자·파일 경로·연동 규격 등 일부 항목은 생략하거나 실제와 다르게 표기했습니다.

배경

마켓봄(구 마켓봄 프로)은 식자재 유통사(도매상)를 위한 B2B SaaS 플랫폼입니다. 유통사가 다수의 거래처(음식점)를 관리하고, 발주를 수신·처리하며, 정산까지 처리하는 올인원 플랫폼입니다.

단일 서비스가 아니라 여러 프로덕트가 연계된 에코시스템입니다. 웹 서비스, 두 개의 하이브리드 앱, 통합 운영 관리자, 디자인 시스템이 각각 독립 저장소로 운영되며, 프론트엔드 전 레이어에 걸쳐 개발과 코드리뷰를 담당했습니다.

마켓봄 에코시스템
  ├── 마켓봄 웹 (Nuxt.js)        — 유통사 업무 화면
  ├── 거래처 주문 앱 (WebView)   — 음식점 발주
  ├── 유통사 전용 앱 (WebView)   — 현장 수주 관리
  ├── 통합 운영 관리자 (React)   — 세 서비스 운영 도구
  └── 디자인 시스템              — 위 전부의 공통 UI

이 구조 때문에 같은 도메인 규칙이 서로 다른 기술 스택 위에서 반복 구현되는 상황이 계속 생겼고, 금액 계산 규칙과 공통 UI를 어디에 두어야 하는지가 반복되는 판단 대상이었습니다.

해결한 문제

각 문제의 상황·제약·접근·결과·한계는 아래 탭의 문서에 케이스 단위로 정리했습니다.

문제어디에
반올림하는 순서 때문에 금액이 틀어졌다 — 제가 작성한 로직에서 발생한 정산 사고. 핫픽스 후 Big.js로 라이브러리 레벨 차단까지마켓봄 웹 탭
기능을 추가할수록 기능 추가가 어려워졌다 — 리팩터링 기간을 별도로 확보해 거래전표 검증 구조를 재설계마켓봄 웹 탭
고친 이슈의 CS가 계속 들어왔다 — WebView 캐시로 구버전 번들이 남는 문제를 배포 버전 비교로 자동 판별거래처 주문 앱 탭
네이티브가 넘겨준 인증 URL, 그리고 그 URL이 남긴 것 — 주어진 진입 규격에 딸려 온 히스토리 오염과, 덮지 못하고 남긴 판단거래처 주문 앱 탭
네트워크가 불안정한 현장, 그리고 캐싱의 대가 — 자산 캐싱으로 얻은 것과 내준 것거래처 주문 앱 탭
데스크탑에서는 재현되지 않는 이슈들 — 모바일 전용 모니터링 뷰 분리유통사 전용 앱 탭
컴포넌트 하나 쓰려고 MUI 전체를 지고 갔다 — 소비측 코드를 깨지 않고 의존성 교체디자인 시스템 탭
운영 화면이 서비스 수만큼 흩어져 있었다 — 세 서비스 운영 도구를 0→1로 통합통합 운영 관리자 탭

이 프로젝트에서 반복적으로 다룬 축은 금액 정합성(유통사별 부가세·반올림 정책을 클라이언트가 계산하고, 표시 금액이 어긋나면 곧바로 거래 분쟁이 되는 영역 — Big.js로 부동소수점 오차 차단, 클라이언트 선검증 + 서버 재검증 이중 구조), 인앱 WebView 환경(배포 버전 불일치 자동 판별, 히스토리 조작, 자산 캐싱, JS Bridge 네이티브 연동), 레거시 의존성 제거(MUI 걷어내기), 그리고 운영 도구 통합(흩어진 세 서비스 관리 화면을 0→1로)이었습니다.

WebView 대응 경험을 확장해 앱 6종의 네이티브 Shell을 단일 코드베이스로 통합하는 설계를 진행했습니다 → 하이브리드 앱 통합 프레임워크

전체 기술 스택

레이어기술
마켓봄 웹Nuxt.js, Vue.js, TypeScript, GraphQL, Apollo Client, RealGrid
거래처 주문 앱 (웹뷰)Nuxt.js, Vue.js, TypeScript, GraphQL, Apollo Client, Big.js, Workbox
유통사 전용 앱 (웹뷰)React, TypeScript, Emotion, GraphQL, Apollo Client
통합 운영 관리자React, TypeScript, Vite, Tailwind CSS, GraphQL, ag-Grid
디자인 시스템React, TypeScript, Emotion, Storybook
모니터링Datadog RUM

관련 링크