타이어 공장 완제품 창고 관제 시스템 설계 및 구축
타이어 공장 완제품 창고 관제 시스템 설계 및 구축
- 타이어 공장의 완제품 창고에서 발생하는 장기 재고 및 설비 다운타임을 실시간 데이터로 시각화하여, 운영 효율을 극대화하기 위한 시스템 개발
- 개발 기간: 2024.12. - 2025.12.
- 개발인원: 5명 (Front-end: 2명, Back-end: 2명, 데이터 수집기: 1명)
- 기술스택: React.js, Nest.js, C# .NET, PostgreSQL
성과
- 재고 비용 절감: 장기 미출고 재고를 시스템이 먼저 알려줌으로써, 제품 노후화로 인한 폐기 손실을 막고 창고 회전율을 높임
- 생산성 최적화: 설비 이상이나 공정 중단을 담당자에게 즉시 알려, 대응 시간을 단축하고 라인 중단으로 인한 막대한 경제적 손실을 최소화함
- 데이터 기반 의사 결정: MES, WMS 등 파편화된 데이터를 하나로 통합 관제하여, 주관적인 판단이 아닌 정확한 지표에 근거해 생산량과 적재 계획을 조절함
역할
1) 테크니컬 리더(Technical Leader): 팀 기술 리딩 및 의사 결정
- 팀의 기술적 방향성 제시 및 코드 리뷰
- 각 파트 간의 원활한 데이터 연동 및 협업 프로세스 조율
2) 시스템 아키텍처 설계: M 멀티 티어 아키텍처 및 데이터 파이프라인 설계
- 데이터 수집 부터 프레젠테이션 등의 4개 계층의 시스템 아키텍처 설계
- 이기종 설비 데이터 수집부터 API, DB, 프론트엔드에 이르는 전체 시스템 구조 설계
3) 사용자 인터페이스 구현: 실시간 모니터링 UI/UX 구현
- React 기반 대규모 물류 창고 2D 모델링 및 실시간 대시보드 개발
- 대규모 창고 데이터를 시각화하는 2D 모델링 UI 개발 및 렌더링 성능 최적화
시스템 아키텍처
1) 시스템 구성도

2) 시스템 아키텍처 구성요소
-
데이터 수집 Layer (C# .NET, RabbitMQ)
- 산업용 프로토콜(PLC 등)과의 높은 호환성 및 멀티 쓰레딩을 활용한 대규모 데이터의 안정적인 전처리
- 설비의 Raw 데이터를 전처리(Parsing/Filtering)하여 메시지 큐(RabbitMQ)로 송출함으로써 수집기와 서버 간의 결합도 분리(Decoupling) 및 트래픽 폭주 시 데이터 유실 방지
-
데이터 저장 Layer (PostgreSQL)
- 설비 가동 로그와 같은 고빈도 시계열 데이터와 재고/마스터 정보와 같은 복잡한 관계형 데이터를 통합 관리
- 데이터 무결성을 위한 트랜잭션 최적화 및 인덱싱 전략을 통해 대규모 통계 쿼리(설비 가동률, 재고 추이) 성능 확보
-
비즈니스 로직 Layer (Nest.js)
- Nest.js의 모듈형 아키텍처를 활용하여 유지보수성이 높은 비즈니스 로직 설계
- MQ로부터 수신된 실시간 데이터를 가공하여 알람 서비스(Threshold Check) 및 UI 렌더링을 위한 최적화된 데이터 스키마 제공
-
프레젠테이션 Layer (React)
- Virtual DOM과 상태 관리 최적화를 통해 수천 개의 설비 태그 데이터가 실시간으로 변하는 환경에서도 지연 없는 시각화 구현
- SVG 기반의 2D 설비 레이아웃 렌더링으로 현장 가시성 극대화
데이터 파이프라인 설계
1) 데이터 흐름도

2) 프로세스 상세
-
Acquire Raw Data (원천 데이터 수집)
- 타이어 공장 현장의 PLC, RDB 등 다양한 소스로부터 Raw 데이터 수집
- 수집 서버(Data Collect Server)가 현장의 복잡한 신호들을 한곳으로 모으는 게이트웨이 역할을 함
-
Serialize Raw Data Raw (데이터 반정형화, JSON)
- 수집된 로우 데이터를 시스템 간 통신이 용이하도록 JSON 형식으로 직렬화
- 알람(Alarm)을 비롯하여 창고에서 동작하는 물류 장비의 상태 데이터가 직렬화 대상
- Stacker Crane (STC): 자동 창고의 적재 크레인
- Conveyor (CNV): 컨베이어 벨트
- Rail Guided Vehicle (RGV): Rail 위를 돌며 물품을 운반하는 장비
- Gantry (GNT): Gantry Stack장에 물품을 운반하는 Gantry 장비
-
Stream Serialized Data (Topic별 데이터 스트리밍)
- 메시지 큐인 RabbitMQ를 중앙 저장소로 사용
- IoT 환경에서 표준적으로 사용되는 가벼운 MQTT 프로토콜을 활용
- 각 데이터에 라우팅 키(예: tire.fin.trans.STC)를 부여하여, 데이터 전달 경로 지정
-
Deserialize Formatted Data (데이터 역직렬화 및 처리)
- RabbitMQ로부터 데이터를 전달받은 JSON 데이터 Parsing
- 웹 브라우저 및 SMS, 메일 등으로 발생한 알람 즉시 전파
- 각 설비(STC, CNV, RGV, GNT)의 현재 상태값 실시간 갱신
-
Render Data to UI (사용자 화면 시각화)
- React와 Vite를 사용하여 빠르고 현대적인 웹 환경 구축
- Web Alarm Modal: 설비 장애 발생 시 팝업 알림
- 2D Warehouse UI: 창고 내부의 설비 움직임과 재고 현황을 2D 그래픽으로 실시간 모니터링
트러블 슈팅(Trouble Shooting)
1) Nginx 리버스 프록시 구축으로 망 분리(OT/IT) 제약 극복
-
보안 정책으로 차단된 망 간 통신을 Nginx 리버스 프록시로 중계하여, 기존 보안 체계를 유지하면서 실시간 데이터 관제 서비스를 정상화함
-
이슈내용
- 사무망(IT) 내 관제 시스템 접근 불가 및 데이터 타임아웃 발생
- 웹 페이지 대시보드는 로드되나, 실시간 데이터(API) 호출 시 응답 없음
-
원인분석
- 고객사 보안 정책상 사무망에서 API 서버로의 직접적인 경로(Routing) 및 접근 권한이 제한됨
- 인바운드 포트는 개방되어 있으나 아웃바운드 미개방으로 인해 서비스 응답이 거부됨
-
해결방안
- 메인 서버에 Nginx 리버스 프록시(Reverse Proxy)를 구축하여 통신 창구를 단일화함
- 사무망의 API 호출 대상을 실제 API 서버가 아닌 Nginx(프록시)로 설정하여, 서버 내부 로컬 통신을 통해 데이터를 중계함
-
결과
- 고객사의 기존 보안 정책을 유지하면서도 망 간 데이터 간섭 없이 관제 서비스 정상화
- 단일 엔드포인트 사용으로 향후 API 서버 주소 변경 시에도 사무망 클라이언트 수정 없이 유연한 대응할 수 있게 함
2) 대용량 실시간 데이터 렌더링 최적화
-
초고빈도 실시간 데이터로 인한 브라우저 부하를 메모이제이션과 쓰로틀링 기법으로 최적화하여, 안정적인 UI 렌더링 성능을 확보함
-
이슈내용
- 대시보드 사용 중 브라우저 프리징(멈춤) 및 성능 저하 현상 발생
- 대량의 데이터 유입 시 메인 스레드 점유율 상승으로 인한 사용자 조작 불능
-
원인분석
- WebSocket으로 초당 수만 건 유입되는 데이터가 불필요한 전체 화면 리렌더링을 유발
- 개별 컴포넌트 단위의 업데이트가 아닌, 상위 컨텍스트 변화로 인한 전역적 연산 부하 집중
-
해결방안
- useMemo를 활용하여 데이터 변경이 없는 컴포넌트의 불필요한 연산 및 렌더링 방지(Memoization)
- 초고빈도 유입 데이터에 쓰로틀링(Throttling) 기법을 적용하여, UI 업데이트 주기를 브라우저 주사율에 맞춰 최적화
-
결과
- DOM 업데이트 빈도를 획기적으로 낮추어 대용량 데이터 환경에서도 안정적인 프레임 유지 및 실시간 시각화 구현
- 시스템 자원 사용률 최적화를 통해 저사양 클라이언트 환경에서도 끊김 없는 모니터링 환경 제공
3) 2D 스태커 크레인 실시간 구동 UI 최적화
- 선형 보간법(Lerp) 적용으로 서버 트래픽과 리렌더링 부하를 최소화하고, 화면 주사율에 최적화된 매끄러운 실시간 크레인 구동 UI를 구현
- 이슈내용
- 스태커 크레인의 현재 위치를 표현하는 UI가 실시간으로 반응해야 하지만, 잦은 업데이트로 인해 화면 끊김(Jittering)이나 브라우저의 부하 발생
- 데이터 수신 주기와 화면 주사율이 일치하지 않아 크레인이 부드럽게 이동하지 않고 순간이동하는 현상 발생
- 원인분석
- 크레인의 미세한 움직임을 전달하기 위해 잦은 데이터 수신으로 인해 서버와 클라이언트 모두에 통신 부담 가중
- 위치 좌표가 바뀔 때마다 프레임워크(React)의 상태(State)가 업데이트되어, 컴포넌트 재렌더링에 의한 CPU/GPU 자원 소모 극대화
- 네트워크 지연으로 인해 데이터가 불규칙하게 들어올 경우, 크레인의 불규칙한 움직임으로 인해 멈췄다 가다를 반복함
- 해결방안
- 서버로부터는 크레인의 현재 위치와 목표 위치 정보만 간헐적 수신
- 수신된 두 지점 사이의 좌표를 클라이언트에서 선형보간법으로 계산하여 부드러운 경로를 생성함
- 결과
- 초당 수십 번씩 발생하던 리렌더링 횟수를 획기적으로 줄여 CPU 점유율을 낮춤
- 서버로부터 받아야 하는 데이터의 주기가 길어져도 UI상에서는 끊김 없는 표현이 가능해짐
- 크레인의 움직임이 실제 물리적인 이동처럼 매끄럽게 표현되어, 직관적이고 쾌적한 창고 현황 모니터링 환경 구축
4) 개발/운영 환경 표준화
-
OS 종속성과 환경 파편화 문제를 Docker 컨테이너화로 해결하여, 개발-운영 간 환경 불일치를 제거하고 배포 안정성 및 개발 생산성을 제고함
-
이슈내용
- 동일 OS(Windows) 기반 개발 환경임에도 불구하고, 로컬과 운영 서버 간 동작 불일치 및 배포 지연 발생
- 특정 개발 PC에서만 발생하는 런타임 오류로 인해 코드 정합성 검증 및 배포 프로세스 정체
-
원인분석
- 팀원별로 상이한 라이브러리 설치 버전, Windows 환경 변수(Path) 설정 차이 및 종속성 모듈 간의 충돌 빈번
- 수동 기반의 라이브러리 관리로 인해 개발-테스트-운영 환경의 동일한 실행 컨텍스트(Execution Context) 유지 불가
-
해결방안
- 전체 서비스 모듈(Front/Back/Daemon)을 Docker 컨테이너화하여 호스트 OS(Windows)의 종속성과 분리된 독립 환경 구축
- docker-compose를 도입하여 모든 개발자가 운영 서버와 100% 동일한 바이너리 및 라이브러리 스택을 사용하도록 강제
-
결과
- 환경 설정 차이로 인한 "재현 불가능한 오류"를 근본적으로 제거(Zero화)하여 개발 생산성 향상
- 신규 팀원 온보딩 시 복잡한 수동 셋업 없이 즉시 개발 투입 가능 및 배포 안정성 확보
소감
본 프로젝트에서 저는 프로젝트 리더로서 팀원들의 역량을 극대화하고, 시간 낭비 없이 고품질의 결과물을 도출하는 데 가장 많은 노력과 시간을 투자했다. 주니어와 시니어를 가리지 않고 모든 팀원이 주어진 시스템을 빠르게 구현할 수 있도록, 코드 리뷰를 통해 부족한 부분을 구체적으로 피드백하였으며, 애자일 기반의 일정 및 태스크 관리를 통해 이슈 발생 시 즉시 원인을 파악하고 신속한 의사결정을 내려 개발 병목을 최소화하였따. 또한 개발자들이 핵심 업무에만 집중할 수 있도록 설계·개발 관련 모든 문서를 직접 작성하였고, 아키텍처와 소스코드에 기술 부채나 불필요한 복잡성이 쌓이지 않도록 팀원들과 적극적인 기술 토론을 주도했다.
개발 업무에서는 풀스택으로 참여하여 프론트엔드에서는 직관적인 UI와 2D 공장 모델링을 구현하였고, 백엔드에서는 인프라스트럭처 코드를 직접 개발하여 다른 개발자들이 API를 신속하게 양산할 수 있는 안정적인 개발 환경을 구축했다. 동시에 데이터 정합성과 무결성을 철저히 검증하며 API 테스트와 디버깅을 수행했다. 프로젝트 후반에는 중국 장춘 현지 설치 현장에 파견되어, 주어진 일정 대비 10% 단축이라는 성과를 내며 링롱타이어 공장에 시스템을 성공적으로 구축·오픈하였다.
이 프로젝트의 성공은 이후 대규모 수주에도 직접적인 기여를 했다. 사우디아라비아 피렐리 공장(700억 원) 프로젝트 수주에 실질적으로 기여하였으며, 해당 시스템은 이후 타이어 공장의 전체 공정으로 설계가 확대되었다. 이는 내가 궁극적으로 지향하는 디지털 트윈 + AI 어시스턴트 기반 스마트 팩토리 구현을 위한 중요한 발판이자 기반이 되었다.

현재 Physical AI가 산업의 메가트렌드로 부상하면서, 디지털 트윈과 AI 기술이 융합된 통합 관제 시스템에 대한 시장 수요가 급증하고 있다. 이에 나는 과거 빅데이터 분석 시스템 구축 경험을 바탕으로, 공장 내 대규모 데이터를 실시간 스트리밍·축적하여 고정밀 시뮬레이션 환경을 설계하고 있다. 이 시뮬레이션 환경은 디지털 트윈의 초석이 되어 예지보전(Predictive Maintenance) 체계를 구축하는 기반이 될 것이며, 여기에 Language Model 기반 AI 어시스턴트를 접목한다면 완전 자율 제조(lights-out manufacturing )에 한 걸음 더 다가갈 수 있을 것이라 확신한다.