생산 입력에서 양품 6개와 불량 2개를 넣었다면 재고는 몇 개가 늘어야 할까. 실제 제조 서비스의 실적과 재고 이동을 읽고, 화면 숫자와 창고에서 쓸 수 있는 수량이 같은 뜻이 되지 않는 지점을 정리했다.
실적과 사용 가능한 재고는 다르다
기존 service는 실적의 good과 defect를 나눠 기록하고 양품 누계와 불량 누계도 따로 더한다. 재고 이동에는 양품이 들어간다. 작업을 했다는 사건과 납품에 쓸 수 있는 물량을 같은 숫자로 취급하지 않은 것이다. 나는 수량 입력 필드 두 개를 만든 이유를 이 업무 의미에서 설명하고 싶었다.
새 합성 상태는 target, good, defect, delivered와 inventory를 갖는다. good은 누계이고 inventory는 남은 양품이다. 납품하면 재고는 줄지만 이미 만든 양품 누계가 줄지는 않는다. 같은 수량 이름을 여러 화면에 재사용할 때도 무엇의 누계이고 무엇의 현재값인지 표시해야 한다.
6과 2를 더해 재고 8로 만들지 않았다
합성 목표 10에서 양품 6과 불량 2를 입력하면 good은 6, defect는 2, inventory는 6이다. 세 개를 납품하면 delivered는 3이고 inventory는 3이다. 이 반례를 테스트해 불량이 재고로 들어가지 않는지 확인했다. 실제 업체의 생산 기록과 품목 정보를 쓰지 않았다.
수량은 제한된 음이 아닌 정수만 허용한다. 소수와 문자열, 참·거짓을 암묵적으로 수량으로 바꾸지 않는다. 실제 업무에 길이와 무게 같은 연속 단위가 필요하다면 정수 계약을 그대로 쓰면 안 된다. 품목의 단위에 맞는 계산과 반올림 규칙을 별도로 정해야 한다.
불량 사유의 정책도 의식적으로 정했다
원래 코드에는 불량 사유가 비면 기타로 남기는 처리가 있다. 새 모듈은 불량이 있으면 비어 있지 않은 사유를 요구한다. 원본과 같은 정책이라고 쓰지 않고 독립 예제에서 더 좁게 정한 차이를 밝힌다. 빈칸을 채워 저장하는 것과 사용자가 원인을 선택했다는 사실은 다르기 때문이다.
이 요구가 모든 공장에 맞는 것은 아니다. 원인을 모르면 확인 필요라는 상태가 더 나을 수 있고 사유 목록을 관리해야 할 수도 있다. 현재 예제는 합성 자유 문장과 길이 제한만 다루며 원인의 진위를 판정하지 않는다. 입력을 강제했다고 실제 품질 분석까지 완성되는 것은 아니다.
실패했을 때 중간 누계가 남지 않게 했다
apply는 원래 상태를 복사한 뒤 새 결과를 만든다. 목표를 넘는 양품과 빈 실적, 없는 재고를 넘는 납품은 실패한다. 이벤트 처리 도중 오류가 나도 호출자가 가진 이전 상태를 바꾸지 않는 것을 확인했다. 화면 대역에서도 잘못된 납품 뒤 재고가 그대로인지 검사했다.
이는 메모리 함수의 원자적인 반환 경계이며 데이터베이스 트랜잭션을 구현한 것은 아니다. 실제 서비스에서는 재고 이동과 실적 저장, 회사 범위와 중복 요청을 묶어 검수해야 한다. 기존 공개 원자 처리 모듈이 그쪽의 다른 질문을 다루며 이번 작은 수량 예제와 책임을 구별한다.
초과 생산을 어떻게 볼지도 다르다
새 모듈은 목표보다 많은 양품을 거절한다. 원래 업무의 모든 재작업과 초과 생산을 옮긴 것은 아니다. 현장에서는 여유분 생산과 재작업이 필요할 수 있으므로 승인된 정책을 정해야 한다. 이번 공유는 정확한 작은 반례를 위해 목표와 재고 관계를 좁게 만든 것이다.
이벤트 배열도 신뢰할 메모리 기록이지 인증된 변경 이력이 아니다. 사용자가 상태를 임의로 바꾸지 못하게 하는 서버와 계정 기능은 없다. 불변식을 확인한다고 원래 입력이 실제 작업을 반영한다는 보장이 생기지 않는다. 물리적 생산과 시스템 기록을 대조하는 검수는 별도다.
대표 화면에서 읽을 숫자의 뜻
새 패키지의 25개 테스트는 양품과 불량, 납품과 재고, 오류 후 보존과 다른 계약을 함께 확인했다. ZIP을 새로 풀어도 통과했고 실제 운영 DB는 읽거나 변경하지 않았다. 라이브 화면은 이 문서의 합성 상태만 바꾸며 새로 열면 운영 자료를 복구하는 기능은 없다.
대표는 숫자를 매번 다시 계산하기보다 이름을 보고 의미를 바로 알 수 있어야 한다. 만든 양품과 남은 재고, 불량과 납품을 나누면 직원 입력과 대표 확인이 같은 근거로 이어진다. 나는 단순한 화면이 숫자를 덜 보여 주는 것만이 아니라 서로 다른 사실을 혼동하지 않게 하는 것이라고 설명하고 싶었다.