PLC 통신 미들웨어 및 하드웨어 제어
3사 PLC 프로토콜 추상화, 4계층 SOLID 아키텍처, Celery 기반 안정적 폴링
배경
선별 시스템에서 PLC 장비와의 실시간 통신으로 자동 분류 제어와 입출고 데이터 수집을 담당하는 계층입니다. 기존 PLC 통신 코드는 단일 파일에 모든 책임이 혼재되어 있었고, 매직 넘버 사용, 에러 처리 부재로 현장 디버깅이 어려웠습니다. 또한 현장마다 3사 PLC 장비가 달라 매번 개별 대응이 필요했습니다. Modbus TCP 125-레지스터 제한, IEEE 754 Float32 중량 데이터 파싱, 한글 인코딩 등 산업 프로토콜 특유의 복잡성도 있었습니다.
해결 과정
v1 — OOP 기반 신규 구축: Factory 패턴으로 PLC 장비별 인스턴스를 생성하고, 이벤트 드리븐 아키텍처로 상태 변화를 전파하며, 자동 재연결 로직으로 네트워크 불안정성에 대응하는 구조를 설계했습니다. 최대 64개 자동 분류 출구 데이터를 2-Chunk 분할 읽기로 Modbus 레지스터 제한을 해결하고, IEEE 754 Float32 파싱으로 중량 데이터 정밀도를 확보했습니다.
v2 — 4계층 SOLID 리팩토링: v1에서 기능 추가와 현장별 커스터마이징이 반복되면서 모듈 간 결합도가 높아져 전면 재구성했습니다. Presentation(Celery 태스크) → Service(비즈니스 로직) → Infrastructure(Modbus TCP 프로토콜) → Repository(데이터 접근) 4계층 9개 모듈로 분리하고, 커스텀 예외 계층과 DTO로 타입 안전성을 확보했습니다.
Celery 기반 안정적 폴링: PLC 폴링을 전용 Celery Worker(concurrency:1)로 분리하여 Modbus 프로토콜 충돌을 원천 차단하고, 10초 주기 Beat 스케줄링으로 안정적 데이터 수집을 구현했습니다.
성과
- v1: OOP 기반 산업 통신 미들웨어 신규 구축, 3사 PLC 장비 프로토콜 추상화 완료
- v2: 단일 파일 → 4계층 9개 모듈 구조로 전면 리팩토링, 단위 테스트와 독립적 변경 용이
- PLC 진단 스크립트 6개 신규 작성으로 현장 디버깅 효율 향상
- 최대 64개 자동 분류 출구 데이터를 10초 주기로 안정적 수집, 전국 20개 이상 현장에서 다중 PLC 장비와 연동 운영