본문으로 건너뛰기
DEVKBS
작업 원장
022Geniezip2026.02 – 2026.10사내 전용

현대글로비스 CBI Admin

해외 직구 물류 업무를 한 시스템에서 다루는 관리자 웹

기간
2026.02 – 2026.10
분류
백오피스
역할
프론트엔드 · 회의록·시트·문서 병행
구성
프론트엔드 3 · 백엔드 협업

화면 비공개거래처·고객사 정보와 실제 주문·배송 데이터가 그대로 나오는 업무 화면이라 캡처를 싣지 않습니다.어떤 문제를 어떻게 풀었는지는 아래에 정리해 두었습니다.

01개요

현대글로비스의 해외 직구(CBI) 업무에 쓰는 다국어 관리자 웹입니다. 주문 업로드와 확정, 배송 조회, MBL 관리, 계약과 운임, 정산, 알림톡 발송, 거래처·고객사 계정과 권한 관리가 한 시스템에 들어 있습니다. 본사 관리자와 거래처, 고객사가 같은 시스템에 로그인하고, 권한에 따라 보이는 메뉴와 데이터가 다릅니다.

2026년 2월 20일에 프론트엔드 저장소가 만들어졌고, 그날부터 참여했습니다. 택배사 운송장 관리 화면에서 시작해서 거래처·고객사 계정, 계약 관리, 주문 업로드와 배송 관리, 알림 발송 화면을 만들었습니다. 프론트엔드는 세 명이 나눠 맡았습니다.

코드 밖의 일도 많았습니다. 4월에는 매주 화요일마다 현대글로비스와 화면 리뷰 회의를 했고, 그 뒤로도 회의가 이어졌습니다. 회의록은 제가 작성해서 이메일로 공유했습니다. 회의에서 나온 수정은 화면에 반영하고 다음 회의 전에 다시 확인했습니다. 화면별 진행도와 엑셀 다운로드 항목, 내부 테스트 결과는 구글 시트에 정리해 공유했습니다.

프로젝트는 2026년 10월 초에 마무리됐습니다. 인수인계 문서, 신규 개발자 온보딩 가이드, 교육 자료도 그때까지 모두 끝냈습니다.

02기술 결정

문제, 선택, 결과 순서로 적었습니다.

  1. 결정 01

    거래처 선택은 화면마다 두지 않고 전역 상태 하나로 공유한다

    문제
    거래처와 고객사를 검색 조건으로 쓰는 화면이 여러 개입니다. 화면마다 폼에 거래처 값을 따로 들고 있으면 화면을 옮길 때마다 다시 골라야 하고, 두 화면의 값이 서로 다를 수도 있습니다.
    선택
    거래처와 고객사 선택값을 Redux 슬라이스 하나에 두고, 선택 모달과 입력 필드를 공용 컴포넌트로 만들었습니다. 폼에는 거래처 필드를 만들지 않고 스토어 값을 기준으로 삼았습니다. 거래처를 바꾸면 고객사 선택과 화면에 남아 있던 이전 조회 결과가 지워지고, 나머지 검색 조건은 그대로 남습니다. 거래처 선택이 필수인 화면과 '전체'를 허용하는 화면은 타입을 둘로 나눴습니다.
    결과
    거래처를 한 번 고르면 같은 필터를 쓰는 모든 화면에 바로 반영됩니다. 새로고침하면 선택이 초기화되는 메모리 상태라서 그 점은 한계로 남아 있고, 사용법과 함께 문서에 적어 뒀습니다.
  2. 결정 02

    그리드 엑셀 다운로드는 공용 훅 하나로 처리한다

    문제
    그리드를 우클릭해서 엑셀을 내려받는 화면이 많습니다. 화면마다 다른 것은 주소와 검색 조건, 요청 방식뿐이고, 파일을 받아 저장하는 처리와 조회 전에는 안내만 띄우는 확인은 모두 같았습니다.
    선택
    `useGridExcelDownload` 훅 하나에 주소, 검색 조건, 요청 방식을 넘기면 다운로드까지 처리하도록 했습니다. 검색이 필수인 화면은 옵션 하나로 조회 전 다운로드를 막고 안내 문구를 띄웁니다. 파일 이름은 서버가 내려준 값을 먼저 쓰고, 없으면 호출한 쪽에서 넘긴 이름을 씁니다.
    결과
    새 화면을 만들 때 다운로드 뮤테이션을 따로 만들지 않아도 됩니다. 7월에는 모든 그리드의 다운로드 동작을 훑어보고 항목을 시트에 정리했습니다.
  3. 결정 03

    API가 나오기 전에는 목 데이터로 화면부터 만든다

    문제
    화면 리뷰 회의가 먼저 시작됐고 백엔드 API는 그 뒤에 나왔습니다. 리뷰에서는 항목 이름, 컬럼 구성, 화면 구조가 회의마다 바뀌었습니다. API를 기다렸다가 화면을 만들면 리뷰를 시작할 수 없었습니다.
    선택
    화면은 목 데이터로 먼저 만들어 리뷰를 받고, API가 나오는 화면부터 실제 연동으로 바꿨습니다. 폼 입력 검증은 처음부터 Valibot 스키마로 만들었습니다.
    결과
    목 데이터는 연동이 끝나는 대로 지웠습니다. 6월 1일에 알림 발송·알림 이력, 주문 업로드·확정, 배송 보류·취소 이력 화면에 남아 있던 목 데이터를 정리하면서 목 데이터 폴더가 없어졌습니다.

03주요 기능

  • 택배사·운송장 번호 대역 관리

    택배사별 운송장 번호 대역을 등록하고 관리하는 화면입니다. 이 프로젝트에서 가장 먼저 만든 화면이기도 합니다.

  • 거래처·고객사 계정 관리

    목록에서 사용 여부를 켜고 끄고, 등록과 수정은 드로어 폼으로 처리합니다.

  • 거래처 계약·운임 설정

    거래처별 계약을 STEP 단위로 나눠 설정합니다. 어디까지 설정했는지 단계 번호로 보여줍니다.

  • 주문 업로드와 배송 관리

    표준 양식 엑셀을 올려 검증하고, 오류가 난 건을 확인한 뒤 주문을 확정합니다. 배송 보류와 취소 이력도 이쪽에서 봅니다.

  • 알림톡 발송과 이력

    알림톡 템플릿을 골라 발송하고, 발송 이력과 결과를 확인합니다.

  • 그리드 공통 기능

    그리드를 우클릭하면 엑셀 다운로드가 나옵니다. 컬럼 표시 여부는 화면별로 설정합니다.

04개발 밖에서 한 일

화면을 만드는 일과 따로 맡았던 것들입니다.

  • 화면 리뷰 회의록

    현대글로비스와 하는 화면 리뷰 회의의 회의록을 작성해서 이메일로 공유했습니다. 모든 화면에 걸리는 공통 수정을 맨 앞에 두고, 화면별 수정과 다음 회의 일정·목표 순서로 적었습니다.

  • 진행도·내부 테스트 시트

    화면별 진행도와 내부 테스트 결과를 구글 시트로 관리했습니다.

  • 엑셀 다운로드 항목 시트

    그리드마다 엑셀에 담길 데이터를 시트에 적고 화면 경로 링크를 걸어 검토를 요청했습니다. 7월에는 모든 그리드를 점검해 문서를 마무리했고, 바뀐 화면은 시트에도 반영했습니다.

  • Jira 사용법과 Slack 알림

    프론트와 백엔드가 서로 요청을 주고받는 방법을 Jira 사용법 문서로 정리해 공유했습니다. 모든 작업을 올리는 대신 협업 중 논의가 필요한 항목만 올리도록 단순하게 정했고, Slack에는 Jira와 Confluence 알림 채널을 연결했습니다.

  • 인수인계 문서와 온보딩 가이드

    프론트엔드 인수인계 문서, 신규 개발자 온보딩 가이드, 교육 자료를 만들어 프로젝트가 끝나기 전에 모두 마쳤습니다. 새 화면을 추가하는 순서, 공통 컴포넌트와 훅, 다국어 문구 등록 절차를 정리했습니다.

  • 프레임워크 보안 업데이트 검토

    Next.js 보안 공지가 나왔을 때 공지된 취약 조건을 이 프로젝트 코드와 대조해서, 영향이 있는지와 업데이트 방법을 보고서로 정리했습니다.

05회고

화면이 서른 개를 넘고 회의가 이어지는 프로젝트라서, 무엇이 정해졌는지 남기는 일이 코드만큼 필요했습니다. 회의록은 공통 항목을 맨 앞에 두는 형식으로 자리 잡았고, 진행도와 다운로드 항목은 시트 한 곳에 모았습니다.

공용 훅과 공유 필터는 만들면서 사용법 문서를 같이 썼고, 9월에 그 문서들을 묶어 인수인계 문서와 온보딩 가이드로 정리했습니다. 인수인계 문서는 코드와 한 번 더 대조하면서 고쳤습니다. 현재 구현과 달라진 에러 처리 문서도 그때 표시해 뒀습니다.

프로젝트를 마칠 때까지 자동 테스트는 없었습니다. 인증, 주문, 정산 흐름부터 넣어야 한다고 인수인계 문서에 적어 뒀습니다.