← 전체 글 보기

모놀리식 관제를 분해한 이유: AWS IoT + Firehose + OpenSearch 파이프라인 설계

초기 관제 시스템은 단일 서버에서 데이터 수집, 변환, 분석, 연동을 모두 처리했다. 초기에는 빠르게 기능을 붙일 수 있었지만, 로봇 대수와 요구사항이 늘면서 병목과 장애 전파가 반복됐다.

이 글은 그 구조를 AWS IoT Core/Rules + Data Firehose + Lambda + S3 + Elasticsearch로 분리한 이유와 구현 포인트를 정리한 기록이다.

AWS IoT 기반 파이프라인 아키텍처
AWS IoT + Firehose + Lambda + S3 + Elasticsearch 아키텍처

문제 정의

운영에서 반복적으로 부딪힌 문제는 아래 네 가지였다.

모놀리식 구조의 복잡성
기능이 누적될수록 복잡해지는 모놀리식 서버 구조

설계 목표

  1. 운영 부담이 낮은 완전 관리형 서비스 기반으로 구성
  2. 수집/변환/적재 경로를 분리해 장애 전파 범위 축소
  3. 재처리 가능한 경로를 확보해 데이터 유실 리스크 완화
  4. 외부 서비스 연동 비용(코드 수정/재배포) 최소화

아키텍처 선택

1) 수집: AWS IoT Core + Rules

로봇에서 MQTT/HTTP로 발행한 데이터를 IoT Core에서 수집하고, Rules로 라우팅해 후속 처리 서비스로 전달했다.

2) 변환/적재: Amazon Data Firehose + Lambda

Data Firehose를 중심으로 스트림을 구성하고, SQL만으로 어려운 레코드 변환은 Lambda에서 수행했다.

3) 검색 운영: ILM/Template

색인 전처리와 수명주기를 분리했다.

왜 KDS/MSK 대신 Firehose였나

당시 의사결정의 기준은 “최대 유연성"이 아니라 “운영 단순성 + 충분한 처리 성능"이었다.

제한된 인력으로 빠르게 안정화해야 했기 때문에 Firehose가 현실적인 선택이었다.

구체 설정 예시

Firehose는 버퍼 크기/시간을 같이 설정해야 한다.

BufferingHints:
  SizeInMBs: 10
  IntervalInSeconds: 60

이 값은 “지연"과 “목적지 부하"를 같이 바꾼다.

Lambda 변환을 붙인 경우에도 버퍼 정책을 별도로 조정해야 레코드 배치 효율이 유지된다.

적용 결과

한계와 다음 단계

이 구조는 초기/중간 규모에서는 매우 효율적이지만, 로봇 대수와 이벤트 볼륨이 계속 증가하면 비용 최적화 한계가 나타난다.

장기적으로는 고처리량 워크로드 일부를 Kafka 계열로 분리하는 하이브리드 구조를 검토하고 있다.

참고 및 인용

참고: Amazon Data Firehose는 스트리밍 데이터를 대상 저장소로 서버리스 적재하는 관리형 서비스다. What is Amazon Data Firehose?

참고: AWS IoT Rules 액션은 IoT 메시지를 Firehose 등으로 라우팅할 때 사용된다. AWS IoT rule actions

참고: Elasticsearch ILM은 인덱스 수명주기(rollover/delete) 자동화를 위한 표준 메커니즘이다. Index lifecycle management