하림 온라인물류센터 적재 전략 고도화

(주)하림산업 온라인물류센터 적재 전략 고도화

  • 하림 온라인 물류 센터의 신선 제품 보관 창고에서 창고 공간 효율 극대화와 제품 폐기율 최소화를 목표로, ECS(Equipment Control System)에 적용되는 룰 기반 적재 최적화 알고리즘을 개발·개선한 프로젝트
  • 개발 기간: 2024.2. - 2024.7.
  • 개발인원: 2명
  • 기술스택: C# .NET Framework

성과

  • 운영 안정성 향상: 스템 구축 후 약 2년(20개월 이상) 동안 무장애 운영 달성
  • 설비 효율 증대: 기존 1대만 가동되던 Gantry 설비를 전체 동시 운영 가능하도록 개선하여 물류 처리량 증대
  • 기술 부채 감소: 3종 디바이스(AS/RS, Miniload, Gantry)의 복잡한 레이아웃·규칙을 Strategy Pattern으로 분리·추상화하여 코드 가독성·유지보수성·확장성을 극대화

역할

  • 객체 지향 설계 강화 (Strategy Pattern 기반 리팩토링)
    • 무구조·스파게티 코드였던 기존 로직을 Strategy Pattern으로 완전 재구조
    • Factory 패턴과 함께 사용하여 설비별(3종) 상이한 적재 규칙을 유연하고 확장 가능하게 관리
  • 적재 알고리즘 신규 개발 (균등 분배 룰 개발)
    • SKU·LOT 기반 Gantry 적재 알고리즘 개발
    • LineBalancing을 위한 AS/RS & Miniload 적재 알고리즘 개발

소감

본 프로젝트는 각 설비의 적재 방식과 레이아웃이 모두 달라 다양한 적재 규칙을 유연하게 적용해야 하는, 구현 복잡도가 상당히 높은 과제였다. 기존 코드베이스는 객체지향 설계가 미흡하여 가독성과 재사용성이 낮았기 때문에, 프로젝트에 투입된 후 현실에 맞는 객체 모델링을 전면 재정립하는 작업부터 시작했다. 시스템의 기술적 난이도 자체는 높지 않았으나, 실제 물류 현장에서 발생하는 수많은 변수와 예외 상황들을 빠르게 파악하고 대응해야 했다. 논리적 설계와 현장 현실 사이의 괴리를 좁히기 위해 다수의 트러블슈팅을 수행하며 시스템을 안정화하는 과정에서, 이론과 실전은 다르다는 것을 몸소 체감할 수 있었다. 특히 추상적인 요구사항을 구체적인 객체와 규칙으로 풀어내는 역량이 크게 성장했다고 느꼈다.

결과적으로 해당 최적화 알고리즘은 2024년 6월 구축 완료 이후 약 2년간 단 한 번의 장애 없이 안정적으로 운영되고 있다. 적용 후 20개월 만에 보고된 최초 이슈 역시 고객 요구사항에 따른 정상 동작으로 판명되면서, 시스템의 견고함을 다시 한번 확인할 수 있었다. 이 경험을 바탕으로 이후 더 복잡한 물류 프로젝트에도 투입되어 성공적으로 완수함으로써, 조직 내에서 어려운 문제를 해결하는 개발자로서의 입지를 다질 수 있었다. 이번 프로젝트를 통해 저는 단순한 코딩 기술을 넘어, 현장을 이해하고 이를 설계에 반영하는 능력의 중요성을 깊이 깨달았다. 앞으로도 어떠한 환경에서도 빠르게 적응해 안정적인 시스템을 만들어 내는 개발자가 되겠다는 다짐을 하게 된 값진 경험이었다.

보안 상 설계와 관련하여 더 디테일한 내용은 해당 페이지에 담지 않음

트러블 슈팅(Trouble Shooting)

1) Dual Fork ASRS의 적재 파편화 해결을 통한 물류 운영 효율 최적화

  • 단일 적재 랙 우선 할당 알고리즘을 통한 장비 동선 단축 및 처리량 증대

  • 이슈내용

    • 랙 공간 파편화(Fragmentation): Dual Fork 장비가 상품을 창고에 띄엄띄엄 적재하여 창고의 밀집도가 떨어짐
    • 운영 효율 저하: 파편화로 인해 장비(Stacker Crane/Miniload)의 동선 길어져 입출고 사이클 타임 증가로 공장 전체 가동률 저하
  • 원인분석

    • Dual Fork의 특성: 장비는 2개를 동시에 들 수 있지만, 실제 입고 상황에 따라 1개만 적재(=단일 점유)하는 경우가 발생
    • 적재 규칙의 부재: 장비가 가까운 곳에 상품을 배치함으로써, 'Pair'로 채워져야 할 랙의 한쪽 면만 채워 파편 현상이 누적
  • 해결방안

    • 단일 적재 랙(Single-occupied Rack) 우선순위 할당: 새로운 상품을 적재할 때, 완전히 비어있는 랙보다 상품이 하나만 적재되어 있는 랙(Pair가 완성되지 않은 곳)을 1순위 후보지로 선정하는 알고리즘 적용
  • 결과

    • 적재 밀집도 향상: 랙 공간의 빈틈이 최소화되어 보관 효율이 극대화됨
    • 장비 동선 최적화: 특정 구역에 상품이 밀집됨에 따라 장비의 이동 범위가 압축되어 입출고 속도가 향상
    • 처리량(Throughput) 증대: 병목 현상 해소로 장비 효율성 개선

2) 미니로드 냉장창고 라인 간 적재 불균형 이슈 분석 및 해결

  • 가용 용량이 적은 라인이 소외되지 않도록, 선택 기준을 변경하여 라인 간 밸런스를 해결

  • 이슈내용

    • 라인 간 적재 불균형: 동일 SKU 입고 시 모든 라인에 균등 분산 적재되어야 하나, 1번 라인만 적재 대상에서 지속적으로 제외됨
    • 운영 효율 저하: 특정 라인(2~4번)에만 재고가 집중되어 설비 부하가 편중되고, 출고 시 특정 라인 병목 현상 발생 가능성 증대
  • 원인분석

    • 1번 라인에만 존재하는 창고 건물의 기둥으로 인해 수 십개의 셀을 사용 불가(Disabled) 처리
    • 알고리즘 결함: 기존 로직이 Empty 셀 수가 가장 많은 라인을 선택함
      • 예시: 2~4번 라인(Empty 100개) vs 1번 라인(Empty 96개)라면, 1번 라인은 항상 다른 라인보다 빈 공간이 적은 것으로 인식되어 선택 우선순위에서 영구적으로 밀려남
  • 해결방안

    • 판단 기준 변경: 라인 선택 기준을 적재 공간(Exist) 최소치로 변경.
    • 얼마나 차 있는지(Exist)를 기준으로 삼아, Disabled 셀의 유무와 상관없이 실제 작업량을 기준으로 균등 분배가 이루어지도록 함
  • 결과

    • 적재 정상화: 모든 라인의 Exist 셀이 0인 상태에서 시작하므로 1번 라인도 동일하게 선택
    • 부하 분산(Load Balancing): 기둥으로 인한 가용 용량 차이와 무관하게 실제 재고 수량을 기준으로 라인 간 밸런스 유지

3) 그리디(Greedy) 알고리즘을 통한 갠트리 적재 동선 최적화

  • 현장 상황을 간과한 적재 방식을 그리디 알고리즘 기반의 근접 집중 적재로 개선하여, 갠트리 이동 동선을 줄이고 출고 시간을 최대 1/3로 단축

  • 이슈내용

    • 물류 효율성 저해: 초기 설계된 분산 적재 방식이 실제 현장에서 컨베이어 이동 시간을 지연시키고 전체적인 물류 처리 속도를 떨어뜨림
    • 불필요한 동선 발생: 토트가 출고대와 먼 거리에 분산 적재됨에 따라 갠트리(Gantry) 장비의 이동 거리가 길어지는 문제 발생
  • 원인분석

    • 현장 요구사항 반영 미흡: 초기 알고리즘 설계 시 데이터 분석가가 현장의 예외 상황과 필수 제약 요소를 충분히 고려하지 못함
    • 단순 분산 규칙의 한계: 동일 SKU 입고 시 모든 스택장에 하나씩 배치하는 방식은 물리적 이동 거리와 시간(컨베이어 리드타임)을 간과한 이론 중심의 규칙이었음
  • 해결방안

    • 최대 적재 단수(8단)와 가장 근접하면서, 출고대와 가장 가까운 랙(Rack)에 우선적으로 토트를 적재
  • 결과

    • 출고 시간 단축: 입고 토트의 종류에 따라 상이하나, 출고 시간이 최대 1/3(약 33%)까지 단축되는 비약적인 성능 향상 확인.
    • 운영 효율화: 갠트리의 이동 동선을 최적화함으로써 창고 운영의 전반적인 생산성 제고

4) 전략 패턴을 이용한 Gantry 적재 알고리즘의 유연한 확장 구조 설계

  • 입고 조건(SKU·Lot·Grade)에 따른 복잡한 적재 로직을 전략 패턴으로 자산화하여, 새로운 탐색 룰을 유연하게 추가할 수 있는 개방-폐쇄 원칙(OCP)구조 구현

  • 이슈내용

    • 적재 전략의 복잡도 및 코드 경직성: Gantry 로봇이 토트를 적재할 때, SKU, Lot, Tote 등급의 동질성 여부에 따라 매번 다른 랙 탐색 전략이 필요
    • 유지보수 위험: 다양한 적재 룰을 if-else 조건문으로만 처리할 경우, 코드의 복잡도가 기하급수적으로 증가하고 새로운 룰을 추가하거나 기존 룰을 수정할 때 기존 코드에 영향을 미쳐 버그 발생 가능성이 높아짐
  • 원인분석

    • 런타임 의사결정 필요: 적재 위치는 시스템 실행 시점(Run-time)에 토트의 정보와 랙의 현재 상태를 바탕으로 동적으로 결정되어야 함.
    • 낮은 유연성: 하드코딩된 조건문 기반의 설계는 OCP를 위반하여 새로운 적재 전략을 추가하기 위해서는 기존 로직을 변경해야 하는 구조적 문제가 산재
  • 해결방안

    • 전략 패턴(Strategy Pattern) 도입

      • 다양한 탐색 전략을 개별적인 클래스로 분리하여 캡슐화
      • 공통된 인터페이스(추상 클래스)를 정의하여 런타임에 전략을 동적으로 교체할 수 있도록 설계
    • 책임의 추상화: SKU, Lot, Tote 등급 비교 및 빈 셀 탐색과 같은 공통 행위를 추상화하여 하위 클래스가 이를 구현하도록 강제함

  • 결과

    • 유연성 및 확장성 확보: 새로운 탐색 룰이 추가되어도 기존 로직을 변경하지 않고 새 전략 클래스만 구현하면 되므로 OCP를 준수하게 됨
    • 코드 가독성 및 유지보수성 향상: 거대한 if-else 블록이 사라지고 각 전략이 독립된 클래스로 관리되어 코드가 간결해지고 문제 해결이 용이해짐