제조업 재고관리 완전정복 — 원재료부터 완제품·LOT·FEFO·원가까지
제조업 재고가 안 맞는 이유는 수량만 보고 상태와 흐름을 안 나눠서다. 원재료·반제품·완제품, LOT·FEFO·BOM·단위변환·실사, 재고가 원가·회계로 이어지는 흐름까지 정리한다.
제조업에서 재고가 안 맞는 문제는 창고에서만 생기지 않는다. 원재료가 입고돼 생산에 투입되는 순간부터 재고는 계속 형태를 바꾼다. 원재료가 반제품이 되고, 반제품이 완제품이 되며, 일부는 공정손실이나 폐기로 사라진다. 식품제조업에서는 여기에 LOT과 소비기한, 보관조건, 품질상태까지 따라붙는다.
그래서 제조 재고를 “품목 A가 100kg 있다”로만 관리하면 실제 공장 상태를 정확히 표현하기 어렵다. 같은 원재료 100kg이라도 어느 LOT인지, 소비기한은 언제까지인지, 어느 창고에 있는지, 검사 완료품인지 HOLD 상태인지에 따라 실제로 쓸 수 있는 수량이 달라지기 때문이다. 제조업 재고관리의 출발점은 수량이 아니라 재고의 상태와 흐름을 데이터로 구분하는 것이다.
제조업 재고는 입고에서 끝나지 않는다
유통업은 매입한 상품을 큰 가공 없이 판다. 제조업은 매입한 재료를 다른 제품으로 전환한다. 기본 흐름은 이렇다.
원재료 입고 → 보관 → 생산 투입 → 공정 진행
→ 반제품 → 완제품 → 검사·승인 → 출고
이 과정에서 재고는 줄기도 하고 새로 생기기도 한다. 원재료 100kg을 투입했다고 완제품 100kg이 그대로 나오지 않는다. 공정 중 수분 증발, 잔량, 절단손실, 세척손실, 불량, 샘플링 등으로 실제 산출량이 달라진다.
그래서 제조 재고에서는 투입량과 산출량을 동시에 기록해야 한다. 원재료 차감만 있고 산출이 없거나, 완제품 생산량만 잡고 실제 투입량을 안 잡으면 재고와 원가가 모두 흔들린다.
원재료·부자재·반제품·완제품을 구분한다
제조 재고는 공정에 따라 더 세분할 수 있지만 기본은 이렇게 나뉜다.
| 재고구분 | 의미 | 주요 관리정보 |
|---|---|---|
| 원재료 | 제품에 직접 투입되는 재료 | LOT·소비기한·입고일·상태 |
| 부자재 | 포장재·용기·라벨 등 | LOT·Version·수량 |
| 반제품·중간재 | 공정 중간에 생기는 재고 | Batch·공정·보관조건 |
| 완제품 | 제조 완료된 제품 | 완제품 LOT·소비기한·품질상태 |
| 격리재고 | 검사대기·부적합·회수품 | HOLD 사유·처리상태 |
식품공장에서는 포장재를 가볍게 보면 안 된다. 같은 제품이라도 라벨 Version이 달라질 수 있고, 표시사항이 바뀐 구형 포장재를 잘못 쓰면 제품 자체는 정상이어도 출하에 문제가 생긴다. 그래서 원재료뿐 아니라 포장재와 라벨 Version도 재고관리 대상에 넣는 게 좋다.
반제품은 공정에 따라 관리수준을 정한다
모든 공장이 반제품을 같은 수준으로 관리할 필요는 없다. 생산 시작부터 완제품까지 몇 시간 안에 끝나고 중간에 별도 재고상태가 안 생기는 공장은 반제품 재고를 복잡하게 볼 필요가 없다. 반면 숙성·냉각·건조·발효·임시보관처럼 공정 사이에 제품이 머무는 시간이 길면 다르다. 이때는 어느 Batch가 → 어느 공정까지 갔고 → 얼마 남았으며 → 다음 공정에 얼마 이동했나를 봐야 한다.
즉 반제품 관리 여부는 회사 규모보다 공정 사이에 재고가 존재하는가를 기준으로 판단하는 게 정확하다.
식품 재고는 수량만으로 표현할 수 없다
식품 재고 한 건을 제대로 표현하려면 최소한 이 정도가 필요하다.
품목코드 + LOT + Location + 수량 + 단위 + 소비기한 + 품질상태
같은 원재료 500kg이 있어도 —
LOT A: 정상, 200kg
LOT B: 검사대기, 100kg
LOT C: 소비기한 임박, 150kg
LOT D: HOLD, 50kg
이라면 생산에 즉시 쓸 수 있는 수량은 500kg이 아니다. 화면에 현재고 500kg만 뜨면 장부 수량은 맞아도 현장 가용재고를 잘못 보여준다. 그래서 제조 ERP에서는 On Hand(물리적 존재) 와 Available(품질상태·예약을 반영한 실제 사용가능) 을 구분하는 게 중요하다.
LOT 번호는 재고번호가 아니라 추적의 연결키다
LOT을 단순 제조번호로 보면 관리가 금방 한계에 부딪힌다. 식품제조에서 LOT은 제조이력을 잇는 핵심 Key다. 이상적인 구조는 이렇다.
원재료 입고 LOT → 실제 투입 LOT → 생산지시 → 생산 Batch
→ 공정·품질기록 → 완제품 LOT → 재고 → 출고처
이 구조가 있으면 완제품에서 원재료 방향으로 역추적하고, 반대로 특정 원재료 LOT에 문제가 확인되면 원재료 LOT → 사용된 Batch → 완제품 LOT → 현재재고 → 출고처로도 짚어낼 수 있다.
LOT 관리의 목적은 회수량을 무조건 줄이는 게 아니라, 문제의 영향 범위를 근거를 갖고 정확히 특정하는 것이다. 추적정보가 부족하면 안전을 위해 오히려 더 넓게 확인해야 한다. 그러니 LOT이 있다고 추적성이 확보된 게 아니다. LOT 사이의 관계가 저장돼 있어야 한다.
재고의 핵심은 LOT과 상태를 함께 보는 것
같은 완제품 LOT이어도 전량이 판매 가능한 건 아니다. 생산은 끝났지만 품질확인이 안 됐을 수도, CCP 이탈이나 자가품질검사 문제로 HOLD가 될 수도 있다. 식품공장 재고상태는 예를 들어 이렇게 운영한다.
RECEIVED → INSPECTION → AVAILABLE → ALLOCATED → SHIPPED
품질 문제: AVAILABLE → QC HOLD → BLOCKED / RELEASED
회수제품: RECALLED → QUARANTINE → DISPOSAL
이렇게 해야 품질팀이 부적합을 등록했는데 영업팀은 정상재고로 보고 출고하는 사고를 막는다. 재고관리는 수량관리와 품질관리를 분리해서 생각하면 안 된다.
FIFO와 FEFO는 서로 대체하는 규칙이 아니다
FIFO는 먼저 입고된 재고를 먼저 쓰는 방식, FEFO는 기한이 먼저 도래하는 재고를 먼저 쓰는 방식이다. 소비기한·사용기한이 중요한 식품 재고에서는 단순 FIFO보다 FEFO가 맞는 경우가 많다. 하지만 “식품이면 무조건 FEFO”라고만 하면 부족하다.
같은 품목 중 소비기한이 더 빠른 LOT이 있어도, 품질검사가 안 됐거나 HOLD 상태면 생산에 못 쓴다. 그래서 실제 출고·투입 후보는 품질상태 → 소비기한 → 입고일 → Location을 함께 본다. 예컨대 AVAILABLE 재고 중 소비기한이 가장 빠른 LOT을 우선 추천하는 식이다. 즉 FEFO는 단순 정렬기능이 아니라 가용재고 안에서 적용되는 출고·투입 정책으로 보는 게 정확하다.
소비기한과 원재료 기한을 구분한다
완제품의 소비기한과 원재료의 표시·관리기한을 똑같이 취급하면 안 된다. 완제품은 제품별 소비기한 설정기준과 표시정보에 따라, 원재료는 공급받은 제품의 표시사항·보관조건과 해당 원료 관리기준에 따라 관리한다. 시스템에서도 날짜 하나를 expiry_date로 뭉치기보다 업무 성격을 나누는 게 좋다.
Manufacture Date / Receipt Date / Use-by Date / Opened Date / Internal Use Limit
모든 항목이 모든 제품에 필요한 건 아니지만, 날짜의 의미가 다르면 데이터 구조에서도 구분하는 편이 낫다.
BOM 수량을 그대로 차감하면 재고가 틀어진다
BOM은 제품 제조를 위한 표준 투입량이다. 완제품 1개에 원재료 A 200g, B 5g처럼 정의하고, 500개를 계획하면 필요량이 자동 계산된다. 하지만 이걸 그대로 실제 재고차감으로 처리하는 게 항상 맞지는 않다. 계량오차·원료 특성·공정조건·작업손실로 실제 투입이 달라지기 때문이다.
중요한 구분은 BOM = 표준, 실제 투입 = 실적이다. ERP·MES가 연동돼 있다면 재고는 가능한 실제 투입실적으로 차감하고, BOM과의 차이는 따로 분석한다.
표준투입 100kg → 실제투입 103kg → 차이 +3kg
→ 재고에서 103kg 차감, 3kg은 수율·배합·계량 분석대상
BOM 100kg만 차감하면 장부에 3kg이 계속 유령으로 남는다.
단위 변환도 재고불일치의 주요 원인이다
식품 원료는 구매단위와 생산단위가 다른 경우가 많다. 밀가루는 20kg 포대로 사지만 생산에서는 kg·g으로 투입하고, 포장재는 Box로 사지만 생산에서는 EA로 쓴다. 1 BOX = 20 EA 같은 변환정보가 Master에 정확히 없으면 구매수량과 생산차감량이 안 맞는다. 그래서 품목 Master에는 구매단위 → 재고단위 → 생산단위 → 변환계수를 관리한다. 단위변환은 작아 보여도 재고 오차를 만드는 대표적인 Master Data 문제다.
재고 이동도 하나의 Transaction이다
창고 A에서 B로 옮겨도 회사 전체 재고수량은 안 변하지만 Location별 재고는 바뀐다. 그래서 이동도 기록한다.
FROM Location → TO Location → 품목 → LOT → 수량 → 이동시각 → 작업자
냉장·냉동창고, 원료창고, 전처리구역, 생산대기구역처럼 보관조건·위생구역이 다른 공장에서는 Location 정보가 중요하다. 재고가 “공장 어딘가에 있다”는 것과 “어느 장소에 있는지 안다”는 건 운영상 완전히 다른 상태다.
예약재고와 실재고를 구분한다
생산계획을 잡으면 아직 원재료가 물리적으로 안 빠졌어도 특정 생산지시에 예약될 수 있다. 원재료 A가 100kg 있고 내일 생산에 80kg이 할당돼 있으면, 물리적 재고는 100kg이지만 신규 계획에 쓸 수 있는 건 20kg이다. 그래서 On Hand → Reserved → Available을 구분한다. 이 구분이 없으면 여러 생산계획이 같은 재고를 동시에 쓸 수 있다고 오판한다. 재고가 빠듯하거나 생산 Order가 많은 공장일수록 중요하다.
실사는 숫자를 맞추는 게 아니라 원인을 찾는 작업이다
시스템을 잘 만들어도 실물과 장부는 차이가 난다. 계량오차·파손·폐기·증발·샘플사용·오입력·미처리 이동 등 원인은 다양하다. 그래서 재고실사가 필요하다. 하지만 실사 후 시스템 수량을 실제 수량으로 그냥 덮어쓰고 끝내면 같은 문제가 반복된다.
장부수량 → 실사수량 → 차이수량 → 차이사유 → 승인 → 재고조정
차이가 반복되는 품목은 시스템 문제가 아니라 업무 프로세스 문제일 가능성이 크다. 특정 액상원료만 계속 모자라다면 계량·이송·잔량·세척손실을 확인해야 한다. 재고실사의 목적은 숫자를 맞추는 게 아니라 왜 달라졌는지를 알아내는 것이다.
재고조정과 회계는 연결되어야 한다
재고는 회계상 자산이다. 수량이 변하면 금액에도 영향을 준다. 원재료를 매입하면 원재료 재고가 늘고, 투입하면 줄고, 완제품이 생산되면 새 재고가 생기고, 판매되면 매출원가로 전환된다. 다만 실제 회계처리는 회사의 원가계산 방식과 결산정책에 따라 달라지므로, 모든 재고 Transaction마다 동일한 분개를 해야 한다고 단순화할 필요는 없다.
중요한 건 수불 데이터와 회계의 재고자산 금액이 결국 대사될 수 있어야 한다는 것이다. 실사에서 손실이 확인되면 승인과 회계처리가 필요하고, 폐기·부적합으로 재고가 제거되면 그 손실이 제조원가와 재무정보에 반영돼야 한다.
생산수율과 재고는 같은 데이터를 본다
재고관리와 수율관리는 별개 업무처럼 보이지만 같은 생산실적을 쓴다.
실제 원재료 투입 100kg → 공정 산출 94kg → 완제품 91kg
→ 9kg은 어디서 발생한 차이인가
일부는 정상 공정손실, 일부는 불량·폐기일 수 있다. 이걸 단순 재고차이로 처리하면 현장 문제를 알 수 없다. 그래서 표준 투입 → 실제 투입 → 공정 생산량 → 완제품 생산량 → 손실량을 연결해서 봐야 하고, 이 데이터가 다음 단계의 제조원가 분석으로 이어진다.
자가품질검사 부적합을 겪어보면 재고상태의 중요성이 분명해진다
우리 공장((주)단지)에서도 자가품질검사에서 부적합이 나온 적이 있다. 다행히 그 생산 Batch는 아직 출고 전이었다. 해당 제품 재고를 확인하고 출고를 차단한 뒤, 관계기관 확인과 필요한 폐기절차를 밟을 수 있었다.
이때 중요한 건 시스템에 완제품 수량이 몇 개 있다고 뜨는 게 아니었다. 어느 Batch인지, 지금 얼마 남았는지, 출고됐는지, 어떤 상태인지를 확인할 수 있느냐였다. 만약 그 제품이 정상 판매가능 재고와 구분되지 않았다면, 부적합을 알고도 다른 담당자가 출고할 위험이 있었다. 그래서 식품 제조 재고에는 수량뿐 아니라 LOT + Quality Status + Shipment Status가 함께 움직여야 한다.
좋은 재고 시스템은 현장 입력을 늘리지 않는다
재고정확도를 높이겠다고 모든 이동과 투입을 사람이 키보드로 치게 만들면 시스템은 오래 못 간다. 현장 작업자는 생산을 하는 사람이지 ERP 입력을 위해 있는 사람이 아니다. 그래서 가능한 데이터는 작업과 동시에 생성되게 설계한다. 입고 시 바코드 생성, 투입 때 LOT 스캔, 전자저울에서 실제 투입중량 수집, 생산완료 시 완제품 LOT 생성.
원재료 LOT Scan → 생산지시 선택 → 실제 계량값 수집
→ 투입실적 생성 → 원재료 재고차감 → Batch 이력 연결
이 한 과정에서 여러 데이터가 동시에 생긴다. 핵심은 한 번 입력한 데이터를 다시 입력하지 않는 것이다.
재고관리 시스템은 이렇게 연결된다
식품 ERP·MES의 재고 흐름을 하나로 표현하면 이렇다.
구매발주 → 원재료 입고 → 입고 LOT → 품질상태 → Location 재고
→ 생산예약 → 실제 투입 → 생산 Batch → 반제품·공정실적
→ 완제품 LOT → 품질 RELEASE → 판매가능재고 → 출고 → 제조원가·회계
그리고 문제가 생기면 반대 방향으로도 조회돼야 한다.
출고제품 → 완제품 LOT → 생산 Batch → 실제 투입 원재료 LOT → 공급업체
이 양방향 연결이 제조 재고의 핵심이다.
재고를 독립된 창고 기능으로 보지 않은 이유
제조관리 시스템을 들여다보면서 재고를 단순한 입고·출고·현재고 메뉴로 만들지 않은 이유가 있다. 식품 제조에서는 재고가 생산·품질·HACCP·원가와 분리될 수 없기 때문이다. 원재료가 입고되면 LOT과 상태가 생기고, 생산에서는 실제 투입 LOT·수량이 Batch와 연결되고, 생산이 끝나면 완제품 LOT이 만들어지고, 품질문제가 있으면 그 LOT을 HOLD해 출고가능재고에서 빼고, 정상 출고되면 그 정보가 매출·제조원가·회계로 이어진다.
그래서 기본 구조를 원재료 입고 LOT → 실제 투입 → 생산 Batch → 품질 → 완제품 LOT → 재고 → 출고 → 원가·회계로 잇는 게 중요하다고 봤다. 재고관리의 목적은 숫자를 맞추는 데 있지 않다. 지금 어떤 재고를 실제로 쓸 수 있고, 그것이 어디서 왔으며, 어떤 생산에 쓰였고, 어떤 제품으로 바뀌어 어디로 나갔는지를 설명할 수 있게 만드는 것이다. 수량이 맞는 건 그 결과다.
참고 — 소비기한 설정·표시, 자가품질검사, 회수 관련 기준은 품목·영업형태·최신 법령에 따라 다르다. 실제 적용은 식품안전나라와 관할 기준으로 확인한다.
식품공장 ABC 재고분류 — 금액만 보면 C등급 자재가 생산라인을 멈춘다
재고 · 물류3분 만에 확인최종 검증:
개정 이력
· 발행
· 개정
여기 담긴 규정·수치는 최소 6개월마다 위 공식 출처와 대조해 재확인합니다. 실질적 변경(요건·기준·수치)은 조용히 덮어쓰지 않고 개정 이력에 남깁니다.
이 글은 일반적인 실무 정보이며 법률·세무·행정 자문이 아닙니다. 규정·수치는 관할과 시점에 따라 달라지므로, 실제 판단 전 위 공식 출처와 관할 기관에서 최신 기준을 확인하시기 바랍니다.
