스트리밍 형의 데이터 전송
웹 브라우저, 모바일 앱, 센서 기기등 각종 디바이스에서는 데이터가 바로 생성이 되고 어디에도 저장이 되지 않는 데이터는 바로 전송을 하고 수집을 해야합니다. 이러한 데이터는 벌크 형 도구로 모으는 것은 불가능하기 때문에 스트리밍 형 데이터 전송이 필요합니다.
웹 브라우저나 모바일 앱은 메시지 배송의 통신 프로토콜로 HTTP(S)를 사용합니다.
lot 같은 머신 데이터는 MQTT 등의 오버헤드가 작은 프로토콜이 사용되는 경우도 있습니다.
이러한 데이터 전송의 공통점은 다수의 클라이언트에서 작은 데이터들이 전송되는 것입니다. 이러한 데이터 전송 방식을 '메시지 배송(message delivery)'이라고 하며 메시지 배송 시스템은 통신을 위한 오버헤드가 커지기 때문에 이를 처리하는 서버의 높은 성능을 요구합니다.
이렇게 보내온 메시지를 저장하는데에는 NoSQL과 같은 데이터 베이스를 이용하는 방법이 존재합니다. 또한 분산 스토리지에 바로 저장하는 것이 아니라 메시지 브로커, 메시지 큐와 같은 중계시스템으로 전송할 수 있습니다. 중계시스템에서 일정한 간격으로 데이터를 모아서 함께 분산스토리지에 저장합니다.
웹 브라우저에서의 메시지 배송
웹 서버 경유의 메시지 배송의 경우에는 웹 서버 안에서 메시지를 만들어 배송합니다. 이때 전송 효율을 높이기 위하여 서버상에서 데이터를 축적하고 나중에 모아서 보내는 경우가 많습니다. 서버 상주형 로그 수집 소프트웨어인 Fluentd나 Logstash가 많이 사용됩니다.
자바스크립트에 의한 메시지 배송의 경우는 웹 이벤트 추적(web event tracking)이라 하여 자바스크립트를 이용하여 웹 브라우저에서 직접 메시지를 보내는 경우가 있습니다.
모바일 앱으로부터의 메시지 배송
MBaas(Mobile Backend as a Service)라는 모바일 백 엔드의 각종 서비스를 이용하여 메시지를 배송하는 방식이 있습니다.
또한 모바일 용의 편리한 개발 키트(SDK) 사용하여 메시지를 보내고 오프라인의 경우에는 SDK 내부에 축적되고 온라인 상태가 되었을 때 모아서 보내도록 만들어져 있습니다.
모바일의 경우 통신이 불안정하고 통신 오류에 따른 메시지 재전송이 여러 번 발생할 수 있습니다. 그 결과 데이터가 중복될 가능성도 높아 특정한 중복 제거의 구조가 필요합니다. SDK가 데이터 중복에 대하여 어떠한 대책을 가지고 있는지 확인하는 것이 좋습니다.
디바이스로부터의 메시지 배송
IoT등의 디바이스로 부터의 메시지 배송은 아직 표준 규격이 없습니다.
위의 그림은 하나의 예를 표현한 것입니다.
먼저 MQTT(MQ Telemetry Transport)는 TCP/IP를 사용하여 데이터를 전송하는 프로토콜이며 일반적으로 'Pub/Sub 형 메시지 배송'의 구조를 가집니다. 'Pub/Sub'은 전달(Publish)과 구독(Subscription)의 약자로 채팅 시스템이나 메시징 앱 또는 푸시 알림 등의 시스템에서 자주 사용되는 기술입니다.
MQTT에서는 먼저 토픽(Topic)이란 메시지를 송수신하기 위한 대화방 같은 것이 만들어 집니다. 해당 토픽을 구독(Sub)하게 되면 메시지가 도착하고 그 토픽을 전달(Pub)하면 구독 중인 모든 클라이언트에 보내집니다.
이런 메시지의 교환을 중계하는 서버를 MQTT 브로커라 하고 메시지를 수신하는 시스템을 MQTT 구독자라고 합니다.
MQTT에서 데이터를 수집하려면 먼저 토픽을 작성하고 그것을 구독(Sub)합니다. 그리고 각 디바이스가 토픽에 메시지를 전달하는 프로그램을 작성하면 MQTT가 정하는 규칙에 따라 메시지 배송이 이루어집니다.
'데이터 엔지니어링' 카테고리의 다른 글
[Kafka] kafka 아키텍처와 구성 (0) | 2024.01.21 |
---|---|
[Kafka] Apache kafka 소개와 배경 (1) | 2024.01.19 |
[빅데이터를 지탱하는 기술] 빅데이터의 축적 # 1 (0) | 2023.05.26 |
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 5 (0) | 2023.05.24 |
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 4 (0) | 2023.05.23 |