Protocol(MQTT)

5222 단어 it 지식it 지식

Protocol

우리는 일상 생활에서 쉽게 컴퓨터끼리 통신을 합니다. 동료에게 이메일을 보내거나 네이버에 검색을 할 때 내 컴퓨터와 다른 컴퓨터가 통신을 하면서 정보를 주고 받습니다.

그러면 여기서 의문이 궁금증이 생깁니다. 어떻게 컴퓨터끼리 정보를 주고 받을 수 있을까? 어떻게 서로 다른 컴퓨터가 소통을 할수 있을까? 여기서 등장하는 도구가 바로 프로토콜 입니다.

Protocol이란?

protocol은 컴퓨터와 컴퓨터가 통신을 하기위한 약속입니다. 사전에 정한 약속을 통해서 해당하는 규격에 맞는 정보를 담아 보내는 통신 규격입니다. 컴퓨터는 이러한 프로토콜을 사용하여 다른 컴퓨터와 통신을 할 수 있습니다. 프로토콜에는 다양한 유형들이 존재합니다. HTTP, VoIP, ARP, FTP 등등이 있습니다.

이렇게 다양한 프로토콜이 존재하는 이유는 컴퓨터끼리 통신하는 상황이 다르기 때문입니다.

우리는 컴퓨터를 사용하여 웹 서핑을 하거나 이메일을 전송하거나 유튜브를 시청하는 등 다양한 방법으로 사용합니다.

그럼 컴퓨터는 각각의 방법마다 같은 프로토콜을 사용하여 통신을하게되면 구지 필요없는 정보까지 보내야되서 비효율적입니다. 그래서 상황에 맞는 프로토콜(통신 약속)을 사용하여 효율적으로 통신 해야합니다.

웹 서핑 : HTTP
파일 업로드 : FTP
인터넷 전화 : VoIP

이해를 위한 구체적인 예시

인터넷 전화에서 중요하게 생각하는 요소와 파일 업로드에서 중요하게 생각하는 요소가 다르다. 인터넷 전화는 실시간성이 중요하고 파일 업로드는 온전하게 파일이 전송되는 것을 중요하게 생각한다.

인터넷 전화에서 온전하게 데이터가 전송되는 부분에 집중한다면 통화는 자주 끊기게 될 것이고, 파일 업로드에서 속도만을 중요시 한다면 파일 업로드가 완료되고 실행 할 때 파일이 깨져서 실행되지 않을 것이다.

따라서 중요하게 생각하는 요소에 따라 집중하는 부분이 다르게 프로토콜이 구성되어 있고 상황에 맞는 프로토콜로 통신해야한다.

정리:: Protocol은 컴퓨터끼리 통신하기 위한 약속이다.

프로토콜의 구성

앞에서 프로토콜은 통신하기 위한 약속이라고 하였는데 프로토콜의 구성을 통해서 사전에 어떤 것을 정하면 되는지 알 수 있다.

Syntax(구문)

  • 데이터의 포멧을 정합니다.

Semantic(의미)

  • 데이터가 어떤 것을 가리키고 있는지를 나타내는 제어 정보입니다.

Timing(순서)

  • 전송하는 속도나 양을 정합니다. 각각의 프로토콜 마다 속도 및 전송하는 데이터의 양이 다릅니다.

이렇게 3가지를 사전에 약속하면 컴퓨터는 정해진 약속에 따라 수행하기만 하면 된다.

프로토콜의 기능

프로토콜은 종류에 따라서 각기 다른 기능을 갖습니다. 많은 프로토콜 중에서 가장 기본되는 기능은 Fragmentation(단편화)입니다.

단편화

데이터를 패킷 단위로 나눠서 전송합니다. 패킷으로 나눠서 전송하는 이유는 하나의 데이터를 나눠서 전송하니 속도적인 측면에서 빠릅니다. 또한 오류가 발생하였을 때 작게 나눠져있기 때문에 쉽게 오류를 발견하고 수정할 수 있습니다.

재조합

다음은 단편화로 나눠진 패킷을 원래 데이터로 재조합하는 Reassembly(재조합) 입니다. 나눠진 패킷을 한번에 모으는 기능을 합니다. 재조합을 하면서 패킷의 손실 및 오류의 유무를 판단하여 문제가 있는 패킷을 다시 전송 받을 수 있습니다.

순서 제어

재조합에서 패킷의 오류가 발생했는지 오류가 발생하면 어디서 발생했는지 알기 위해서 패킷의 순서를 정해주는 것이 순서 제어입니다. 순서 제어를 통해서 패킷의 번호를 설정하고 재조합시 오류가 발생하면 데이터를 처음부터 다시 받는게 아니라 문제가 발생한 패킷의 번호만 다시 전송 받습니다.

흐름 제어

프로토콜 구성에 Timing 포함되어 있는데 전송시에 데이터의 전송 속도나 양을 정하는 부분입니다. 따라서 프로토콜에서는 사전에 정한 Timing을 지키기 위해서 데이터의 흐름을 제어합니다.

캡슐화

컴퓨터가 다른 컴퓨터에게 데이터를 전송할 때 네트워크를 통해서 데이터를 전송하게 된니다. 네트워크의 계층에 따라서 요구하는 프로토콜이 다릅니다. 그래서 데이터가 전송되는 순서에 따라서 통신 프로토콜이 달라집니다. 데이터를 감싸는 프로토콜들이 네트워크 계층에 따라서 겹겹이 둘러쌓여 있는것을 캡슐화라고 합니다.

TCP/UDP

네트워크 계층 중에서 Transport에서 사용되는 프로토콜은 TCP/UDP가 존재합니다.

둘의 가장 큰 차이는 데이터의 신뢰성입니다.

둘다 데이터를 단편화로 패킷을 나누고 전송을 합니다. 여기서 차이가 발생을 하는데 TCP는 패킷들을 전달 받은 후에 장애가 있는지를 확인하고 장애가 있다면 유실된 데이터나 오류가 있는 데이터를 재전송을 받습니다. 반면 UDP는 패킷을 전달 받은 후에 장애가 있는지 확인하지 않습니다.

결론: TCP와 UDP는 데이터의 신뢰성에서 차이가 있다. TCP는 신뢰성이 높은 반면에 속도가 느리다. 따라서 정확한 데이터의 통신에서 필요하다 ex) 파일 전송, 이메일 전송 UDP는 신뢰성이 떨어지는 반면 속도가 빠르다. 따라서 실시간 데이터 전송이 필요한 동영상 스트리밍, 인터넷 전화에서 사용된다.

MQTT

MQTT는 Message Queue Telemetry Transport의 약자로 통신 장비, 모바일, 스마트폰 기기에 최정화된 가벼운 메시징 프로토콜로 IoT 통신에서 가장 많이 사용되는 프로토콜 입니다.

IoT 통신에서도 HTTP, HTTPS 프로토콜을 사용하여 통신 할 수 있지만 무거운 만큼 성능 저하가 발생하기 때문에 상대적으로 가벼운 MQTT 프로토콜을 사용하여 통신합니다.

MQTT의 통신 방법

MQTT는 Broker Pattern을 사용합니다.

What is Broker Pattern

일반적인 메시지 통신은 클라이언트가 서버에게 전달을하면 서버가 다른 클라이언트에 메시지를 전달해주는 방식인데 Broker Pattern을 적용한 통신은 클라이언트와 서버 중간에 중계 서버가 존재하여 Topic을 발행하여 해당 Topic을 발행한 구독자들에게 메시지를 전달해주는 방식입니다.

장치에서 데이터를 전송하면 중간에 Broker 서버에서 해당 Topic을 구독한 서버의 디비나 서버의 모니터링 시스템에 데이터를 전송해주는 역할을 합니다. 위와 같은 방식으로 통신을하게되면 쉽게 1:1, 1:N, N:1, N:N 통신을 Topic으로 구현 할 수 있습니다.

일반적인 메시지 통신에 비해서 리소스를 절약 할 수 있습니다.

MQTT 특징

  • 단순하고 가벼운 메시징 프로토콜입니다.

  • TLS/SSL을 지원합니다.

  • 사용자 인증 방식을 제공합니다.

  • 오픈 소스입니다.

MQTT는 TLS/SSL을 지원하기 때문에 보안상으로도 안전합니다. 또한 프로토콜이 가벼워 낮은 스펙에서도 무리없이 통신이 가능하기 때문에 IoT통신에 적합하여 IoT 통신에서 많이 사용되고 있습니다.

  • 연결지향적

MQTT 브로커와 연결을 요청하는 클라이언트는 TCP/IP 소켓 연결을 한 후 명시적으로 연결을 종료하거나 네트워크 사정에 의해서 연결이 종료될 때 까지 상태를 유지한다. 만약 연결이 끊어지면 다시 접속이 가능하다.

MQTT QoS(Quality of Service)

MQTT는 데이터의 신뢰성을 3단계로 구분 짓습니다.

  • QoS 0: 최대 1회 전송, 데이터가 잘 전송 됬는지 신경 쓰지 않는다.

  • QoS 1: 최소 1회 전송, 클라이언트가 메시지를 잘 전송 받았는지 불확실 하면 정해진 횟수만큼 반복 전송한다. 메시지의 HandShaking 과정을 추적하지는 않는다(성능 때문에) 따라서 데이터가 중복으로 전송될 위험이 있다.

  • QoS 2: 클라이언트에게 전달될 메시지를 정확하게 전송한다.메시지의 HandShaking 과정을 추적한다. 데이터의 신뢰성이 높다. 다만 성능이 비교적 떨어지는 단점이 있다.

MQTT의 동작 구조

MQTT는 서버와 클라이언트가 직접 통신하지 않고 중간에 Broker가 존재하는 Broker Pattern을 따릅니다. 토큰 단위로 특정 토큰을 구독한 사용자만 해당 토큰에 발행된 메시지를 받을 수 있습니다.

시나리오

개발자 1,2,3,4가 있다.

개발 소직을 전달하는 커뮤니티가 있다.

커뮤니티에서 '개발자 모여라'라는 토큰을 발행한다.

개발자 1,2는 개발자 모여라 토큰을 구독한다.

커뮤니티에서 '개발자 모여라' 토큰에 '개발자는 항상 피곤하다'라는 메시지를 발행하였다.

'개발자 모여라' 토큰에 발행된 메시지는 해당 토큰을 구독한 개발자 1,2에게 전송된다.

MQTT Broker

MQTT는 Broker라는 중계 서버를 사용합니다. MQTT를 사용하기 위해서는 Broker 서버를 생성해야 합니다. 서버를 직접 생성할 수도 있지만 일반적으로는 Library를 사용해서 서버를 생성합니다.

  • mosquitto
  • RabbitMq
  • ActiveMq
  • HiveMq

등이 있습니다. 원하는 라이브러리를 선택해서 사용하면 쉽게 Broker를 생성할 수 있습니다.

좋은 웹페이지 즐겨찾기