본문 바로가기
Theory/IoT

03 IoT 아키텍처 구성 (2/3)

by Orangetasteboy 2023. 7. 28.

데이터 수신

1. 수신 서버 역할

디바이스로부터 전송된 데이터를 수신하는 것이 목적

디바이스와 시스템 간의 중간자 역할

 

디바이스에서 서버로 데이터 전송 방법

  • HTTP를 이용한 웹 API를 제공하여 디바이스에서 액세스
  • 웹소켓이나 WebRTC와 같이 음성이나 영상 등의 실시간 통신 수행

데이터를 전송할 때마다 커넥션 필요

클라이언트에서 요청이 없으면 통신 불가

 

 

2. HTTP

수신 서버는 일반적인 웹 프레임워크를 이용하여 구성 가능

디바이스는 서버로 HTTP GET 메소드나 POST 메소드로 액세스하고, request 파라미터 또는 BODY를 통해 데이터 송신

 

 

3. 웹소켓

인터넷상에서 소켓 통신을 실현하기 위한 통신 프로토콜

웹 브라우저와 웹 서버 간의 데이터를 쌍방향, 연속적으로 송수신 가능

클라이언트로부터 최초의 커넥션 확립 요청에 의해 커넥션이 연결되면, 데이터 송수신 계속 가능

커넥션이 연결되어 있으면 클라이언트의 요구 없이도 서버로부터 클라이언트에 데이터 전송 가능

 

음성 데이터와 같이 연속하는 데이터를 전송할 때나 클라이언트와 서버 간에 데이터 송수신이 필요한 경우에 이용

서버와 클라이언트의 데이터 송수신만을 제공

애플리케이션 레벨에서 프로토콜을 별도 결정 필요

 

 

4. MQTT

관련 내용은 아래의 게시글을 열람하길 바란다.

 

01 MQTT 서버 구축 (Linux 환경) (23.01.04)

Linux 실습 가상 환경 구축이 필요하시면 아래 게시글을 참고하세요. 01 리눅스 기초 (22.09.14) orangetasteboy.tistory.com 메시지 큐 관련 학습이 필요하시면 아래 게시글을 참고하세요. 01 메시지 큐 (Messag

orangetasteboy.tistory.com

 

 

5. 데이터 포맷

XML과 JSON 이용

XML은 JSON보다 읽기 쉬운 형식이지만 문자 수가 많아 데이터 양이 JSON보다 큼.

모바일 회선과 같이 느린 회선에서 통신하는 경우에는 데이터 양이 적은 JSON이 적합

 

디바이스에서 보내지는 데이터는 텍스트보다 바이너리로서 다루는 것이 바람직

XML과 JSON은 텍스트 형식으로 다루기 때문에 IoT 서비스상에서 다루는 경우는 텍스트 데이터를 수치 데이터나 바이너리로 변환

XML, JSON 포맷을 파싱하고 파싱된 값을 텍스트 형식에서 바이너리 형식으로 변환하는 작업 필요

 

MessagePack

수신하는 데이터를 바이너리 형식 그대로 수신하여 데이터 처리를 빠르게 하기 위해 사용하는 데이터 포맷

JSON과 비슷한 데이터 포맷을 가지면서 데이터 형식은 바이너리 형식

사람이 직접 읽기에는 적합하지 않지만, 컴퓨터가 처리하는 데는 유용

바이너리 데이터를 전송하므로 텍스트 형식으로 전송하는 JSON과 비교하면 더욱 compact


데이터 처리

1. 처리 서버의 역할

수신한 데이터를 처리하는 부분

데이터 처리 방법 : 데이터 분석, 데이터 가공, 데이터 저장, 디바이스로의 명령

데이터 분석과 가공에는 배치 처리와 스트림 처리, 두 가지 방식이 있음.

 

 

2. 배치 처리

수집한 데이터를 일정 간격으로 처리하는 데이터 처리 방식

 

일반적 : 데이터를 우선 DB에 저장해두고, 정해진 시간에 DB로부터 데이터를 취득해서 처리

배치 처리 : 정해진 시간 안에 모든 데이터를 처리하는 것이 중요, 처리할 데이터 건수가 많을수록 시스템 성능 중요

 

디바이스 수가 증가할수록 대용량 데이처 처리 요구

대용량 데이터 처리를 위해서 분산 처리 기반의 소프트웨어를 사용 (하둡, 스파크)

 

아파치 하둡

대규모 데이터를 분산 처리하기 위한 오픈 소스 프레임워크

맵리듀스라는 구조를 사용하여 효율적으로 처리

노드마다 맵리듀스를 수행하고 결과 취합

 

  1. 각 서버(노드)에 처리 대상의 데이터 분류
  2. 우선 Map이 수행되고 Map에서는 각 데이터에 관해 같은 처리 반복
  3. Map에서 변경된 데이터는 Shuffle 처리로 보내짐.
  4. Shuffle에서는 모든 하둡 노드에서 같은 종류의 데이터로 분류
  5. Reduce에서 분류된 데이터 정리

 

분산 환경에서 동작하기 위해 분산 파일 시스템(HDFS)이라는 구조를 가짐.

HDFS는 여러 개의 디스크에 데이터를 나눠서 저장

데이터를 읽을 때는 여러 디스크에 분할된 데이터를 동시에 읽음.

한 대의 디스크에서 용량이 큰 데이터를 읽을 때보다 고속으로 읽기 가능

 

아파치 스파크

대용량 데이터를 분산 처리하기 위한 오픈 소스 프레임워크

데이터를 RDD 구조로 다룸.

 

RDD(Resilient Distributed Dataset)

디스크 액세스를 하지 않고도 데이터 처리 가능

RDD에서 사용하는 메모리는 write 불가

처리 결과는 새로운 메모리에 저장

두 메모리 간의 관계를 유지함으로써 재계산이 필요한 경우에도 처음부터 계산하는 것이 아니라 필요한 시점부터 계산 가능

스파크는 기계 학습 등 한 개의 데이터에 관해 반복 처리를 수행하는 경우 매우 빠르게 동작 가능

 

 

3. 스트림 처리

데이터를 저장하지 않고 처리 서버에 도달한 데이터를 차례로 처리

주어진 데이터를 실시간으로 처리하고 싶은 경우에 유용

도착한 데이터를 연속해서 처리

한 번 데이터를 이용하고 저장이 필요치 않은 데이터는 그대로 폐기

 

스파크 스트리밍

스파크를 스트림 처리에 이용 가능하게 해주는 아파치 스파크의 라이브러리

데이터를 RDD로 분류

분류된 데이터를 작은 처리 단위로 배치 처리

입력된 데이터를 DStream이라고 불리는 연속된 RDD로 변환

한 개의 RDD에 관해서 스파크 배치 처리를 실행하고 별도의 RDD로 변환

 

아파치 스톰

스트림 처리를 위한 프레임워크

스톰으로 처리하는 데이터는 튜플이라고 함.

튜플의 흐름 =스트림

스톰의 처리는 스파웃과 볼트 처리로 구성되고 이것을 토폴로지하고 함.

 

  1. 스톰 처리는 스파웃이 외부 처리로부터 데이터를 수신하는 것으로 시작
  2. 스파웃은 수신한 데이터를 튜플로 나누어 토폴로지에 보내는 것으로 스트림 생성
  3. 볼트는 스파웃이나 다른 볼트로부터 출력된 스트림을 수신하여 튜플 단위로 처리하고 새로운 스트림으로 출력

 

볼트 간의 연결은 자유롭게 구성 가능

토폴로지는 실행하고 싶은 처리에 따라 자유롭게 구성 가능

튜플에 이용하는 데이터 형태도 자유롭게 결정 가능 (JSON 등 이용 가능)

'Theory > IoT' 카테고리의 다른 글

05 IoT 관련 통신 프로토콜  (0) 2023.08.10
04 IoT 아키텍처 구성 (3/3)  (0) 2023.07.29
02 IoT 아키텍처 구성 (1/3)  (0) 2023.07.28
01 IoT 기초  (0) 2023.07.27

댓글