대표가 보는 위험 목록에서 몇 건을 보여 줄지는 디자인의 결정처럼 보인다. 실제 제조 시제품의 수정 기록과 현재 조회 코드를 함께 읽어 보니 화면 수보다 먼저 정해야 할 것은 어떤 작업 전체를 계산하는가였다.
정확한 계산 앞에 빠진 행이 있을 수 있다
과거 수정 기록에는 납기순으로 일부 작업을 먼저 잘라 낸 뒤 위험도로 재정렬하는 문제가 적혀 있다. 계산 함수가 맞아도 그 앞에서 빠진 행은 검사할 수 없다. 나는 이 기록을 현재도 그대로 남은 오류라고 쓰지 않고 수정 전 질문으로 읽었다. 원래 검수의 숫자를 이번 실행 결과로 가져오지도 않았다.
현재 service는 작업별 실적을 묶고 전체 대상의 위험을 계산해 정렬한 뒤 페이지를 나눈다. 과거 지적과 지금 구현의 순서를 함께 확인해야 제작 판단이 정확해진다. 이 글은 실제 업체의 작업지시와 납기를 공개하지 않고 어떤 순서가 결과의 의미를 지키는지 설명한다.
전체 건수와 화면 건수는 다른 값이다
새 dashboard 예제는 전달받은 전체 행의 위험 수를 먼저 구하고 위험 우선·식별자 순으로 정렬한 뒤 limit만큼 보여 준다. population과 riskCount, rows와 hasMore를 따로 반환한다. 화면에 두 개가 보여도 위험 전체가 두 개라는 뜻은 아니다. 한 숫자로 전체와 표시를 동시에 설명하지 않았다.
이 모듈에서 risk는 호출자가 선언한 참·거짓이다. 실제 납기 예측 함수를 복제하지 않았다. 현재 원래 코드의 정렬 기준은 위험·납기·id지만 합성 예제는 위험·문자열 id다. 공유할 핵심을 모집단과 표시 제한의 순서로 좁혔고 두 구현이 완전히 같다고 말하지 않는다.
앞쪽에 없는 위험을 반례로 만들었다
1000개 합성 행의 뒤쪽 세 개만 위험으로 정했다. 표시 수를 두 개로 제한해도 riskCount는 3이고 보여 주는 두 개는 위험이다. 앞에서 두 개를 잘랐다면 놓쳤을 조건이다. 입력 행을 재배열해 원본을 바꾸지 않는지도 확인했다. 실제 공장의 위험 건수를 재현한 자료는 아니다.
같은 id가 반복되면 거절하고 위험 값도 명시적인 boolean이어야 한다. 값이 비어 있는데 정상으로 처리하는 기본값은 없다. 결과를 믿고 읽기 전에 어떤 입력을 허용하는지 먼저 정한 것이다. 이 예제의 1000은 합성 검산 규모이며 생산 성능의 상한을 뜻하지 않는다.
상위 목록과 전체 탐색을 이어야 한다
대표 화면의 짧은 목록은 빠른 확인에 유용하다. 그렇다고 남은 항목에 갈 방법이 없어도 되는 것은 아니다. 원래 현재 코드에는 전체 결과에서 페이지를 나누는 구조가 있다. 이번 작은 모듈은 hasMore만 남기며 다음 페이지 서버와 필터 상태를 구현하지 않았다. 기존 합성 조회 계약으로 이어 볼 수 있는 부분이다.
실제 통합에서는 전체 수와 필터 조건, 페이지가 같은 시점의 자료를 읽는지도 확인해야 한다. 전체 위험 수는 오래된 자료이고 목록은 새 자료라면 설명이 어긋날 수 있다. 순수 메모리 결과 하나의 검증을 실제 스냅샷 조회까지 완료한 것으로 보고하지 않는 이유다.
계산과 조회의 검수 자료를 나눈다
기존 기록의 위험 벡터와 데이터베이스 검수는 과거 증거다. 이번에 실행한 것은 새 모듈의 25개 테스트이며 모집단·수량·달력일·키패드를 함께 다룬다. 소스와 ZIP 추출에서도 통과했고 실제 인라인 이벤트는 DOM 대역에서 검사했다. 원래 시제품의 서버와 운영 DB는 실행하지 않았다.
화면의 마지막 항목까지 갈 수 있는지는 실제 페이지와 데이터 규모에 맞춰 추가 검수해야 한다. 브라우저 렌더링과 현장 사용성을 여기서 확인하지 않았다. 지금 공유한 근거는 작은 함수의 입력과 출력이 선언한 순서를 지켰다는 것에 한정된다.
대표가 보는 화면의 질문을 바꿨다
위험 목록의 색을 더 강하게 만드는 일보다 빠진 위험이 없는지 물어보는 편이 먼저였다. 조회 범위와 표시 범위를 나누면 대표가 전체 상황과 지금 보고 있는 부분을 구별할 수 있다. 작은 목록의 간결함과 전체 접근 가능성을 함께 설계해야 한다.
나는 이 판단을 제조업만의 특수 기능으로 남기고 싶지 않았다. 미수금과 승인 대기, 재고 부족 목록도 어떤 전체에서 골랐는지 알아야 한다. 기존 조회 모듈의 스냅샷 책임과 이번 모집단 우선 책임을 각각 설명하면 다른 홈페이지의 관리자 화면에도 같은 질문을 적용할 수 있다.