홈플러스 배차지원 시스템 Renewal

이 프로젝트는 (주)이트레이스가 IDC에 ORACLE 기반으로 운영하고 있던 기존 홈플러스 배차지원 시스템을 AWS로 이전하기 위해 MariaDB 기반으로 재설계하고 구축한 작업입니다.

홈플러스 배차지원 시스템 Renewal 작업에서의 본인의 역할

IDC에 ORACLE 기반으로 운영되고 있던 기존 시스템의 설계를 개선하고 새로운 프레임워크를 적용하여 구축했습니다.

당시, 발주사의 기존 담당자가 퇴사하고 새로운 담당자를 구할 수 없었으며, 사용 고객으로부터 시스템과 관련한 업무프로세스에 대한 설명을 받을 수 없는 상황이었으나, 업무를 자청하고, 문서화가 미비했던 기존 Oracle 기반 시스템을 소스코드 및 DB 데이터 레벨에서 직접 역공학(Reverse Engineering) 분석하여, 비즈니스 로직 손실 없이 MariaDB 기반으로 완전 재설계 및 구축을 완수했습니다.

홈플러스 배차지원 시스템이란?

차량관제 기능도 기본 제공되는 이 시스템은 홈플러스가 다수의 물류센터(상온, 냉장, Express)들로부터 전국 각 점포로 상품들을 보내는 전 과정에 있어서 차량들과 전달할 상품들을 적시에 짝을 지우고, 운전자에게 배차지시를 신속히 전달하며, 차량의 센터 출발, 점포 도착 등을 감지하여 차량과 화물의 움직임을 배차정보에 반영하는 등, 물류관리에서 가장 중요한 배차업무를 지원하는 시스템입니다.

홈플러스는 자신의 차량이 아닌 여러 운송사들의 차량을 사용합니다. 그런 이유로, 이 운송사들은 앞에 서술한 차량관제시스템의 사용자이며, 차량관제시스템의 이 운송사들 관련 정보는 다시 홈플러스 배차지원 시스템으로 전달되어 여러 업무에 연동됩니다.

홈플러스 배차지원 시스템 웹 인터페이스 캡처
홈플러스 배차지원 시스템 웹 인터페이스 캡처

신규 MariaDB 기반 홈플러스 배차지원 시스템(TOP) 구성

시스템(TOP)은 아래 그림의 빨간색 상자로 표시된 부분입니다.

AWS에 설치된 신규 홈플러스 배차지원 시스템(TOP)
AWS에 설치된 신규 홈플러스 배차지원 시스템(TOP)

사용한 언어, 프레임워크, 기술 등

구분 언어, 프레임워크, 기술 등
데이터베이스 MariaDB. Stored Procedure, Function, Trigger, Events
TOP 백엔드 Java & Spring Boot, GraphQL, REST, myBatis
TOP 프론트엔드 React, GraphQL, MUI
S3 Microservice Java & Spring Boot, REST, AWS Predefined URL handling
데이터 동기화, 파티션관리 Perl (DBI)

백엔드와 데이터베이스

백엔드는 최대한 가볍게하고 데이터베이스 I/O를 최소화하기 위해 주요 로직을 Stored Procedure로 구현했습니다. 백엔드는 데이터의 중간처리, 프론트엔드와 Stored Procedure의 연결, S3 마이크로서비스, 기타 외부 API로의 연결 등을 위한 경로로서의 역할이 주요한 역할입니다.

Stored Procedure

이 시스템의 배차 작업은 다량의 데이터를 동시에 활용하고, 많은 iteration을 포함하는 복잡한 작업입니다. 이러한 시스템의 경우 JPA와 같은 기술을 사용하게 되면 백엔드와 데이터베이스 사이의 I/O가 극대화되며, 시스템의 성능과 반응속도는 떨어질 수 밖에 없습니다.

복잡한 조건의 배차 알고리즘과 대량 데이터를 백엔드로 왕복(I/O)하지 않고 DB 내부에서 단일 트랜잭션으로 원스톱 처리하기 위해 Stored Procedure 기반으로 집약 설계했습니다. 1,500여 라인에 달하는 고난도 로직을 MariaDB로 포팅하면서, 모듈화된 Sub-Procedure로 구조화하여 시스템 성능과 응답 속도를 향상시켰습니다.

이 보다 덜 복잡한 시스템이라도 이러한 처리방식은 시스템의 불필요한 부하를 줄이고 성능을 개선하는데 도움이 될 수 있다고 생각합니다.

프론트엔드

프론트엔드는 React로 작성하고, 컴포넌트들은 Application에 맞게 모듈화하여 가능한 한 선언만으로 데이터를 처리할 수 있도록 함으로써 각 뷰에서 같은 Boilerplate 로직을 반복하지 않도록 했습니다.

또한, 사용자의 이용 편의를 위해 위의 [홈플러스 배차지원 시스템] 그림처럼 탭으로 이전에 사용한 기능에 즉시 접근할 수 있도록 했습니다.

Legacy 시스템에서는 레포트 엑셀 생성과 같은 작업을 백엔드에서 처리하면서 시스템에 Lag이 걸리는 일이 잦았으나, 새로운 시스템에서는 백엔드는 데이터 수집만하고, 최종 파일 생성은 프론트엔드에서 처리하게 하여 시스템 응답속도를 크게 개선했습니다.

이 외에도 CVO에서 사용한 모듈화 등의 작업을 진행했습니다.

공통데이터 동기화, 파티션 관리

홈플러스 배차지원 시스템은 차량관제시스템으로부터 홈플러스 운송사와 그 소속 차량들의 정보, 위치데이터 등을 동기화합니다.

또한, 홈플러스의 테이블들 중 일부는 Partition을 사용합니다. 데이터의 시간을 기준으로 달라지는 레코드별 파티션은 미리 준비되어야 하며, 이 파티션을 미리 생성해 두는 프로세스가 필요합니다. 주기적으로 실행되는 이 스크립트는 모든 파티션 정보를 읽은 후 며칠 내에 필요한 파티션을 파악하여 생성합니다.

모두 Perl 스크립트로 작성되고, crontab에 의해 실행됩니다.

Legacy 시스템과 신규 시스템의 프레임워크 변화

홈플러스 배차지원 시스템 Renewal 작업에도 차량관제시스템에서 수행한 것과 같은 프레임워크 변경을 실행했습니다. 차량관제시스템 Renewal 설명에 사용된 그림을 참조하시기 바랍니다.