Apollo Link 체인으로 인증·버전체크·에러 처리를 파이프라인화 — 페이지 컴포넌트에서 공통 관심사 제거
versionCheckLink의 CDN 이중 검증으로 “클라이언트 갱신 필요” vs “백엔드 배포 이상”을 자동 구분
유통사별 부가세·반올림 전략을 서버 코드 기반으로 처리 — Big.js로 금액 정확성 확보
Workbox 서비스 워커 도입으로 폰트·이미지 캐싱 — 네트워크 불안정 환경의 앱 신뢰성 개선
이 레포의 역할
유통사(도매상) 담당자가 외출 중에도 발주 수신·확인, 배송 현황 조회, 출고 수량 수정 등을 할 수 있는 모바일 앱의 웹 레이어입니다. React 기반 웹 앱을 Flutter Shell로 감싼 하이브리드 구조로, 사내 디자인 시스템을 기반으로 구축되었습니다.
담당 역할 & 기여
React 웹뷰 앱 개발
Flutter WebView 안에서 실행되는 React 웹 앱을 개발했습니다. 사내 디자인 시스템 컴포넌트를 기반으로 모바일 최적화된 UI를 구성하고, 터치 친화적인 인터랙션을 구현했습니다.
수주 관리 화면: 거래처별 발주 목록 조회, 상세 확인, 출고 수량·단가 수정 기능 구현. 매입처 헤더 타이틀, 합계 출고 수량 표시 처리
자동발주 처리: 여러 매출처에서 생성된 자동발주의 대표 거래처 표시 로직 구현
토스트(Snackbar) 스타일 관리: 출고완료 알림 등 사용자 피드백 UI 타입 시스템 구축
Apollo Client GraphQL 연동
마켓봄 웹과 동일한 GraphQL API를 사용합니다. Apollo Client의 캐싱 전략을 모바일 환경에 맞게 조정하여, 네트워크 연결이 불안정한 상황에서도 기존 캐시 데이터를 표시합니다. apollo-upload-client로 납품 사진 등 파일 업로드를 처리합니다.
네이티브 기능 연동
Flutter Shell이 제공하는 네이티브 기능(카메라, 갤러리, 푸시 알림)을 웹 레이어에서 JS Bridge를 통해 호출합니다. 납품 사진 촬영·첨부, 발주 알림 등에 활용됩니다.
Datadog RUM 모바일 모니터링
모바일 환경에서의 성능 지표와 에러를 Datadog RUM으로 수집합니다. 데스크탑 웹과 분리된 뷰로 모바일 특이 이슈를 추적합니다.
기술 선택 이유
기술
선택 이유
React 18 + Vite
빠른 빌드 속도와 최신 React 기능 활용
사내 디자인 시스템
마켓봄 에코시스템 전용 디자인 시스템으로 일관된 UI 확보
Emotion
BoronUI 베이스 스타일 엔진, 동적 테마 적용
Recoil
모바일 앱 내 전역 상태(인증·환경설정) 원자 단위 관리
React Hook Form
출고 수량·단가 편집 폼의 유효성 검증을 선언적으로 처리
apollo-upload-client
납품 사진 등 파일 업로드를 GraphQL Mutation에 통합
기술 스택
기술스택은 퇴사 시점 기준으로 작성되었습니다.
기술
역할
React 18
UI 프레임워크
TypeScript
타입 안전성
Vite
번들러 및 개발 서버
Apollo Client 3
GraphQL 클라이언트
사내 디자인 시스템
React 컴포넌트 라이브러리
Emotion
CSS-in-JS 스타일링
Recoil
전역 상태 관리
React Hook Form
폼 상태 관리
apollo-upload-client
파일 업로드 GraphQL 연동
ts-pattern
복잡한 상태 분기 패턴 매칭
Datadog RUM
실사용자 모니터링
성과
iOS·Android 동시 출시로 유통사 담당자의 이동 중 업무 처리 가능
웹 자산 재사용으로 별도 네이티브 앱 개발 대비 개발 기간 단축
사내 디자인 시스템 연동으로 마켓봄 전 서비스와 UI 일관성 확보
이 레포의 역할
마켓봄·마켓봄프로·마켓봄도매 세 서비스의 운영 업무를 단일 인터페이스로 통합한 내부 관리자 웹입니다. 정산 집계, 매입처 관리, 공지 관리, 롤링 설정, 초기화 처리 등 운영팀·재무팀이 사용하는 어드민 도구입니다.
배경 & 문제 의식
마켓봄 에코시스템이 마켓봄프로·도매·마켓봄으로 확장되면서 각 서비스의 운영 업무를 처리하는 내부 도구가 분산되어 있었습니다. 운영팀이 서비스마다 별도 화면을 오가야 했고, 서비스 간 데이터 비교가 어려웠습니다. 세 서비스의 운영 화면을 하나의 어플리케이션으로 통합하여 운영 효율을 높이는 것이 목표였습니다.
담당 역할 & 기여
정산·매입처 관리 화면 개발
정산 집계: 기간·유통사·거래처 조건으로 거래 내역을 필터링하고 합산하는 집계 인터페이스 구현. ag-Grid 커뮤니티 에디션을 활용하여 대용량 정산 데이터를 클라이언트에서 정렬·필터링 처리
매입처 관리: 매입처 등록·수정·조회 화면 구현. 임시 아이디 대소문자 표시 오류 수정, 매입처 필드 GraphQL 연동
초기화 처리: 정산 초기화 진행 중·반려 상태 관리 화면 — 상태 전환 흐름을 React 상태로 모델링
공지 관리 기능 개발
운영팀이 서비스별로 공지를 게시·수정하는 화면을 구현했습니다. 공지 대상(매출처·매입처)을 필터링하여 표시하는 기능, 리치 텍스트 편집기(React-Quill) 연동, 공지 롤링 설정(종료일·제한 없음 옵션) 등을 담당했습니다.
React 18 + Vite 기반 아키텍처
이전 Vue/Nuxt 기반 레거시 어드민 도구들과 달리, 최신 React 18 + Vite 스택으로 신규 구축했습니다. Recoil로 전역 상태를 관리하고, React Hook Form + Zod로 복잡한 폼 유효성 검증을 선언적으로 처리합니다.
GraphQL Code Generator 도입
GraphQL 스키마에서 TypeScript 타입과 Apollo 훅을 자동 생성합니다. API 스키마 변경 시 프론트엔드 타입이 자동으로 동기화되어 런타임 타입 오류를 빌드 타임에 감지합니다.
기술 선택 이유
기술
선택 이유
React 18 + Vite
빠른 HMR과 최신 React 기능(Concurrent Features) 활용
Tailwind CSS
컴포넌트로 빠른 UI 구성, Tailwind로 레이아웃·간격 유틸리티 처리
ag-Grid
대용량 정산 데이터 테이블을 클라이언트에서 정렬·필터링·그룹핑
Recoil
화면 간 공유 상태(선택된 사업부·날짜 범위 등)를 원자 단위로 관리
React Hook Form + Zod
복잡한 어드민 폼의 유효성 검증을 타입 안전하게 선언
GraphQL Code Generator
스키마 기반 타입 자동 생성으로 API-프론트 타입 동기화
ts-pattern
복잡한 상태 분기를 패턴 매칭으로 명확하게 표현
기술 스택
기술스택은 퇴사 시점 기준으로 작성되었습니다.
기술
역할
React 18
UI 프레임워크
TypeScript 5
타입 안전성
Vite
번들러 및 개발 서버
Apollo Client 3
GraphQL 클라이언트
GraphQL Code Generator
스키마 기반 타입 자동 생성
Tailwind CSS
유틸리티 스타일링
Emotion
CSS-in-JS 스타일링
ag-Grid
고성능 데이터 그리드
Recoil
전역 상태 관리
React Hook Form
폼 상태 관리
Zod
스키마 기반 유효성 검증
ts-pattern
패턴 매칭 유틸리티
React-Quill
리치 텍스트 편집기
dayjs
날짜 처리
성과
마켓봄·마켓봄프로·도매 세 서비스의 운영 화면을 단일 어드민으로 통합
GraphQL Code Generator 도입으로 API 타입 자동 동기화 — 수작업 타입 정의 제거
ag-Grid 활용으로 대용량 정산 데이터 클라이언트 처리 성능 확보
이 레포의 역할
유통사 전용 앱을 위한 React 컴포넌트 라이브러리입니다. 사내 npm 패키지로 배포되며, ESM·CJS 듀얼 빌드를 지원합니다.
배경 & 문제 의식
마켓봄 서비스가 웹, 유통사 앱, 운영 관리자 등 여러 프로덕트로 확장되면서 각 팀이 비슷한 UI(버튼, 테이블, 모달, 폼 요소)를 중복 구현하는 문제가 생겼습니다. 디자이너-개발자 간 협업에서도 컴포넌트 명칭과 명세가 불일치하는 경우가 많았습니다. 이를 해결하기 위해 공유 컴포넌트 라이브러리를 별도 패키지로 분리했습니다.
담당 역할 & 기여
핵심 컴포넌트 개발
유통사 앱의 모바일 UX에 필요한 컴포넌트들을 설계하고 구현했습니다.
Bottom Navigation: 모바일 앱의 하단 탭 내비게이션 컴포넌트 — 활성 탭 상태·아이콘·라벨 구성
DatePicker: 모바일 환경에 최적화된 날짜 선택 컴포넌트 — 터치 친화적 인터랙션 구현
Iconography / Logo: 서비스 전용 아이콘셋과 로고 컴포넌트 정의 및 추가
Dialog: 줄바꿈(linebreak) 처리 개선 — 긴 메시지 표시 시 레이아웃 깨짐 수정
Emotion 기반 테마 시스템
초기에는 MUI를 내부 의존성으로 사용했으나, 번들 크기 최적화를 위해 MUI를 Emotion 기반의 자체 테마 시스템을 전환했습니다. 소비측 서비스는 BoronThemeProvider로 감싸기만 하면 전체 스타일이 자동 적용됩니다.
소비측 서비스는 ThemeProvider로 앱을 감싸기만 하면 전체 스타일이 자동 적용되는 구조로 설계했습니다. 버튼, DatePicker 등 컴포넌트를 선언적으로 사용할 수 있습니다.
Storybook 문서화
모든 컴포넌트를 Storybook 8으로 문서화했습니다. Props 명세, variant별 렌더링 예시, 인터랙션 테스트를 Storybook에서 확인할 수 있어 디자이너와 개발자가 동일한 기준으로 소통합니다.
npm 패키지 배포 및 버전 관리
Semantic Versioning으로 패키지를 관리합니다. 브레이킹 체인지 없는 업데이트는 패치·마이너 버전을, API 변경이 있으면 메이저 버전을 올려 소비측 서비스가 안전하게 업데이트 시점을 결정할 수 있습니다.
ESM·CJS 듀얼 빌드
Vite 라이브러리 모드로 ESM과 CJS를 동시에 빌드합니다. 소비측 프로젝트의 번들러 종류에 관계없이 최적 모듈 형식이 자동 선택됩니다. TypeScript 타입 정의 파일도 자동 생성하여 소비측 IDE 지원을 보장합니다.