현재 재고와 오늘 입고·출고는 같은 종류의 KPI가 아니다. 현재 재고는 특정 시점의 Stock, 입고·출고는 시작과 종료가 있는 기간의 Flow이므로, 각각 ‘기준 시각’과 ‘집계 구간’을 표시한 뒤 Opening Stock + Net Flow = Closing Stock으로 연결해야 한다.
업무 대시보드가 ‘현재 재고 40개’와 ‘오늘 입고 80개’를 같은 카드 크기와 같은 시간 라벨로 놓으면 숫자는 깔끔해 보인다. 하지만 40은 17:00이라는 한 시점의 상태이고, 80은 09:00부터 17:00까지 발생한 이동량이다. 두 값의 단위가 모두 ‘개’여도 시간 의미는 다르다. 이 차이를 숨기면 사용자는 80개가 아직 남아 있다고 읽거나, 40개와 80개를 직접 비율로 비교하는 잘못된 판단을 할 수 있다.
Stock은 점이고 Flow는 구간이다
UN의 2008 System of National Accounts, Chapter 3 §3.2·§3.4는 Stock을 한 시점의 경제적 가치, Flow를 일정 기간에 일어난 변화로 구분한다. UN 공식 용어집의 Stocks 정의도 Stock을 한 시점의 보유 상태로 설명하며, 거래와 다른 Flow가 Stock을 바꾼다고 명시한다. 두 자료는 2026-10-05에 다시 확인했다.
이 글은 그 정의를 업무 대시보드에 적용한다. 아래의 Stock·Flow 표시 계약은 UN이 제안한 UI 규칙이 아니라, 정의가 다른 수치를 한 화면에서 오해 없이 연결하기 위한 RUDA의 공개용 설계 판단이다.
합성 사례의 검산 질문: 09:00부터 17:00까지 재고가 왜 120개에서 40개로 바뀌었는가?
| 시간 구조 | 값 | 화면 라벨 |
|---|---|---|
| Stock · 시작점 | 120개 | Opening inventory · 09:00 기준 |
| Flow · 09:00–17:00 | 입고 +80개 | Inbound · 09:00 이상, 17:00 미만 |
| Flow · 09:00–17:00 | 출고 −150개 | Outbound · 09:00 이상, 17:00 미만 |
| Flow · 09:00–17:00 | 조정 −10개 | Adjustments · 09:00 이상, 17:00 미만 |
| Stock · 종료점 | 40개 | Closing inventory · 17:00 기준 |
120 + 80 − 150 − 10 = 40
Opening Stock + Inbound − Outbound + Adjustments = Closing Stock. 이 관계는 같은 상품·위치·단위·시간대와 동일한 포함 규칙을 쓸 때만 성립한다.
위 표는 장식용 차트 대신 시간 관계를 직접 보여 준다. 80개 입고는 17:00에 남아 있는 양이 아니다. 같은 구간에 150개가 출고되고 10개가 조정돼 Closing Stock은 40개가 된다. 따라서 대시보드의 핵심 시각 구조는 ‘40 대 80’의 크기 비교가 아니라 시작 Stock → 구간 Flow → 종료 Stock의 연결이어야 한다.
같은 카드 모양보다 먼저 다섯 가지 시간 계약을 맞춘다
| 필드 | Stock에 필요한 답 | Flow에 필요한 답 |
|---|---|---|
| Measurement type | 한 시점의 상태인가? | 기간 중 변화량인가? |
| Scope | 어떤 상품·위치·상태를 포함하는가? | 같은 상품·위치·상태의 이동인가? |
| Time boundary | 어느 시각 기준인가? | 시작·종료와 포함 경계는 무엇인가? |
| Unit | 개·kg·원 중 무엇인가? | Stock과 환산 가능한 같은 단위인가? |
| Data state | 확정·잠정·지연 중 무엇인가? | 지연 이벤트와 사후 조정이 반영됐는가? |
이 다섯 필드는 모두 본문 깊숙한 툴팁에 숨길 정보가 아니다. 사용자가 비교를 시작하기 전에 Measurement type과 Time boundary를 읽을 수 있어야 한다. 특히 ‘오늘’은 사용자의 현지 시각, 창고의 운영 시각, 서버 UTC 가운데 무엇인지 불명확하므로 화면에는 시간대와 마감 여부를 함께 둔다.
Decision — 숫자 카드를 세 묶음으로 나눈다
| 묶음 | 대표 값과 권장 비교 | 피할 비교 |
|---|---|---|
| Current state | 17:00 재고 40개 · 같은 시각의 위치·상품 간 Stock | 오늘 입고 80개와 막대 길이로 직접 비교 |
| Period movement | 09:00–17:00 입고 80개 · 같은 기간·범위의 입고·출고·조정 | 다른 기간 길이의 Flow를 합계만으로 비교 |
| Reconciliation | 120 + 80 − 150 − 10 = 40 · Opening·Flow·Closing의 연결과 차이 원인 | 차이가 나는데도 Closing 값만 정상으로 표시 |
사용자의 첫 질문이 “지금 보충해야 하는가?”라면 Current state를 Primary Metric으로 둔다. 다음 질문 “왜 부족해졌는가?”에는 Period movement가 답한다. 마지막으로 식이 맞지 않거나 지연 이벤트가 있으면 Reconciliation 상태를 Evidence로 보여 준다. 모든 값을 같은 크기의 KPI 카드로 만들면 이 질문 순서가 사라진다.
포기한 안 — Stock과 Flow를 한 막대 차트에 넣지 않는다
| 대안 | 왜 포기하는가 | 대신 무엇을 쓰는가 |
|---|---|---|
| 현재 재고 40, 오늘 입고 80을 같은 막대로 표시 | 단위는 같지만 시간 구조가 달라 80이 현재 보유량처럼 보인다. | Current state와 Period movement를 분리하고 관계식을 함께 표시한다. |
| 모든 카드에 ‘오늘’만 표시 | Stock의 기준 시각과 Flow의 집계 구간·시간대가 사라진다. | ‘17:00 기준’과 ‘09:00–17:00, KST’를 구분한다. |
| 입고−출고의 Net Flow만 표시 | 조정·취소·분실·지연 같은 원인이 숨겨진다. | Net을 요약으로 쓰되 구성 Flow와 조정 상태를 펼칠 수 있게 한다. |
| 시간별 Stock을 모두 합산 | 같은 재고를 여러 시점에서 반복해 센 값이 된다. | 마감 Stock, 평균 Stock, 최대 Stock 중 Decision에 맞는 파생값을 명시한다. |
WHEN NOT TO APPLY — 단순 재고 방정식이 충분하지 않은 경우
- 서로 독립된 위치를 같은 시각에 합산할 때: 위치별 Stock의 범위가 겹치지 않으면 같은 시각의 합계 Stock은 유효할 수 있다. 반대로 시간별 Stock을 합산하는 것은 다른 문제다.
- 평균 재고가 필요한 Decision: 보관 효율이나 회전 분석에는 한 시점 Stock보다 기간 평균이 적합할 수 있다. 이때 ‘평균 재고’라는 파생 지표와 계산 간격을 명시한다.
- 누적 카운터가 reset될 때: 장비 카운터처럼 값이 누적되다가 초기화되는 지표는 단순한 종료−시작으로 Flow를 구하면 음수가 생길 수 있다. reset 규칙과 결측 구간을 별도로 처리한다.
- 이벤트가 늦게 도착할 때: 17:00 Closing Stock이 잠정값이면 ‘확정’처럼 표시하지 않는다. Data state와 마지막 반영 시각을 보여 주고, 사후 조정이 식의 어느 항에 반영되는지 기록한다.
- 단위 변환이 필요할 때: 개수 Stock과 kg Flow를 직접 연결하지 않는다. 환산 계수의 기준 시점·정밀도·예외를 먼저 정한다.
실무 적용 순서: Point → Interval → Reconcile
- Point: 사용자가 Action을 결정할 기준 Stock과 정확한 기준 시각을 정한다.
- Interval: 그 Stock을 바꾼 Flow의 시작·종료·시간대·경계 포함 규칙을 정한다.
- Scope: 상품·위치·상태·단위가 Stock과 Flow에서 동일한지 확인한다.
- Reconcile: Opening Stock + Net Flow = Closing Stock을 검산하고 차이가 있으면 조정·지연·누락 상태를 노출한다.
- Hierarchy: Current state를 먼저, 변화 원인을 다음, 데이터 신뢰 상태를 마지막 Evidence로 배치한다.
Decision Rule: 같은 단위의 숫자라도 한 값이 시점이고 다른 값이 기간이면 같은 KPI 비교축에 놓지 않는다. Stock에는 기준 시각, Flow에는 집계 구간을 붙이고, 동일한 Scope·Unit·Data state가 확인될 때만 Reconciliation 식으로 연결한다.
기간 비교의 시작·종료 경계는 전주 대비가 틀리는 이유에서, 0·결측·지연을 분리하는 상태 설계는 0과 데이터 없음은 다르다에서 이어진다. 지표가 어떤 Decision을 바꾸는지 먼저 정하려면 KPI 대시보드 설계의 다섯 질문을 함께 볼 수 있다.
근거와 범위
120개, +80개, −150개, −10개, 40개와 09:00–17:00은 설명을 위해 만든 합성 값이다. 실제 제품·고객·출시·성과를 뜻하지 않는다. 국제 통계 정의는 Stock과 Flow의 시간적 차이를 확인하는 근거로 사용했고, 화면의 다섯 필드와 세 묶음은 업무 대시보드에 적용한 RUDA의 분석이다. 실제 적용 전에는 업무의 사건 정의, 시간대, 마감 정책, 지연 데이터, 조정 규칙을 별도로 검증해야 한다.