Dev.Chan64's Blog

홈으로 가기
Show Cover Slide Show Cover Slide

온프레미스에서 클라우드 경험을 구현한 로봇 운영 플랫폼 설계

온프레미스 환경에서도 클라우드 수준의 개발 경험과 관제 흐름을 구현하고자 한 설계 사례입니다.
단순히 기술 스택을 옮긴 것이 아니라, 클라우드에서의 개발자 경험 전체를 재현한 점이 핵심입니다.


설계 철학

저는 기술을 복제하는 것이 아니라, 익숙한 흐름을 새로운 환경에 이식하는 것이 설계의 본질이라 생각합니다.
즉, 개발자와 운영자가 환경에 구애받지 않고 동일한 개발·운영 경험을 유지할 수 있어야 합니다.

이 설계는 클라우드 기술을 직접 사용할 수 없는 환경에서도 “흐름 자체가 유지될 수 있는 구조”를 만드는 것을 목표로 하였습니다.


문제 정의 및 운영 환경의 제약

이 프로젝트는 보안구역 내 폐쇄망 환경에서 다수의 자율주행 로봇을 운용해야 하는 과제를 안고 있었습니다.
기존 시스템은 AWS Lambda, WebSocket 등 완전히 클라우드에 최적화된 구성이었지만, 실제 운영 환경에서는 인터넷 접근이 불가하여 다음과 같은 제약이 존재하였습니다.

환경적 제약 조건


전체 아키텍처 구조

전체 시스템은 ROS 기반 로봇에서 발생하는 센서 및 상태 메시지를 NATS 기반 클러스터 메시징 구조를 통해 관제 서버와 UI에 실시간 반영하는 방식으로 구성되었습니다.
또한, 서버리스 이벤트 처리 흐름(Lambda 스타일)은 Kubeless 기반 FaaS 구조로 이식하여 구현하였습니다.

아키텍처 다이어그램

graph TD

subgraph RB1[Robot1]
  ROS[ROS Node]
  AGENT[Agent - YAML & Binary]
  SVC[ROS Update Handler]
  KUBE[Kubeless Function]
  NATS1[NATS - Robot1]
end

RB2[Robot2,...] --> NATS2

subgraph NATS[NATS Cluster]
  NATS1 <--> NATS2[NATS - Robot2,...] <--> NATS_MAIN[NATS - 관제 서버]
end

ROS --> AGENT --> NATS1
AGENT --> MQTT[AWS IoT MQTT]
NATS --> WS[WebSocket Agent] --> UI[Touch UI / WebView]

MQTT --> SVC --> KUBE
S3[S3 패키지 다운로드 및 실행] --> SVC

구조 요약


주요 설계 요소와 구현

이 프로젝트의 핵심은 제한된 온프레미스 환경에서 클라우드 수준의 실시간성과 운영 유연성을 확보하는 구조를 구현하는 것이었습니다.
다음 다섯 가지 영역을 중심으로 설계를 진행하였습니다.

1. 메시징 처리 구조

2. UI 연동 구조

3. 자동화 배포 흐름

4. 장애 감지 및 모니터링

5. 운영 및 유지보수 전략

이러한 설계를 통해 실시간 제어, 원격 배포, 장애 대응까지 온프레미스에서도 일관되게 작동하는 구조를 확보할 수 있었습니다.


기술 선택 및 설계 판단 근거

설계 과정에서는 기존 클라우드 기반 기술을 그대로 사용할 수 없는 환경적 제약을 고려하여, 유사한 기능을 갖되 온프레미스에서 동작 가능한 기술 대안을 검토하고 선택하였습니다.
다음은 주요 기술 요소에 대한 판단 근거입니다.

항목 선택 또는 전환 설계 판단 근거
Kafka → NATS ✅ NATS 선택
(Kafka 제외)
Kafka는 높은 처리량에 강점이 있지만, Python 클라이언트의 처리 지연과 설치 복잡도가 문제였음. 반면, NATS는 경량화되어 있고 Python 환경에서도 안정적으로 동작하여 실시간성에 유리함.
Lambda → Kubeless ✅ Kubeless 채택
(온프레미스)
Lambda의 서버리스 아키텍처를 온프레미스에서 재현하기 위해 Kubeless를 사용. Kubernetes-native 구조로 Helm 배포 및 로컬 실행이 가능하여 대체 가능성이 높았음.
MQTT 트리거 기반 자동화 ✅ 부분 적용 클라우드의 MQTT 이벤트 메시지를 온프레미스 로봇이 수신하고, 내부적으로 ROS와 Kubeless를 통해 동작하도록 구성. 전체 앱 배포에는 적용하지 않았고, 핵심 기능 중심으로 실험적 도입.
Prometheus + Grafana ⚪ 실험적 적용 메시지 처리량 및 상태 지표 시각화를 위해 일부 노드에 Prometheus 수집기를 구성하고 Grafana 연동을 시도. 운영상 필수는 아니었으나, 확장성과 진단 도구로 고려됨.
영상 스트림 메시징 ❌ 운영 배포 제외 초기에는 NATS 기반의 프레임 단위 영상 메시지 처리를 설계했으나, 폐쇄망 환경에서 대역폭과 실시간성 이슈로 인해 실제 운영 구조에는 포함되지 않음.

이처럼 환경에 맞춘 기술 대안 선택과 구조 재설계를 통해, 기존 클라우드 기반 개발 흐름을 끊김 없이 온프레미스에서 유지할 수 있었습니다.


설계 결과 및 인사이트

이 설계는 단순히 기술을 바꾸는 작업이 아니라, 운영 환경과 기술 구조 사이의 간극을 메우는 구조적 실험이자 조율 과정이었습니다.
전체 결과는 다음 세 가지 관점에서 정리할 수 있습니다.

1. 실시간성과 구조 안정성의 균형

2. 자동화와 수동 운용의 병행 전략

3. 설계 의도와 현실 제약 간의 타협 지점 설계

이 프로젝트는 로봇 시스템, 메시징 구조, 클라우드 기술의 단순 조합이 아니라, 제약 속에서도 원래의 개발 경험을 유지하려는 구조 설계의 철학적 실현입니다.


정리하며

이 사례는 기술의 문제가 아니라 흐름을 어떻게 설계하는가의 문제였습니다.
클라우드 환경에서만 가능할 것 같았던 개발 경험과 운영 구조를, 온프레미스에서도 거의 동일한 수준으로 구현할 수 있었던 이유는 바로 “기술을 복제한 것이 아니라, 경험을 이식했기 때문”입니다.

설계자의 역할

제가 생각하는 설계자의 역할은 단순히 새로운 기술을 가져오는 사람이 아닙니다.
진정한 설계자는 익숙한 흐름이 새로운 환경에서도 작동하도록 설계하는 사람입니다.
즉, 구조는 바뀌어도 사용자의 경험은 바뀌지 않도록 만드는 것, 그것이 설계의 힘이라고 믿습니다.

앞으로의 가능성

이 구조는 단일 프로젝트에만 머물지 않습니다.

설계는 언제나 현실을 고려한 타협이지만, 그 타협의 방식이 사용자에게 느껴지지 않도록 만드는 것이 우리가 지향해야 할 구조적 완성도라고 생각합니다.


홈으로 가기
태그: 플랫폼화 비즈니스연결 프로젝트