1비전 AI 시스템 통합 아키텍처
비전 AI가 실제 가치를 창출하려면 MES, ERP, QMS 등 엔터프라이즈 시스템과 통합되어야 합니다. 독립적인 비전 검사 시스템은 데이터 사일로를 만들고, 수동 입력과 지연된 의사결정으로 이어집니다.
ERP / BI Layer
SAP S/4HANA
Oracle ERP
Power BI
Tableau
↑↓ REST API / OData / JDBC
MES / QMS Layer
생산 실행 시스템
품질 관리 시스템
SPC 시스템
LIMS
↑↓ Message Queue / REST API
Vision AI Platform
추론 서버
결과 DB
이미지 저장소
API Gateway
↑↓ gRPC / MQTT / OPC UA
Edge / Shop Floor
산업용 카메라
조명 제어
Edge AI Box
PLC/Robot
| 통합 대상 | 데이터 흐름 | 주요 활용 |
| MES | 검사 결과 → Lot/Serial 연계 | 추적성, 재작업 지시 |
| QMS | 불량 유형/수량 → NC 생성 | CAPA, 품질 이력 관리 |
| SPC | 연속 측정값 전송 | 공정 능력 분석, 관리도 |
| ERP | 일별 품질 집계 | 원가 분석, 공급망 품질 |
| PLC/Robot | Pass/Fail 신호 | 자동 분류/배출 |
핵심 원칙: 비전 AI 시스템은 "데이터 생산자"입니다. 결과 데이터가 즉시 소비되어 행동(Action)으로 이어지도록 실시간 연동을 설계하세요.
2MES 연동 구현
MES(Manufacturing Execution System)는 비전 AI 결과의 가장 중요한 소비자입니다. Lot 추적성과 재작업 프로세스를 위해 실시간 연동이 필수입니다.
# MES 연동 클라이언트 (수도코드)
# === 검사 결과 데이터 구조 ===
# inspection_id, lot_id, serial_number
# station_id, timestamp, result (PASS/FAIL/REWORK/SCRAP)
# defect_codes[], confidence, image_path, cycle_time_ms
# === MES 클라이언트 ===
class MESClient:
# 1. 초기화
# - base_url, api_key, station_id 설정
# - retry_count=3, timeout=5초
# - 미전송 대기 큐 생성
# 2. HTTP 세션 관리
# - 인증 헤더 설정 (Bearer 토큰)
# - Content-Type: JSON
# 3. 검사 결과 전송 (send_inspection_result)
# - POST /api/v1/inspection/result
# - 재시도 로직 (최대 3회, 지수 백오프)
# - 200: 성공, 409: 중복(이미 처리됨)
# - 실패 시 대기 큐에 저장
# 4. Lot 정보 조회 (get_lot_info)
# - GET /api/v1/lot/{lot_id}
# 5. 검사 스펙 조회 (get_inspection_spec)
# - GET /api/v1/product/{code}/inspection-spec
# 6. 재작업 요청 (report_rework_request)
# - POST /api/v1/rework/request
# - serial_number, defect_codes, rework_station
# 7. 미전송 데이터 재처리 (process_pending_queue)
# - 대기 큐에서 데이터 꺼내어 재전송
# === MES 연동 비전 검사기 ===
class IntegratedVisionInspector:
# 1. 검사 실행 및 보고 (inspect_and_report)
# - 이미지 → 모델 추론 → 결과 생성
# - 사이클 타임 측정
# - MES로 비동기 전송
# - 불량 시 재작업 요청 (재작업 가능 불량만)
# 2. 재작업 가능 여부 판단
# - CRACK, DEFORM, FOREIGN_MATERIAL → 재작업 불가
# - 기타 불량 → 재작업 가능
3메시지 큐 기반 연동
대량 데이터와 시스템 간 결합도를 낮추기 위해 메시지 큐(Kafka, RabbitMQ)를 활용한 비동기 연동이 효과적입니다.
Apache Kafka 기반 아키텍처
고처리량, 내구성 있는 이벤트 스트리밍. 검사 결과를 여러 소비자(MES, QMS, BI)가 동시에 구독.
RabbitMQ 기반 아키텍처
메시지 라우팅과 우선순위 큐 지원. 불량 알람 등 긴급 메시지 우선 처리에 적합.
# Kafka 기반 검사 결과 발행 (수도코드)
# === 토픽 정의 ===
# vision.inspection.result - 검사 결과
# vision.defect.alert - 불량 알람 (긴급)
# vision.statistics.hourly - 시간별 통계
# === Producer (발행자) ===
class VisionResultProducer:
# 1. 초기화
# - Kafka 서버 연결
# - JSON 직렬화, gzip 압축
# - acks='all' (모든 복제본 확인)
# 2. 검사 결과 발행
# - 토픽: vision.inspection.result
# - 키: lotId (같은 Lot은 같은 파티션)
# - 비동기 전송 + 콜백으로 결과 확인
# 3. 불량 알람 발행 (긴급)
# - 토픽: vision.defect.alert
# - flush()로 즉시 전송
# 4. 시간별 통계 발행
# - 토픽: vision.statistics.hourly
# === Consumer (소비자) - QMS 측 ===
class QMSInspectionConsumer:
# 1. 토픽 구독
# - group_id로 소비자 그룹 지정
# - auto_commit 활성화
# 2. 메시지 처리 콜백
# - FAIL 결과 → NC Report 생성
# - 모든 결과 → SPC 데이터 업데이트
데이터 유실 방지: 메시지 큐 장애 시 로컬 버퍼에 임시 저장 후 복구되면 재전송하는 Fall-back 로직을 구현하세요. 검사 결과 유실은 품질 추적성 문제로 이어집니다.
4PLC/로봇 연동과 자동 분류
비전 AI 결과에 따라 PLC나 로봇이 자동으로 양품/불량품을 분류하는 연동이 필요합니다. OPC UA 또는 I/O 신호로 통신합니다.
# PLC 연동 - OPC UA 기반 (수도코드)
# === 분류 명령 ===
# 0: IDLE, 1: PASS_TO_GOOD, 2: FAIL_TO_REWORK
# 3: FAIL_TO_SCRAP, 4: HOLD_FOR_REVIEW
# === PLC 노드 매핑 ===
# 비전 → PLC (출력)
# - InspectionComplete, ResultCode
# - DefectCode, SortingCommand
# PLC → 비전 (입력)
# - Trigger, PartPresent
# - RobotReady, CurrentLot
# === PLC-비전 인터페이스 ===
class PLCVisionInterface:
# 1. OPC UA 연결
# - 서버 URL로 연결
# - session_timeout 설정
# 2. 트리거 대기 (wait_for_trigger)
# - 10ms 간격 폴링
# - 타임아웃 처리
# 3. PLC 상태 조회
# - 현재 Lot ID
# - 부품 존재 여부
# - 로봇 준비 상태
# 4. 검사 결과 전송 (send_inspection_result)
# - result_code, defect_code 쓰기
# - sorting_command 결정
# (Pass→양품, 심각→스크랩, 경미→재작업)
# - 검사 완료 펄스 신호 (50ms)
# === 비전 검사 루프 ===
async def vision_inspection_loop:
while True:
# 1. PLC 트리거 대기
# 2. 부품 존재 확인 → 없으면 스킵
# 3. 현재 Lot 정보 조회
# 4. 카메라 이미지 캡처
# 5. 모델 추론
# 6. PLC에 결과 전송 (자동 분류)
# 7. MES에 비동기 보고
응답 시간 요구: PLC 연동에서 비전 검사 결과는 보통 100ms 이내에 전송되어야 합니다. 라인 속도에 따라 이 요구사항이 더 엄격할 수 있으니 사전에 사이클 타임을 분석하세요.
5품질 데이터베이스 설계
비전 AI 결과와 이미지를 효율적으로 저장하고 조회하기 위한 데이터베이스 스키마 설계입니다.
# 품질 AI 데이터베이스 스키마 (수도코드)
# === 주요 테이블 구조 ===
# 1. inspection_results (검사 결과)
# - inspection_id (UUID, PK)
# - lot_id, serial_number, station_id
# - result (PASS/FAIL/REWORK/SCRAP)
# - confidence, cycle_time_ms
# - model_id, model_version
# - inspection_time
# - 인덱스: lot_id, serial_number, station_id+time
# 2. defect_details (불량 상세)
# - inspection_id (FK)
# - defect_code, defect_name
# - severity (CRITICAL/MAJOR/MINOR)
# - bbox (x, y, width, height)
# - mask_path, area_pixels
# - confidence
# 3. inspection_images (이미지 메타)
# - inspection_id (FK)
# - image_type (ORIGINAL/ANNOTATED/HEATMAP)
# - storage_type (LOCAL/S3/AZURE)
# - width, height, format
# - camera_id, exposure, gain
# 4. hourly_statistics (시간별 통계)
# - station_id, hour_start
# - total/pass/fail count
# - pass_rate, avg_confidence
# - defect_summary (JSON)
# 5. model_registry (모델 버전 관리)
# - model_id, version
# - model_type, framework
# - metrics (accuracy, precision, recall)
# - status (STAGED/PRODUCTION/ARCHIVED)
| 저장 대상 | 스토리지 선택 | 보관 정책 |
| 검사 결과 | PostgreSQL (OLTP) | 5년 (규정 준수) |
| 불량 상세 | PostgreSQL | 5년 |
| 원본 이미지 (Pass) | S3 Cold Storage | 90일 후 삭제 |
| 원본 이미지 (Fail) | S3 Standard | 1년 보관 |
| 통계 집계 | TimescaleDB / ClickHouse | 영구 |
6실시간 품질 대시보드
비전 AI 결과를 실시간으로 모니터링하는 품질 대시보드 구현 예시입니다.
# 품질 대시보드 API (수도코드)
# === REST API 엔드포인트 ===
# GET /api/v1/stations
# → 스테이션 목록 (id, name, status)
# GET /api/v1/dashboard/summary
# → 기간별 요약 (total, pass, fail, pass_rate)
# → 트렌드 (전 기간 대비 변화율)
# → 상위 불량 유형
# GET /api/v1/dashboard/hourly-trend
# → 시간별 검사 수, 양품률, 사이클타임
# GET /api/v1/dashboard/defect-pareto
# → 불량 파레토 (유형별 수량, 누적 %)
# GET /api/v1/inspections/recent
# → 최근 검사 이력 (필터: station, result)
# GET /api/v1/inspections/{id}
# → 검사 상세 (불량 정보, 이미지 경로)
# === WebSocket 실시간 스트림 ===
# /ws/realtime/{station_id}
# → 검사 결과 실시간 푸시
# → ping/pong 연결 유지
# === 브로드캐스트 로직 ===
# 1. 검사 결과 수신 시
# - 해당 스테이션 구독자에게 전송
# - 전체 요약 업데이트 브로드캐스트
프론트엔드 기술: 대시보드 UI는 React + Recharts 또는 Vue + ECharts 조합을 추천합니다. WebSocket으로 실시간 업데이트를 받아 차트를 갱신하고, 불량 발생 시 알림을 표시합니다.