쿠팡 SCM 워크플로우: 효율적이고 확장 가능한 low-code, no-code 플랫폼 개발

개발자, 비개발자 모두 쉽게 사용할 수 있는 데이터 구축 및 서비스 엔지니어링 플랫폼에 대하여

쿠팡 엔지니어링
Coupang Engineering Blog
14 min readDec 12, 2022

--

By Ryan Donghyun Jin (@atinjin)

본 포스트는 영문으로도 제공됩니다.

SCM(Supply Chain Management)은 상품 공급자, 운송 업체, 배송 서비스, 제품 등으로 이루어진 복잡한 네트워크를 데이터 흐름에 기반해 관리합니다. 쿠팡은 로켓 배송을 포함한 다양한 종류의 배송 서비스들을 제공하기 위해 전국 곳곳에 자체 풀필먼트 센터(fulfillment center, FC)를 구축했습니다. SCM 팀은 상품 수요를 예측하고, 구매 주문이행에 필요한 파이프라인을 만들고 관리합니다. 주요 업무는 구매 주문 및 센터 간 물류를 효율적으로 분배하기 위해 다양한 알고리즘 및 모델을 개발하고, 운영팀과 협업하는 것입니다. 팀에서는 물류 이동 정보 등 다양한 데이터가 다뤄지고 있습니다.

쿠팡 SCM 팀은 업무 특성상 운영팀과 개발자, 비즈니스 분석가(Business Analyst, BA), 데이터 사이언티스트(Data Scientist) 등 다양한 직군의 구성원들이 모여 함께 시스템을 만들고 운영합니다. 그렇기 때문에 모두들 시스템의 데이터를 활용하고, 그 데이터를 다시 시스템에 피드백으로 주면서, 팀의 플랫폼을 개발해나가고 있습니다.

이렇게 정보 및 아이디어 교환이 많은 팀에서 개발자로 일하면서 다음과 같은 이슈들을 자주 접하게 되었습니다.

“누구나 웹을 통해 데이터를 생성 또는 수정하고 생산한 데이터를 프로덕션 시스템까지 쉽게 연동할 수 있으면 좋을텐데…”

“새로운 시스템을 구축하지 않고, 도메인을 확장할 수 있는 방법은 없을까?”

“사용 중인 파이프인의 코드를 변경하지 않고도 바뀐 요구사항을 반영할 수는 없을까?”

“Low-code, no-code 시스템 개발?”

문제 해결 과정에서 점점 더 많은 주목을 받고 있는 기술 트렌드인 low-code, no-code가 큰 인사이트를 주었습니다. 개발자는 알고리즘 개발에 집중할 수 있고, 비개발자도 개발자 못지않은 결과물을 만들어 낼 수 있는 플랫폼이 필요하다는 생각에 no-code 데이터 빌더 및 low-code 서비스 빌더를 제공하는 SCM 워크플로우 플랫폼(SCM Workflow platform)을 개발했습니다.

저희는 앞으로 SCM 워크플로우를 통해 기존의 Jenkins, Airflow, Notebook 같은 툴이 가진 복잡성 및 연결성을 개선하여 완전히 대체하는 것은 물론, 한발 더 나아가 누구나 간단한 조작만으로도 데이터를 만들어내고 시각화해 간단한 서비스까지 론칭할 수 있는 플랫폼을 만들어나가려고 합니다.

목차

· No-code 데이터 빌더
· Low-code 서비스 빌더
· 기타 특징 및 기능
· 쿠팡 워크플로우 웹 인터페이스
· 향후 계획

No-code 데이터 빌더

쿠팡은 데이터에 기반해 모든 의사결정을 내립니다. 대량의 데이터가 마이크로서비스 아키텍처(MSA) 내의 도메인 단위로 나누어지고, 나누어진 데이터는 해당 도메인을 담당하는 팀에 의해 관리됩니다. 각 도메인 팀은 ODS, EDW, API 서비스 등 다양한 인터페이스를 통해 다른 팀들에게 데이터를 제공합니다.

하지만 비즈니스가 성장하고 다양해지면서 요구사항 또한 빠르게 바뀌고 많아졌습니다. 데이터 소스와 분석 쿼리 또한 수시로 변하게 되었고 이를 시스템에 빠르게 반영하고 프로덕션 결과까지 연동해야 했습니다. 간단한 데이터 검색 및 분석 작업도 여러 툴에 접속해야만 가능했기 때문에 담당 개발자가 아닌 사용자 입장에서는 작업 수행에 어려움이 있었습니다.

예를 들어 비즈니스 분석가 및 데이터 사이언티스트가 새 모델을 만들고 적용하려면, 담당 개발자에게 비즈니스 요구사항에 맞는 새로운 데이터 파이프라인을 개발해달라고 요청해야 했습니다. 정형화된 프로세스로 이루어진 작업이지만 막상 관련 툴을 개발하기도 애매한 일이라 개발자는 개발자대로, 관련 작업자는 작업자대로 매번 요청하고 기다리는 식의 프로세스 아닌 프로세스가 반복되고 있었습니다. 이와 같은 작업들로 인해 팀원들 간에 많은 커뮤니케이션 비용이 발생했습니다.

이런 문제를 해결하기 위해 SCM 워크플로우의 no-code 데이터 빌더(data builder) 기능을 개발했습니다. 데이버 빌더를 통해 데이터 소스 접근, 데이터 질의(query) 및 추출(export), 그리고 시스템 연동을 쉽게 수행할 수 있습니다. 개발자는 물론 비즈니스 분석가, 데이터 사이언티스트, 실무 운영진까지 코드 없이 안전하고 쉽게 데이터에 접근하고 데이터를 처리하고 시스템 연동까지 해낼 수 있습니다. 데이터 프로세서(data processor)로서 SCM 워크플로우는 팀 내에서 사용 중인 다음과 같은 공용 데이터 소스로 접근 가능합니다: Redshift, Hive, Presto, Aurora, MySQL, Elasticsearch, S3.

SCM 워크플로우의 데이터 빌더를 사용하는 과정은 다음과 같습니다. 예를 들어 풀필먼트 센터 간 상품 이관이 필요한 상황 에서 어떤 상품을 얼마만큼 언제 이관해야 하는지를 결정해야 할 경우, 데이터 빌더 사용자는 일종의 데이터 생산자로서 상품 이관 워크플로우를 다음과 같이 만들 수 있습니다.

  1. Hive, Redshift, Aurora 등 다양한 데이터 소스에 저장되어 있는 상품 재고 및 주문 데이터를 추출하는 노드를 생성합니다.
  2. 각 노드에 데이터를 추출할 수 있는 쿼리를 작성해 넣습니다.
  3. 데이터 추출이 완료되면 이를 입력 삼아 이관 상품수량을 계산하는 노드를 생성해 앞서 생성된 노드들과 연결합니다.

이런 간단한 과정을 통해 만든 워크플로우로 사용자는 이관이 필요한 상품의 수량을 계산할 수 있습니다.

이관 상품 수량 계산을 위한 쿠팡 SCM 워크플로우
그림 1. 이관 상품 수량 계산을 위한 워크플로우

또한 이 과정에서 복잡한 쿼리를 분할해 다수의 쿼리들로 만들 경우, 원하는 만큼 병렬 처리가 가능합니다. 순차 실행보다 더 빨리 결과를 얻을 수 있습니다. 질의의 결과는 사용자가 따로 저장하지 않고, 데이터 소비자가 될 개발자 또는 다른 팀에 워크플로우 ID 또는 URL, 파일 경로를 전달해 주면 됩니다. 콜백(callback) 기능을 사용해 다른 시스템과 연동도 쉽게 할 수 있습니다.

워크플로우의 스케줄링 기능을 통해 매일 정해진 시간에 데이터를 생성할 수 있습니다. 또한 시, 일, 주 단위 등으로 반복 처리되는 작업이 있다면 스케줄링을 통해 해당 작업을 자동화할 수도 있습니다.

다수의 분할된 쿼리들을 병렬로 처리하는 쿠팡 SCM 워크플로우
그림 2. 다수의 분할된 쿼리들을 병렬로 처리

Low-code 서비스 빌더

전국 쿠팡 풀필먼트 센터의 입고 및 출고는 상품 수요 예측 시스템, 풀필먼트 센터 인력 관리 시스템, 구매 주문 분배 시스템, 구매 주문 시스템, 센터 간 물류 이동 시스템 등 다양한 SCM 관련 시스템들에 의해 관리되고 있으며 해당 시스템들은 쿠팡의 공급망 관리(SCM)를 책임지고 있습니다. 각 도메인 팀은 담당하고 있는 시스템의 운영을 위해 서버를 구축하고 수많은 배치 시스템과 설정을 관리하고 있습니다.

문제는 비즈니스 도메인이 확장하면서 비슷한 시스템들이 계속 생겨나고 유지 및 보수 관련 공수가 계속 늘어나는 것이었습니다. 특히 수요 예측, 주문량 분배, 주문, 풀필먼트 센터 간 물류 이관 같은 서비스들은 시스템에서 생성된 데이터를 서로 주고받으면서 사용 및 운영되기 때문에, 각각의 시스템에는 비슷한 기능을 수행하는 코드들이 존재합니다. 핵심 알고리즘을 제외하면 대부분 데이터를 받고, 처리하고, 전달하는 과정들의 반복입니다. 이런 반복적인 일을 간편하게 처리할 수 있도록 SCM 워크플로우는 low-code 서비스 빌더를 제공합니다. 해당 서비스를 통해 개발자는 주요 알고리즘과 데이터 처리 부분에만 집중해 개발할 수 있게 되며 개발 효율성 및 시스템 안정성을 개선할 수 있습니다.

SCM 워크플로우의 low-code 서비스 빌더의 주요 기능은 다음과 같습니다.

개발 플랫폼 제공

서비스 개발을 위해 필수적으로 필요한 버저닝(versioning), 설정(configuration), 에러 로그 뷰어를 제공합니다. 그래서 개발자는 웹을 통해 디버깅이 가능하며 별도의 버전 관리 툴이 필요하지 않습니다. 또한 운영상 필요한 알람 기능, 워크플로우의 상태를 실시간으로 모니터링할 수 있는 대시보드(dashboard)를 제공하여 시스템 운영을 보조합니다.

공용 서비스 컴포넌트 제공

시스템 구축에 필수적인 서비스 컴포넌트를 제공하여 손쉬운 서비스 구성이 가능합니다. 메신저 알림(notification), REST 콜백(callback), 요청 재시도(retry) 등을 프로그래밍 관점의 기본 컴포넌트로 제공합니다. 또한 파일 업로드, 다운로드, 복사, 큐 메시지 발송 및 수신 등과 AWS 인프라를 쉽게 사용할 수 있는 서비스 블록을 활용해, 데이터와 메시지를 주고받는 시스템 구축이 가능합니다. 또한 사용자들의 피드백을 바탕으로 새로운 공용 서비스 컴포넌트를 계속 추가하고 있습니다.

커스텀 서비스 컴포넌트 등록 및 사용

커스텀(custom) 서비스 컴포넌트를 등록해 SCM 워크플로우의 확장성 및 유연성을 강화할 수 있습니다. 도메인 개발자는 핵심 알고리즘을 커스텀 서비스 컴포넌트로 만들고 이를 시스템에 등록하면 SCM 워크플로우는 이를 하나의 블록으로 만들 수 있게 됩니다. 등록한 블록을 통해 해당 도메인의 특화 기능을 워크플로우로 쉽게 통합할 수 있습니다. 이를 통해 머신러닝 모델의 동작도 가능한 복잡도가 높은 서비스도 구축 가능합니다. 커스텀 서비스 컴포넌트를 수정하거나 재사용해 보다 쉽게 시스템을 업그레이드하고 도메인을 확장할 수 있습니다.

그래픽 워크플로우 모델링

기존의 상용 워크플로우와 비교해 SCM 워크플로우가 가진 가장 큰 장점 중 하나는 캔버스 에디터(canvas editor)와 서비스 컴포넌트(블록) 간의 입출력 데이터 연동 방식입니다. 블록과 캔버스를 사용해 모델을 그리는 것은 Low code no-code 개발 플랫폼의 영향이 컸습니다. 블록화된 SCM 워크플로우의 서비스 컴포넌트들을 드래그 앤 드랍(drag & drop)으로 캔버스 에디터로 손쉽게 배치하고 연결 및 조합할 수 있습니다. 또한 워크플로우 내 모든 컴포넌트들은 런타임(runtime) 중에 다른 컴포넌트의 입출력 값을 참조해 각 컴포넌트의 입력 변수(input parameter)로 사용할 수 있습니다. 이를 통해 워크플로우 모델은 하나의 프로그램으로 동작할 수 있게 됩니다. 여기에 조건 분기(conditional statement), 반복(iteration), 병렬 처리(parallelism)와 같은 프로그래밍적 요소들도 추가되었고, 사용자는 이 요소들을 활용해 좀 더 복잡한 프로그램을 작성하고 고도화된 내부 애플리케이션을 만들어낼 수도 있습니다.

기타 특징 및 기능

No-code, low-code 외에도 SCM 워크플로우는 다음과 같은 특징과 기능을 갖고 있습니다.

확장성

SCM 워크플로우의 아키텍처는 확장성과 안정성에 주안점을 두고 설계되었습니다. 다양한 데이터 소스들에 대한 데이터 쿼리와 프로세싱이 안정적으로 이뤄져야 함은 물론 개별 사용자 및 각종 시스템에서 하고 있던 작업이 시스템 내로 통합될 수 있어야 하기 때문입니다. 모든 작업을 떠안지만 단일 장애점(Single Point of Failure, SPOF)은 되지 않도록, 각각의 서비스를 3개의 레이어로 구성되게끔 설계했습니다. 각 레이어를 클러스터링(clustering)해 처리량이 늘면 각 레이어의 클러스터가 스케일 아웃(scale out)될 수 있도록 하였습니다.

작업 간 독립성 및 안정성

SCM 워크플로우 엔진은 모델을 생성하고 관리하는 것은 물론 각각의 모델로부터 생성되는 인스턴스를 실행하고 작동시키는 일도 합니다. 워크플로우 인스턴스는 실행 중 자신만의 고유 상태를 가지며 엔진은 모델링된 상태 정보를 이용해 사용자가 정의한 작업을 순차, 병렬, 반복 처리하며 완료하게 합니다. 클러스터 내에서 작동할 수 있는 스케줄러를 통해 사용자가 원하는 시간에 원하는 개수만큼 인스턴스를 생성해 작업을 수행할 수 있습니다. 일련의 작업 수행 시 특정 작업에 오랜 시간이 걸리거나 특정 작업의 과도한 리소스 사용으로 인해 다른 작업이 받는 영향을 줄이기 위해, 각 작업은 SCM 워크플로우 시스템 내 클러스터에서 비동기 요청을 통해 독립적으로 실행됩니다. 워크플로우 엔진은 각 작업의 성공 및 실패를 모니터링하고 사용자의 설정에 따라 워크플로우를 진행시키는 역할만 합니다. 수많은 워크플로우의 계속되는 요청들을 안정적으로 처리할 수 있도록 워크플로우 엔진과 워커(worker)를 독립적으로 설계했습니다.

공용 데이터 처리 서비스

SCM 워크플로우 프로세서는 자체 데이터 처리(data processing) 서비스를 가지고 있습니다. 기본적으로 팀 내에서 서비스되는 각종 데이터 소스에 대한 정보를 공용 서비스 컴포넌트 형태로 엔진에 제공 가능하며, 사용자는 별도의 설정 없이도 데이터 소스에 대한 작업을 수행할 수 있습니다. 또한 데이터 프로세싱 유틸리티 기능과 파일 업로드, 다운로드, 병합(Merge) 등 실제 서비스에 쓰이는 기능을 제공해 사용자의 서비스 구현을 돕고 있습니다.

쿠팡 SCM 워크플로우 아키텍처
그림 3. SCM 워크플로우 아키텍처

쿠팡 워크플로우 웹 인터페이스

SCM 워크플로우 웹은 사용자 웹 인터페이스를 제공합니다. 워크플로우 모델 및 스케줄과 실행 히스토리를 생성, 편집, 관리할 수 있습니다. 워크플로우 웹 캔버스를 이용해 사용자는 등록된 서비스 컴포넌트들을 직관적으로 캔버스 위에 배치하고 컴포넌트들을 의존성에 따라 연결하고 컴포넌트들의 실행 순서를 지정할 수 있습니다. 코딩에 익숙하지 않은 사용자도 이 툴로 손쉽게 워크플로우를 만들 수 있습니다.

워크플로우 모델러

쿠팡 SCM 워크플로우의 모델링 캔버스
그림 4. 워크플로우 모델링 캔버스

인스턴스 실행에 대한 성공/실패 히스토리를 확인할 수 있습니다. 어떤 부분에서 얼마큼 시간이 걸렸는지, 실패했을 경우 에러 로그를 확인할 수도 있어 디버깅에 도움을 주고 있습니다.

쿠팡 SCM 워크플로우의 인스턴스 히스토리
그림 5. 워크플로우 인스턴스 히스토리

워크플로우 매니저

워크플로우 매니저를 이용해 각 팀은 프로젝트 또는 팀 별로 그룹을 생성하고 그룹 폴더 내에서 모델들을 관리할 수 있습니다. 그룹 폴더의 권한 설정으로 모델의 생성, 수정, 삭제 등을 제한할 수도 있습니다. 향후에는 개별 사용자 플레이그라운드(playground)와 같은 개인 워크스페이스(workspace)를 제공하여 프로덕션(production) 워크플로우 외에도 실험적인 작업이 가능하도록 지원할 계획입니다.

쿠팡 SCM 워크플로우의 모델 매니저
그림 6. 모델 그룹 관리

워크플로우 스케줄러

모델 별로 스케줄을 설정해 사용자가 원하는 시간에 원하는 작업을 자동으로 실행하고 완료할 수 있도록 지원합니다. 비개발자를 위해 Cron Expression을 생성할 수 있는 사용자 인터페이스도 별도로 제공하고 있습니다.

쿠팡 SCM 워크플로우의 작업 스케줄러
그림 7. 작업 스케줄 관리하기

워크플로우 대시보드

대시보드를 통해 워크플로우 엔진의 상태를 모니터링할 수 있습니다. 사용자는 개별 인스턴스 설정에 따라 메신저 알림을 수신할 수도 있지만, 대시보드를 통해 현재 팀 내에서 관리 중인 서비스 워크플로우의 상태를 확인하고 실시간으로 대응할 수 있습니다.

쿠팡 SCM 워크플로우 대시보드 내 인스턴스 모니터링 페이지
그림 8. 대시보드 내 인스턴스 모니터링 페이지

향후 계획

SCM 워크플로우로 새로운 컴포넌트와 시스템들이 계속 추가되고 있습니다. 이를 뒷받침하기 위해 다양한 플랫폼 기능들 또한 함께 개발되고 업그레이드되고 있습니다.

저희의 최종 목표는 SCM 워크플로우를 통해 팀 내 작은 프로젝트들을 마이그레이션해 관리 가능한 형태로 바꾸는 것입니다. 또한 데이터 처리 부분을 더 강화해 간단한 엑셀 작업부터 대용량 데이터 처리 작업까지 각각의 용도에 맞는 적정 데이터 기술을 제공하려고 합니다. 또 다른 목표는 일반 사용자를 위한 애플리케이션 생성 플랫폼으로의 성장입니다. 사용자가 입출력 인터페이스를 직접 구성하고 다른 사용자가 만든 애플리케이션을 활용해 시스템과 상호작용할 수 있게 만드는 것입니다.

앞으로도 계속 SCM 워크플로우를 개발자 및 비개발자 모두 함께 사용할 수 있는, 사용하기 쉽고 편리하면서 동시에 확장성을 가진 플랫폼으로 발전시켜 나가겠습니다.

SCM 워크플로우를 더 발전된 플랫폼으로 만들어 나가는데 관심이 있으시다면, 쿠팡 채용 공고를 확인해 보세요!

--

--

쿠팡 엔지니어링
Coupang Engineering Blog

쿠팡의 엔지니어들은 매일 쿠팡 이커머스, 이츠, 플레이 서비스를 만들고 발전시켜 나갑니다. 그 과정과 결과를 이곳에 기록하고 공유합니다.