- Published on
BA111. 동적 버퍼와 역산 스케줄링: 납기를 기준으로 공장을 재구성하는 방법

월요일 오전 7시. 거대한 공장이 일주일의 포효를 시작하기 딱 한 시간 전. 2층 생산관리팀 사무실의 공기는 무겁고 서늘했다. 주말 내내 가라앉아 있던 먼지 냄새와 믹스 커피의 단내가 엉겨 붙어 숨이 막힐 듯했다.
생산계획 파트장는 듀얼 모니터에 수십개 행짜리 엑셀(Excel) 스케줄 파일을 띄워놓고 충혈된 눈을 비비고 있었다. 화면에는 3개월 치 수주 백로그(Backlog) 중에서 다음 납기를 맞추기 위해 그가 밤새 선별해 낸 50건의 타겟 오더가 빼곡히 정리되어 있었다. 그는 엑셀에서 정리한 일정계획을 쳐다보며 말했다.
"자, 이번 주도 1공장 풀가동입니다. 선별된 50건 전부 기계별로 할당해서 최대 가동률로 꽉꽉 채워 놓습니다. 이대로 매크로 돌려서 작업 지시서 출력하고 현장 반장들한테 뿌리세요. 원자재 싹 다 불출 계획대로 원자재 불출해서 기계 옆에 깔아두고. 스핀들 1분이라도 쉬면 문제 생깁니다."
파트장의 손가락이 익숙하게 엑셀 파일의 [인쇄(Print)] 버튼을 누르려던 찰나.
"그 마우스, 당장 손에서 놓으세요." 사무실 문가에 선 팀장의 서늘한 목소리가 아침 공기를 갈랐다.
"팀장님. 백로그에 쌓인 물량이 끝이 없습니다. 빨리 스케줄대로 현장으로 자재를 뿌려야..."
"회사가 이제 겨우 어렵게 EXA 엔진을 도입했습니다. 그런데도 아직도 엑셀을 부여잡고 과거의 밀어내기(Push) 관성으로 기계를 돌리겠다는 겁니까? 우리는 이미 EXA 엔진 사용 교육을 받았어요. 그런데도 기계를 100% 채우고 바닥에 쇳덩어리를 깔아두겠다는 과거의 엑셀 수식이 지난 15년 동안 이 공장을 동맥경화로 박살 냈다는 걸 아직도 모릅니까?"
그는 모니터 앞을 가로막고, 엑셀 창을 닫아버렸다.
"오늘부터 룰을 바꿉니다. 엑셀로 기계 가동률이나 짜맞추며 현장에 종이 쪼가리를 뿌리는 짓은 끝났습니다. EXA를 한낱 데이터 저장소 따위로 가볍게 보지 마십시오. 당장 그 선별된 50건의 데이터, EXA의 스케줄링 엔진 안으로 밀어 넣으세요. 우리가 감으로 했던 엑셀기반 지시를 내리기 전에, 이 오더들이 엔진의 '샌드박스(Sandbox)' 안에서 피 튀기게 싸우며 가장 완벽한 흐름(Flow)과 최적의 생산스케쥴을 스스로 증명해 내도록 만드십시오"
압도적인 팀장의 기세에 파트장은 마른침을 삼켰다. 그는 닫혀버린 엑셀 대신, 짙은 흑색 배경의 EXA 시스템을 띄웠다. 50건의 타겟 오더를 엔진의 샌드박스로 이관하고, [스케쥴링 생성] 버튼을 눌렀다. 이것은 최적 생산스케쥴을 찾아 내기 위한 엔진의 시작점이었다. 엔진은 스케쥴을 생성하고 스스로 시뮬레이션한 후 현재 스케쥴의 적정성을 평가하고 정책 변경 여부를 제안한다. 왜냐하면 스케쥴 생성은 기본적으로 회사의 생산정책과 핵심 공정의 설정 값에 의존해 생성하기 때문이다.
눈에 보이지 않는 차가운 지성, EXA 스케쥴링 엔진이 마침내 인간의 낡은 관성을 밀어내고 공장의 숨통을 틀어쥐기 시작한 첫 번째 순간이었다.
잠시 시점을 돌려, 인간의 눈에는 보이지 않는 EXA 엔진의 내부(Abyss) 속으로 직접 들어가 보자.
엔진의 메모리 한가운데로 50개의 오더가 쏟아져 들어온다. 시스템은 인간처럼 뭉뚱그려 생각하지 않는다. 엔진은 가장 먼저 오더 #18(K-모터스 특수 샤프트)을 낚아채어, 뼈와 살을 분리하듯 BOM(Bill of Materials, 자재명세서) 데이터를 해체하기 시작했다.
- [BOM Level 0] 완성품: K-모터스 특수 샤프트 (요구 납기: 다음 주 금요일 17시)
- [BOM Level 1] 하위 부품: 단조강 메인 바디, 특수 베어링, 연결 플랜지.
스케쥴링 엔진 로직은 과거의 시스템들처럼 '오늘 당장 첫 공정을 시작하라'고 밀어내지(Push) 않는다. 엔진의 시선은 철저하게 미래의 절벽, 금요일 17시(납기일)라는 북소리(Drum)에 꽂혀 있다. 거기서부터 거꾸로 시간을 파먹어 들어오는 역산(Backward Scheduling)이 시작되었다.
[타임라인 역추적 전개]
- [출하 검사: 4시간] ← 금요일 13시 완료 요망.
- [연마 공정: 8시간] ← 목요일 17시 완료 요망.
- [열처리 공정: 24시간] : 수요일 09시 완료 요망. (★공장 전체의 병목, Constraint)
- [황삭/정삭 가공: 16시간] : 월요일 17시 완료 요망.
엔진은 각 공정의 순수 작업 시간(Run Time)과 샛업 시간(Setup Time), 그리고 대기 시간(Queue Time)을 촘촘하게 엮어 조업 캘린더에 맞춘 '표준 출하 버퍼(Standard Buffer)'를 연산했다. 총 52 작업 시간. 즉, 6.5 영업일이 도출되었다.
과거의 스케줄러라면 여기서 연산을 멈추고 납기일에서 6.5일을 뺀 날짜를 자재 투입일로 뱉어냈을 것이다.
하지만 EXA 스케줄러의 진정한 공포이자 위대함은 여기서부터 시작된다. Exa 엔진에게 이 6.5일이라는 '표준 출하 버퍼'는 진실이 아니다. 그것은 과거의 평균치로 만들어진, 아주 순진하고 희망찬 '사전 확률(Prior)'에 불과하다.
이제 시스템은 EXA의 심장부이자 게임 체인저(Game Changer)로 불리는 '베이지안 Auto Tuner' 알고리즘의 방아쇠를 당긴다. 실시간 현장 통제 중에는 서버 부하로 돌리기 힘든 이 육중한 베이지안 추론 엔진이, 1주일에 단 한 번, '주간 스케줄링' 단계에서는 모든 자원을 독식하며 깨어나는 것이다.
이 'Auto Tuner'는 단순히 버퍼의 길이를 늘리고 줄이는 1차원적인 작업이 아니다. EXA의 MCMC 모델이 서버의 백그라운드에서 과거 피 묻은 실적 데이터 속으로 파고들어, 공장을 구성하는 근본적인 '파라미터(Parameter)' 자체를 스스로 연산하고 제안하여 업데이트해 버린다.
과거의 생산기록 데이터를 MCMC가 수십만 번의 무작위 발걸음(Random Walk)으로 훑고 지나가자, 인간의 눈에는 보이지 않던 충격적인 진실들이 확률 분포로 도출되었다.
- [품목-공정별 가공시간 및 셋업타임 재조정] K-모터스 특수 샤프트는 장마철 습도가 80%를 넘을 때, 열처리 후 변형 불량률이 평균 2%에서 무려 15%로 치솟는 기괴한 분포(Fat-tail Risk)를 가지고 있었다. EXA의 Auto Tuner는 이 '불확실성의 꼬리'를 잡아내어 해당 품목의 '불량률 및 셋업타임 파라미터'를 즉각 상향 업데이트했다.
- [최적의 이동배치 및 리드타임 동적 튜닝] 무거운 단조강을 기존의 습관대로 이동배치 1,000개 단위로 옮길 때 발생하는 대기 시간(Queue Time)과 이동 시간 파라미터가, 과거에는 고정값(2시간)이었으나, 추론 결과 실제로는 병목 현상과 결합하여 평균 5.5시간을 잡아먹고 있음이 증명되었다. Auto Tuner는 즉각 최적의 이동배치 사이즈를 제안하고 대기 시간 파라미터를 실시간으로 교정했다.
이 Auto Tuner가 갱신한 파라미터들을 융합하여, 베이지안 엔진은 가장 현실적이고 잔혹한 '사후 확률(Posterior)' 곡선을 그려냈다.
그 결과, 순진하게 6.5일이면 충분할 줄 알았던 '사전 확률 버퍼'는 허상으로 판명 났다. MCMC가 도출해 낸 99% 납기 준수 확률의 '진짜 버퍼', 즉 '동적 버퍼(Dynamic Buffer)'는 무려 9 영업일로 거대하게 팽창해 버렸다.
하지만 여기서 시스템은 거대한 '시간의 모순(Temporal Paradox)'에 직면한다. 작업가능한 시작점은 '월요일 오전 08시'다. 금요일 납기까지 남은 시간은 고작 40 작업 시간(5영업일). 그런데 이 부품을 완성하려면 MCMC가 보증한 최소 9 영업일(72 작업 시간)이 필요하다.
역산(Backward) 로직에 따르면, 이 오더의 자재 투입선(Rope)은 이미 지난주 수요일에 풀렸어야 했다. 하지만 현실의 시간은 과거로 흐르지 않는다. 지난주 수요일로 돌아가 기계를 켤 수는 없다.
이 순간, EXA 엔진의 심장부에서 트리거가 발동한다. IF Release_Date < Current_Time THEN Switch_to_Forward_Scheduling
역산으로 과거의 벽에 부딪힌 시스템은, 즉각 오더 #18번의 연산 방향을 미래를 향해 거칠게 반전시킨다. 시작점을 '(월요일 08시)'으로 강제 고정하고, 남은 9 영업일어치의 파라미터를 앞으로 밀어내는 포워드(Forward) 스케줄링으로 전환한 것이다.
- 월요일 08시부터 72 작업 시간을 앞으로 밀어낸다.
- [가공] -> [열처리] -> [연마] -> [검사]
- 도출된 현실적인 완료 예정일: 다음 주 화요일 14시.
엔진은 칩셋 안에서 차갑게 판결을 내린다. "오더 #18번은 기계가 쉬지 않고 완벽하게 돌아가도, 물리적으로 최소 3영업일의 납기 지연이 거의 확정적으로 예상된다." 시스템은 이 오더의 라벨을 경고성인 적색(Super Red)으로 강제 변이시켰다.
하지만 비극은 여기서 끝나지 않는다. 공장은 고독한 하나의 라인이 아니다. 오더 #18이 포워드 스케줄링으로 밀려나면서, 이 부품이 공장의 절대 병목(Bottleneck)인 '열처리 3호기'를 점유하는 시간이 이번 주 수요일 오전으로 고정되었다. 그런데 역산(Backward)을 통해 정상적으로 스케줄을 배정받은 덩치 큰 오더 #12와 오더 #33 역시, 정확히 수요일 오전에 열처리 3호기 진입을 예약해 둔 상태였다.
데이터베이스 내부에서 수십 톤의 가상 쇳덩어리들이 열처리로의 좁은 입구를 두고 정면으로 충돌했다.
엔진은 즉각 '병목 계획 부하(Constraint Planned Load)'를 연산했다. 수요일 오전 09시 기준, 열처리 3호기의 수용 능력(Capacity)은 100%. 하지만 세 개의 오더가 한꺼번에 몰려들며 요구하는 부하량은 무려 142.5%.
여기에 Auto Tuner 연산이 미리 업데이트해 둔 리스크 가중치가 조용히 개입하여 확인 사살을 가한다. "오더 #12는 불량이 발생하여 열처리 시간이 2배로 늘어날 확률적 꼬리(Fat-tail)를 가지고 있다." 엔진은 이 리스크 파라미터를 병목 부하에 덮어씌워버렸다.
최종 병목 계획 부하: 168.2%.
엔진의 길고 무거운 연산이 끝났다. 이 지옥 같은 시뮬레이션 결과를, 샌드박스는 인간의 대시보드 위로 무자비하게 토해냈다.
단 4.5초. (MCMC의 연산이 포함되었기에 평소보다 조금 더 걸린 시간이었다.) 화면에 1차 시뮬레이션 결과가 뜨자, 대시보드 전체가 시뻘건 핏빛으로 물들었다. 기태의 얼굴이 하얗게 질렸다.
[ 1차 시뮬레이션 평가 결과 (Push & Overload) ]
- 납기 적중률 (Due Date Hit Rate): 54.2% (치명적 붕괴. 오더 #18 등 다수 지연 확정)
- 병목 계획 부하 (Constraint Load): 168.2% (열처리 3호기 마비. 기계가 멈추고 현장이 터짐)
- T/Cu (단위당 스루풋): $110 / Hour (최적치 절반 수준. 덩치만 큰 악성 재고가 병목 점유 중)
"팀장님! 미쳤습니다! 역산하다가 시간 모자란 오더들이 포워드로 전환되면서 뒤로 다 밀렸습니다. 게다가 수요일에 병목 앞에 물건들이 엉켜서 부하율이 168%를 찍습니다! 100% 풀로 돌려도 모자랄 판인데, 이거 어떻게 빼냅니까!"
뒤에서 묵묵히 모니터를 지켜보던 민재가 기태의 의자를 돌려세웠다.
"이게 바로 당신이 머릿속으로 '일단 다 쑤셔 넣어!'라고 외쳤을 때, 현실의 공장 바닥에서 일어날 끔찍한 연쇄 추돌 사고입니다. 베이지안 Auto Tuner가 과거의 불량 데이터와 대기 시간 파라미터까지 싹 다 긁어와서 미래의 지옥을 미리 보여준 겁니다."
그가 화면을 짚었다. "기계 능력은 무한대가 아닙니다. 168%를 밀어 넣으면 168%가 나오는 게 아니라, 기계가 뻗고 사람들이 우왕좌왕하다가 출하량이 0%로 수렴합니다. 자, 이제 이 핏빛 도마 위에서 수술을 시작합니다."
민재가 파라미터(Parameter) 조정 창을 열었다.
"첫째. 열처리 3호기의 '목표 계획 부하율' 파라미터를 100%에서 85%로 강제로 낮춥니다."
"네? 168%가 몰려있는데 기계를 15%나 덜 돌리라고요?"
"그 나머지 15%는 아무것도 안 하고 멍하니 비워두는 **'여유 능력(Protective Capacity)'**입니다. 영업팀이 당장 뛰어와 무리한 납기 당김을 시전하거나, 검사실에서 불량이 터져서 위기 지수가 치솟을 때 그 충격을 흡수할 텅 빈 공간이 없으면 공장은 즉사합니다. 100% 가동률은 마약입니다."
"둘째. EXA 엔진이 제안하는 최적화 룰을 적용합니다." 기태가 시스템의 [Auto Tune] 버튼을 활성화하자, 엔진이 즉각 오더들의 우선순위를 엎어버렸다.
화면을 지켜보던 기태가 고개를 갸웃거렸다. "어? 팀장님. 시스템이 왜 이러죠? 원래 납기일이 더 급한 오더 #33번을 뒤로 밀어버리고, 납기가 일주일이나 남은 오더 #12번을 병목 설비 맨 앞으로 끌어당겼습니다. 조건이 동일한 상황인데 왜 엔진이 우선순위를 제멋대로 바꾼 겁니까? 이거 오류 아닙니까?"
민재가 미소를 지으며 화면의 우측 하단 지표를 가리켰다. "오류가 아닙니다. 그게 바로 엔진이 'T/Cu(Throughput per Constraint unit)' 기준으로 랭킹을 다시 매긴 결과입니다."
"티퍼씨유... 제약 공정 단위당 스루풋 말씀이십니까?" "맞습니다. 납기일이 아무리 급해도, 우리 회사의 목숨줄인 열처리 3호기를 1시간 점유했을 때 벌어들이는 '현금 창출 능력'이 떨어지면 뒤로 밀리는 겁니다. 오더 #33번은 덩치만 크고 마진은 없는 악성 재고입니다. 시스템은 조건이 겹칠 때, 어떤 오더를 병목에 먼저 태워야 회사의 금고에 가장 빨리 돈이 쌓이는지 계산해서 줄을 다시 세운 겁니다."
"아..." 기태가 탄성을 뱉었다. "그리고 Auto Tuner가 권고한 대로, 오더 #33번의 거대한 쇳덩어리들은 이동배치(Transfer Batch) 사이즈를 1,000개에서 50개 단위로 무자비하게 쪼개버리십시오. 빈틈을 비집고 들어갈 수 있는 작은 모래알처럼 유연하게 만드는 겁니다."
기태의 손놀림이 바빠졌다. 여유 능력을 85%로 맞추고, 엔진이 조정한 T/Cu 우선순위를 수용하며, 이동배치를 쪼갠 뒤 [2차 시뮬레이션 Run] 버튼을 다시 눌렀다.
엔진이 다시 격렬하게 회전했다. 이번에는 베이지안 엔진이 환호했다. "이동배치가 50개로 줄었다. 이는 만약 용접 불량이 발생하더라도 한 번에 폐기되는 팻테일 리스크의 덩어리가 극적으로 작아졌음을 의미한다!" MCMC가 사후 확률을 다시 업데이트하며 확률 분포의 꼬리가 안정화되었다. 그러자 유한생산능력 Exa Scheduling Engine이 요구하는 동적 버퍼의 크기가 날렵하게 다이어트되었다. 병목 앞에서 168%로 정면충돌하던 물량들은, 50개 단위로 쪼개진 채 교차로의 신호등처럼 질서 정연하게 틈새를 타고 흘러가기 시작했다.
단 1.5초. 새롭게 렌더링 된 2차 시뮬레이션의 대시보드는 비현실적일 만큼 평온했다.
[ 2차 시뮬레이션 평가 결과 (Tuned) ]
- 납기 적중률: 98.8% (지연 확정이던 오더 #18도 파편화된 빈틈을 타고 아슬아슬하게 세이프)
- 병목 계획 부하: 84.5% (목표했던 15%의 여유 능력을 완벽하게 확보)
- T/Cu: $225 / Hour (수익성 극대화 달성)
기태 파트장이 감격에 겨운 얼굴로 화면을 쓸어내렸다. "부하율이 84%로 떨어졌는데도, 시간당 버는 돈은 두 배가 뛰고 납기도 다 맞춥니다... 기계를 쉬게 했는데 효율이 올라가다니... 팀장님! 바로 확정(Commit) 버튼 누르겠습니다!"
"멈춰요." 민재의 손이 기태의 마우스를 잡은 손목을 덮었다. "수학적 시뮬레이션은 끝났습니다. 갠트 차트(Gantt Chart) 엽니다."
[페이즈 4: Auto Tuner의 경고와 아키텍트의 확인]
화면이 전환되며, 50개의 오더가 수백 개의 직사각형 블록, 이른바 **'퍽(Puck)'**으로 쪼개져 각 설비의 타임라인 위에 촘촘히 박혀 있었다. 테트리스처럼 완벽하게 짜맞춘 수학적 예술 작품이었다.
하지만 기태의 눈에 이상한 점이 들어왔다. 메인 CNC 3호기 라인에 배열된 퍽(Puck)들 사이의 간격이었다. "팀장님. 여기, 주철 가공(오더 #22) 퍽 바로 뒤에, 티타늄 초정밀 가공(오더 #45) 퍽이 붙어야 정상인데... 시스템이 중간에 2시간이나 빈 공간(White Space)을 강제로 벌려두고 오더 #45를 뒤로 밀어버렸습니다. 제가 파라미터 세팅을 잘못한 걸까요?"
기태가 당황하며 마우스를 움직이려 하자, 민재가 묵직한 미소를 지으며 그의 어깨를 짚었다. "기태 파트장. 그게 바로 엑셀 쪼가리와 Exa 시스템의 차이입니다. 엔진이 오류를 낸 게 아니라, 엔진이 **'우리의 치명적인 오류'**를 잡아낸 겁니다."
"네? 오류라뇨?" "BOM 마스터 데이터를 열어보십시오. 누군가 과거에 엑셀로 타이핑을 치면서, 오더 #45(티타늄)의 셋업 타임(Setup Time)을 단 10분으로 입력해 두었습니다. 완벽한 휴먼 에러죠."
민재가 갠트 차트의 빈 공간을 가리켰다. "주철을 깎고 나면 스핀들에 미세한 진동 열이 남고, 절삭유 탱크에는 찌꺼기가 섞입니다. 그 상태에서 기계를 식히고 청소하지도 않고 수백만 원짜리 티타늄을 물리게 되면 칩이 엉겨 붙어 100% 스크래치 불량이 납니다. 물리적인 셋업 타임은 10분이 아니라 최소 2시간이 필요하죠."
기태가 아차 하며 이마를 짚었다. "아... 맞습니다. 그럼 엔진은 셋업 타임이 10분이라고 적혀 있는데도, 어떻게 저기를 2시간이나 비워둔 겁니까?"
"베이지안 Auto Tuner의 솜씨입니다." 민재의 눈이 빛났다. "Auto Tuner가 과거 실적 데이터를 MCMC로 긁어모으다 보니, 이상한 패턴을 발견한 겁니다. '오더 #45(티타늄)는 유독 오더 #22(주철) 작업 직후에 투입되었을 때마다 불량률이 폭증하거나, 현장 작업자들이 알아서 기계를 세워두고 작업을 늦추더라'는 사실을 말이죠. 시스템은 마스터 데이터의 숫자(10분)를 맹신하지 않고, 현장의 실제 행동 패턴을 학습하여 스스로 2시간의 완충 공간(Buffer)을 타임라인에 강제로 삽입한 겁니다."
"소름이 돋네요..." 기태가 마른침을 삼켰다. "우리가 놓친 폭탄을 기계가 해체해 준 거군요." "마스터 데이터의 셋업 타임 수정은 나중에 별도로 진행합시다. 지금은 EXA 엔진이 제안한 이 완벽한 타임라인을 그대로 수용합니다."
차가운 데이터의 뼈대(ExaScheduling Engine), 확률의 신경망을 넘어 오류마저 스스로 교정해 내는 베이지안 Auto Tuner, 그리고 그 결과를 해석해 내는 아키텍트의 직관이 하나의 갠트 캔버스 위에서 완벽하게 조율된 제조업의 궁극적인 마스터피스(Masterpiece)였다.
"기태 파트장. 이제, 역사의 방아쇠를 당기십시오."
[페이즈 5: 확정(Commit)과 거대한 흐름의 시작]
기태가 묵직한 마음으로 대시보드 우측 상단의 [주간 스케줄 확정(Commit Weekly Schedule)] 버튼을 클릭했다.
딸깍. 그 순간, 샌드박스에서 수십만 번의 시뮬레이션을 치른 완벽한 조율 데이터가 라이브(Live) 데이터베이스의 트랜잭션을 타고 실제 운영 환경으로 강하게 덮어씌워졌다. 50건의 운명과 수백 개의 퍽(Puck)들이 움직여야 할 '절대 시간'이 바위처럼 고정되었다.
[에필로그 : 확정된 스케줄, 그리고 1개월 뒤의 텅 빈 공장]
그렇게 스케줄이 확정되고 시스템이 현장을 완벽하게 통제하기 시작한 지 정확히 1개월이 지난, 어느 월요일 오전 8시.
주간 작업 시작을 알리는 육중한 벨 소리가 공장에 울려 퍼졌다.
과거의 월요일 아침은 전장(戰場)이었다. 기태가 무식하게 오더를 밀어내기(Push)로 던지던 시절, 아침 8시가 되자마자 창고의 거대한 셔터문이 비명을 지르며 열렸고, 4대의 지게차가 쉴 새 없이 수백 톤의 쇳덩어리들을 퍼 날랐다. 통로마다 팰릿(Pallet)이 산더미처럼 쌓여 사람 한 명 지나가기 힘들었고, 반장들은 허리춤의 무전기를 부여잡고 "어떤 놈이 내 자재 앞을 가로막았냐"며 쌍욕을 섞어가며 싸워댔다. 모두가 땀을 뻘뻘 흘리며 바쁘게 뛰어다녔지만, 정작 출하장에 나가는 물건은 없었다. 그것은 '생산'이 아니라 '혼돈(Chaos)'이었다.
하지만 1개월이 지난 오늘, 공장의 아침 풍경은 소름 끼치도록 낯설고 고요했다.
자재 창고 앞. 지게차가 대기하고 있었지만, 과거처럼 쇳덩어리들이 미친 듯이 쏟아져 나오지 않았다. 창고 담당자가 PDA로 바코드를 스캔하자, Exa 시스템이 단호하게 빗장을 걸어 잠그고 있었다.
"삐이익- [투입 불가: Release Date 미도래. 자재 출고 락(Lock) 유지]"
이 무자비한 철칙이 당장 오늘 투입될 필요가 없는 수십 건의 오더를 창고 안쪽에 단단히 가둬두고 있었다(Choking). 창고의 자동문은 오직 오늘 투입 시점이 도래한 물량, 그것도 시스템이 정밀하게 쪼개놓은 '50개 단위'의 이동배치 물량만을 모래알처럼 스르륵스르륵 현장으로 뱉어낼 뿐이었다.
1층 현장으로 내려간 민재와 기태의 눈앞에, 지난 한 달간 뼈를 깎는 통제 끝에 비로소 정착된 믿을 수 없는 경이로운 광경이 펼쳐지고 있었다.
산더미 같던 재공품(WIP) 장애물이 완전히 사라지자, 15년 만에 처음으로 1,000평 규모의 공장 전체의 에폭시 회색 바닥이 광활하게 시야에 들어왔다. 탁 트인 공간 속에서, 작업자들은 더 이상 엉켜 있는 자재 더미 속에서 도면을 찾느라 헤매거나, 지게차가 지나가기를 기다리며 서성이지 않았다.
시스템의 엄격한 통제를 뚫고 현장에 진입한 작은 쇳덩어리들은, 1차 프레스 공정에서 깎이자마자 기계 옆에 쌓일 틈조차 없이 무인운반차(AGV)에 실려 다음 공정으로 쉴 새 없이 넘어갔다. 고여서 썩어가는 거대한 웅덩이가 아니라, 좁고 가파른 계곡을 타고 맹렬하게 흘러내리는 맑고 압도적인 '급류(Flow)' 그 자체였다.
현장 한편에서는 비제약 설비(일반 밀링 머신) 5대가 전원이 꺼진 채 조용히 멈춰 서 있었다. 과거 같았으면 기계가 노는 꼴을 보지 못하는 반장이 아무 쇳덩어리나 물려서 돌려가며 '가짜 실적'을 쌓았을 테지만, 지금은 누구도 그 기계를 탓하지 않았다. 작업자들은 대시보드를 보며 커피를 마시거나, 다음 세팅을 위해 툴(Tool)을 여유롭게 닦고 있었다.
기계가 쉬고 있다는 것은 공장이 놀고 있다는 뜻이 아니라, 가장 무서운 병목(열처리로)의 속도에 맞춰 전 공정이 완벽한 조화를 이루며 흐름(Flow)을 제어하고 있다는 가장 우아한 증거였기 때문이다.
그리고 약속된 시간이 되자, 메인 CNC 3호기는 주철 가공을 끝내고 시스템이 스스로 벌려놓은 여유 공간에 맞춰 정확히 2시간 동안 작동을 멈췄다. 작업자들은 콧노래를 흥얼거리며 절삭유를 교체하고 스핀들의 칩을 닦아냈다. 현장의 대형 모니터에 떠 있는 1E1E1E 짙은 배경의 Exa 대시보드는, 이 2시간의 기계 침묵과 비워둔 15%의 여유 능력을 '완벽한 계획의 일부'로서 평온한 초록색(Green)으로 모니터링하고 있었다.
기태 파트장이 텅 빈 현장을 바라보며 떨리는 목소리로 중얼거렸다. "팀장님... 한 달 전과 비교하면 기계가 멈춰 있는 시간이 이렇게나 많은데, 최종 조립 라인에서 쏟아져 나오는 완성품의 속도는 평소보다 1.5배나 빠릅니다. 통로는 텅 비어있는데, 시간당 버는 돈은 두 배입니다. 현장에 고성도 없고, 뛰는 사람도 없습니다. 너무 고요해서... 이젠 경이로울 정도입니다."
민재가 묵직한 미소를 지었다. "스케줄링의 진정한 위대함은 스핀들을 100바퀴 돌려서 현장을 아수라장으로 만드는 데 있지 않습니다. 베이지안 Auto Tuner의 거대한 뇌수가 짚어낸 진실과, 에러를 잡아내는 아키텍트의 직관이 피 튀기게 협상하여, '가장 완벽한 타이밍에 창고 문을 열어주는 것(Choking the Release)'. 그것만 완벽히 통제하면, 현장은 스스로 이렇게 거대하고 고요한 강물이 되어 출하장이라는 바다로 흘러갑니다."
이 압도적이고 치밀한 스케줄링의 뼈대가 세워졌기에.
어느 수요일 오후, 영업과장이 일정을 당겨달라고 무리하게 악을 써도 (Case 1). 야간조 요원이 꼼수를 부려 초록색 오더를 먼저 치려다 트랜잭션 롤백에 막혀 쌍욕을 뱉어도 (Case 2). 금요일 아침, 검사실에서 불량이 터져 P-에어로의 위기 지수가 130%로 치솟아도 (Case 3).
이 거대한 공장의 척추는 결코 부러지지 않는다. 애초에 현장에는 길을 막고 있는 쇳덩어리 쓰레기 더미가 존재하지 않으며, 미리 비워둔 '15%의 여유 능력'과 광활하게 비워진 완충 지대(Buffer)가 그 어떤 폭격이 떨어져도 그 충격을 온전히 흡수해 내는 궁극의 방패가 되었기 때문이다.
어디선가, 눈에 보이지 않는 서버실의 거대한 데이터 톱니바퀴가 인간의 낡은 밀어내기 관성을 비웃으며, 시장의 북소리(Drum)에 맞춰 가장 완벽한 타이밍에 밧줄(Rope)을 묵묵히 당기고 있었다.
제조업의 낡은 역사가 완전히 막을 내리고, 인간의 직관과 차가운 시스템(Exa)이 합주해 낸 진정한 흐름(Pull)의 시대가, 그렇게 장엄한 닻을 올렸다.
Bayesian EXAWin-Rate Forecaster
매 미팅과 협상에서 포착되는 미세한 신호를 베이지안 업데이트로 실시간 분석하여 영업 성공 확률을 정교하게 예측합니다. EXAWin과 함께라면 직관의 영역이었던 영업이 가장 완벽한 데이터 과학으로 진화합니다.
![BA04-1. [소설] 사이공의 확률 — 데이터가 직감을 이긴 날 (上)](/_next/image?url=%2Fstatic%2Fimages%2FBA041-saigon-probability-1.png&w=3840&q=75)
![BA04-2. [소설] 사이공의 확률 — 데이터가 직감을 이긴 날 (下)](/_next/image?url=%2Fstatic%2Fimages%2FBA042-saigon-probability-2.png&w=3840&q=75)
