제조/물류 운영을 위한 ERP형 대시보드(Web) + 발주 핵심 플로우(iOS) 프론트엔드 구현
나의 역할
Frontend
구성원
Backend 2명 Frontend 3명
작업기간
2025.07.10 - 2025.07.23 (2주)

GearFirst는 제조/물류 운영을 지원하는 ERP형 대시보드(Web)와 현장 발주 업무를 빠르게 처리하는 iOS 앱을 함께 제공하는 프로젝트입니다. 저는 Web에서는 프로젝트 초기 뼈대와 공통 UX 인프라를 먼저 고정해 ‘빠르게 붙고, 덜 깨지는’ 구조를 만드는 데 집중했고, 입고·BOM·품목 등 핵심 도메인 API 연동의 안정화에 기여했습니다. iOS에서는 발주 도메인의 핵심 사용자 여정(요청 → 이력 → 상세)을 SwiftUI + MVVM으로 설계·구현하고, 네트워크 레이어(APIConfig/NetworkManager/PurchaseOrderAPI)를 구조화하여 발주 상태/이력 조회, 발주요청/취소까지 실제 API 연동을 완성했습니다. 결과적으로 Web–iOS가 같은 도메인 규칙을 공유하면서도 각 플랫폼에서 운영 친화적인 탐색/상태 표현/에러 정책을 일관되게 제공하도록 정리했습니다.
TopBar/SideBar/Layout/AppRoutes를 먼저 세워 이후 도메인 추가 속도를 높이고, 화면 일관성을 강하게 고정했습니다.
버튼, 검색, 날짜 선택, 페이지네이션, 스크롤 테이블, 모달 레이아웃, 로딩 오버레이까지 공통화해 구현 비용과 화면 편차를 줄였습니다.
입고(Inbound), BOM, 품목(부품/자재/카테고리), 인증/권한, 차량모델 등에서 API 연동과 화면 완성도를 함께 끌어올렸습니다.
OrderRequestView, OrderHistoryView, OrderDetailView를 중심으로 화면 구조, 상태 흐름, 상호작용을 주도적으로 설계하고 완성했습니다.
APIConfig, NetworkManager, PurchaseOrderAPI로 책임을 분리하고 URLSession + async/await 기반으로 호출/디코딩/에러 흐름을 일관되게 정리했습니다.
BottomBar, EditableField(제네릭), BaseButton, SectionCard, StepProgressView 등을 정리해 일관성을 확보하고, OrderHistory에 필터·검색·건수·새로고침을 도입해 탐색성과 즉시성을 강화했습니다.
이슈: 페이지/모달마다 로딩 방식이 달라 ‘멈춘 것처럼 보임/깜빡임’이 반복되어 사용자가 화면 상태를 신뢰하기 어려웠음.
해결: LoadingOverlay + 공통 모달 레이아웃 중심으로 로딩 패턴을 통일하고 주요 화면에 일괄 적용했습니다.
💡 배운 점: 대시보드에서는 ‘정확한 데이터’만큼 ‘안정적으로 보이는 상태 관리’가 핵심이며, UX 표준화가 유지보수성과 직결된다는 점을 체득했습니다.
이슈: 서버 상태를 그대로 노출하면 단계형 진행 UI(색상/단계/라벨)가 쉽게 깨지거나 일관성이 무너질 수 있었음.
해결: 도메인 모델(RequestOrderItem)과 StepProgressView 중심으로 상태 매핑 규칙을 고정하고, 화면은 매핑된 상태만 사용하도록 정리했습니다.
💡 배운 점: 상태 기반 UI는 ‘서버 상태 → 도메인 상태 → 화면 상태’의 변환 계층을 명확히 둘수록 안정적이라는 점을 배웠습니다.
이슈: 로컬/배포 환경 차이로 로그인/로그아웃 흐름이 자주 깨지고, 리다이렉트 경로가 엇갈리며 장애가 발생했음.
해결: 환경 변수/redirect 유틸/라우팅 경로를 정리하고 인증 경로를 구조적으로 고정했습니다.
💡 배운 점: 인증은 기능 구현보다 ‘경로·환경 정합성’이 본질이며, 이를 코드 구조로 강제해야 안정화된다는 점을 배웠습니다.
이슈: 발주요청/취소 같은 쓰기 API에서 401이 발생하면 흐름이 중간에 붕괴하고 원인 파악이 어려워질 수 있었음.
해결: API 레이어에서 401을 감지하고 공통 경로(알림/세션 처리)로 넘기도록 정리해 예외 상황을 한곳에서 다루게 했습니다.
💡 배운 점: 에러 정책은 화면마다 흩어지기보다 API 레이어에서 일관되게 관리할수록 안전하다는 점을 배웠습니다.
이슈: 데이터가 누적될수록 원하는 항목을 찾는 시간이 길어지고, 최신 상태 반영에 대한 신뢰도도 떨어질 수 있었음.
해결: 필터, 검색, 건수 표시, pull-to-refresh를 도입해 ‘정제·탐색·갱신’ 흐름을 한 화면에서 해결하도록 개선했습니다.
💡 배운 점: 운영형 리스트는 단순 렌더링보다 탐색 도구와 갱신 경험이 핵심이라는 점을 체감했습니다.