Manufacturing Sensor Data · Case Study · 2026.08 – 2026.09

가이드롤 생산 모니터링 시스템
제조 지표 정의 재합의와 '항상 맞아야 할 규칙' 검증

가동 시간과 가동 횟수가 서로 모순되게 표시되던 통계 화면의 원인을 추적해, 코드 버그가 아닌 지표 정의의 불일치임을 밝혔습니다. 현장과 정의를 다시 합의하고, '항상 맞아야 할 규칙' 검증과 계약 테스트로 고정했습니다. 같은 기간에 첫 화면 조회 속도도 95% 단축했습니다.

시스템 개요

가이드롤은 광학필름 생산 라인에서 동력 없이 필름 장력으로 도는 롤입니다. 롤에 붙은 센서 노드 4대(펄스=속도, 가속도=진동)가 10분마다 11초씩 측정하고, 이 측정 1회분을 사이클이라고 부릅니다. 속도 단위는 분당 이동 거리(MPM, m/min)입니다.

이 시스템은 사이클을 모아 일간 관제(하루 속도 그래프·상태 타임라인)와 기간 통계(주·월 단위 가동 시간·가동 횟수)로 보여 주는 FastAPI · React 대시보드입니다.

역할 백엔드 · 대시보드 화면의 제안 · 구현 · 검증 · 문서화정의 결정 대표 · 현장 담당자와 협의기간 2026.08 – 2026.09스택 FastAPI · React · DuckDB · Parquet · pytest
Before
기간 통계 · 같은 주
1.2h가동 시간
0회가동 횟수
가동 횟수 0회와 가동 시간 1.2시간이 동시에 표시됨
→지표 정의 통일
합산 함수 단일화
After
같은 주 · 같은 데이터
1.2h가동 시간
6회가동 횟수
10분 가동 6회 — 두 지표와 일간 관제 화면이 일치
95% 단축 첫 조회 18.0초 → 0.89초 · DB 연결 1회화 + 데이터셋별 Parquet 병합 사본위반 0건 36일 전수 규칙 검증26건 가동 규칙을 고정한 계약 테스트8/8 최적화 전·후 화면 데이터 동일
데모 보기 ↗공개 샘플 데이터 · 임시 주소라 바뀔 수 있음

0 · 데이터의 기본 단위 Sensor Basics

케이스를 읽기 전에 2분 · 그림은 비유, 표 오른쪽이 실제 값

속도는 "패턴 1개가 센서 앞을 지나는 시간"에서 시작합니다

가이드롤 표면의 패턴이 센서 앞을 지날 때마다 펄스 1개가 생깁니다. 1초 동안 지나간 패턴 수를 세면 패턴 1개의 통과 시간이 나오고, 이 간격이 일정할 때 속도(MPM)가 정확히 계산됩니다.

롤이 멈춰 있어도 필름이 펄럭이면 센서는 불규칙한 펄스를 받습니다. 이것이 정지 구간에 0보다 큰 속도가 찍히는 유령 속도(Ghost Speed)의 원리이고, 아래 케이스의 향후 과제로 이어집니다.

비유 그림: 둘레 10cm 롤에 1cm 패턴 10개, 1초에 10바퀴면 1초에 패턴 100개가 지나가 패턴 1개 시간은 10ms
비유 예시 · 둘레 10cm에 패턴 10개, 1초 10바퀴 → 패턴 1개 = 10ms (NotebookLM 학습 그림)
비유 그림: 정상 가동은 일정한 10ms 펄스, 정지 중 필름 펄럭임은 불규칙 펄스로 유령 속도를 만든다
비유 예시 · 일정한 펄스 = 정확한 속도, 불규칙 펄스 = 유령 속도 (NotebookLM 학습 그림)
항목그림·영상의 비유 예시evol 실제 (확인된 값)
속도의 원천패턴 1개 통과 시간 10ms센서 노드가 펄스를 세어 MPM으로 보고. 10분마다 11초 측정, 측정 칸 220개 = 사이클 1회
가동 판정펄스 간격의 표준편차, 이론 패턴 수와 실제 수의 모순 (영상 설명, evol 미적용)속도 1 MPM 이상, 속도가 이어지는 구간 하나 = 가동 1회
유령 속도 구분불규칙 펄스 (원리)220칸 중 속도가 기록된 칸의 비율로 구분하는 가설, 실측 682 사이클로 검증. 임계값은 미정

그림·영상 속 숫자(10cm, 10 RPS, 10ms 등)는 이해를 돕기 위한 비유이며 evol 현장 값이 아닙니다. 표 오른쪽 열만 evol 코드·문서에서 확인한 값입니다.

+학습 영상 2편 · NotebookLM으로 만든 설명 영상원리 이해용 · 쇼츠 2편 · 새 창에서 열림

영상은 원리 설명이며, 영상 속 판별 방법(간격 표준편차·패턴 수 모순·노드 간 편차)은 evol에 적용한 방식이 아닙니다.

문제 정의 및 원인 분석 Problem & Root Cause

단계를 누르면 내용이 바뀝니다

통계 지표 간 모순: 가동 1.2시간 · 가동 0회

한 주 통계 카드에 가동 1.2시간과 가동 0회가 같이 떴습니다. 주별 합 3.7+1.2도 전체 4.8과 어긋나 있었습니다. 개발 단계의 샘플 데이터에서는 재현되지 않던 조합이었습니다.

개발 데이터
  • 노드 4대가 동시에 가동·정지
  • 짧은 가동 구간 없음
  • 횟수와 시간이 항상 같은 방향으로 변화
현장 데이터
  • 전체 사이클의 67%가 정지 상태
  • 한 노드만 움직이는 구간 존재
  • 10분 단위의 짧은 가동이 빈번

핵심 성과 비교 Impact

구분개선 전개선 후
지표 정합성주간 가동 1.2시간 / 가동 0회 (불일치)주간 가동 1.2시간 / 가동 6회 (일간 관제와 일치)
지표 모순 발생일37일 중 5일36일 전수 검증 위반 0건
첫 화면 조회18.0초 (게이트웨이 502 오류)0.89초 (95% 단축, 화면 데이터 8/8 동일)
규칙 고정—계약 테스트 26건

기여도 및 향후 과제 Contributions & Next Steps

기여 (Contributions)
  • 가동 정의 재합의안 작성·제안 및 구현 (최종 결정은 대표·현장 협의)
  • 합산 함수 단일화와 일간·주별·월별 화면 연결
  • 36일 전수 규칙 검증, 계약 테스트 26건 작성
  • 첫 조회 성능 개선: DB 연결 1회화, Parquet 병합 사본, 원본 자동 복귀 검증
  • 결정대장·유지보수 문서화
향후 과제 (Future Scope)
  • 정지 중 유령 속도 필터링 — 아래 참조
  • 노드 카드 가동 기준 정렬 — 기간 통계와 같은 정의로 맞출지 비교 분석
+향후 과제 · 정지 중 유령 속도(Ghost Speed) 필터링가설 검증 완료 · 임계값 정립은 추가 분포 분석 후 진행

현상 — 롤러가 정지해 있어도 필름의 미세 진동으로 센서가 속도를 기록해, 정지 구간의 평균 속도가 0보다 크게 계산됩니다. 1차 사례가 "정의가 서로 달랐던" 문제라면, 이 현상은 정지 판정 기준 자체가 정의되지 않은 문제입니다.

가설과 검증 — 사이클 1회의 측정 칸 220개 중 속도가 기록된 칸의 비율로 실제 가동과 유령 속도를 구분할 수 있다는 가설을 세우고, 실측 682 사이클에서 구분 가능함을 확인했습니다.

다음 단계 — 사이클 길이에 따라 비율 분포가 달라, 사이클 길이별 분포 분석을 거쳐 임계값을 정하고 필터를 적용할 계획입니다.

가설 검증 완료임계값 정립 예정
+화면 · 데모공개 샘플 데이터 기준 화면
기간 통계 월 화면, 2026년 7월. 둘째 주 카드에 가동 1.2시간 6회
기간 통계 · 2026-07 월 화면. W28 카드가 1.2시간 · 6회
일간 관제 화면, 2026-07-06. 속도 그래프와 상태 타임라인에 짧은 가동 여섯 개
일간 관제 · 2026-07-06. 10분짜리 가동 여섯 덩어리

데모 보기 ↗ — 로그인 없음, 읽기 전용. 임시 주소라 바뀔 수 있습니다. 화면과 숫자는 공개 샘플 데이터이고, 고객사명·운영 원자료는 싣지 않았습니다.

제조 데이터는 값보다 정의가 먼저입니다.

근거가 부족한 기준은 임의로 정하지 않습니다. 분석 결과를 제시하고, 추가 데이터를 검토한 뒤 현장과 함께 결정합니다.

정의 재합의규칙 검증계약 테스트결정 기록