MQTT 사용 사례: MQTT는 어떤 용도로 사용되나요?
Published: 2024-02-07 02:21:03

MQTT는 어떤 용도로 사용되나요?
-------------------

[MQTT는](https://www.pubnub.com/guides/mqtt/) 전력 효율적이고 최소한의 대역폭을 소비하도록 설계된 IoT 디바이스에 일반적으로 사용되는 경량 메시징 프로토콜입니다.

MQTT 프로토콜은 [TCP/IP를](https://www.pubnub.com/guides/tcp-ip/) 통해 실행되며, 무손실 통신이 가능한 양방향 [게시-구독](https://www.pubnub.com/guides/everything-you-need-to-know-about-pub-sub/) 모델을 기반으로 하여 MQTT 메시지가 손실 없이 효율적으로 전달되도록 보장합니다.

MQTT는 대역폭과 CPU 한계를 강력하게 고려한 로우 오버헤드 프로토콜로 구축되었습니다. 임베디드 환경에서 안정적이고 효과적으로 통신 수단을 제공할 수 있도록 설계되었습니다.

MQTT는 기본적으로 게시/구독(pub/sub) 프로토콜입니다. 이를 통해 클라이언트는 특정 주제에 대해 퍼블리셔, 구독자 또는 둘 다로 연결할 수 있습니다. 클라이언트는 모든 메시지 전달을 처리하는 브로커에 연결하며, 각 클라이언트는 고유한 클라이언트 ID로 식별됩니다.

### **실제 MQTT 예제 및 사용 사례**

MQTT는 센서, 액추에이터, 가전제품과 같은 저전력 디바이스에 연결하고 통신하여 전송되는 데이터의 페이로드를 효율적으로 관리하기 위한 [IoT 애플리케이션에](https://www.pubnub.com/solutions/iot-device-control/) 일반적으로 사용됩니다.

농업 분야에서는 토양 수분, 온도, 습도 등의 환경 요인을 모니터링하여 농부가 적절한 조치를 취할 수 있도록 하는 데 MQTT가 사용됩니다. 산업 자동화 분야에서 MQTT는 엔드투엔드 제조 공정을 모니터링하여 일관된 품질을 보장하고 생산 체인의 시스템적 문제를 식별할 수 있습니다. 교통 분야에서는 에코시스템과 낮은 대역폭 요구 사항을 고려하면서 신호등, 주차 미터기, 대중교통의 실시간 위치를 모니터링하는 데 MQTT가 사용됩니다.

### **왜 HTTP 대신 MQTT를 사용하나요?**

[HTTP와](https://www.pubnub.com/guides/http/) MQTT는 서로 다른 용도로 사용되는 매우 다른 두 가지 통신 프로토콜입니다.

HTTP는 클라이언트의 요청에 대한 응답으로만 데이터를 전달하는 요청/응답 프로토콜입니다. 대용량 데이터 전송을 위해 설계되었으며 웹 페이지, 이미지, 동영상 전송에 주로 사용됩니다. MQTT는 비동기 메시지 전송을 가능하게 하는 게시/서브 프로토콜로, 여러 클라이언트가 하나의 토픽을 구독하고 게시자로부터 메시지를 수신할 수 있습니다. MQTT는 소량의 데이터에 최적화되어 있지만 네트워크 오버헤드와 디바이스 전력 소비 측면에서 HTTP보다 효율적이기 때문에 AWS IoT 서비스에서 관리하는 것과 같이 낮은 대역폭과 최소한의 전력 사용이 필요한 애플리케이션에 적합합니다.

### MQTT는 어떤 언어로 작성되나요?

MQTT는 프로토콜일 뿐이며 다양한 언어로 작성될 수 있습니다. 그러나 MQTT 프로토콜을 사용하여 통신하는 데 사용되는 MQTT 클라이언트 라이브러리는 [Node.js](https://www.pubnub.com/blog/nodejs-websocket-programming-examples/), Ruby, Go, PHP, Swift를 [비롯하여](https://www.pubnub.com/guides/javascript/) [C/C++](https://www.pubnub.com/docs/sdks/windows-cpp/api-reference/publish-and-subscribe), [Java](https://www.pubnub.com/docs/sdks/java/api-reference/publish-and-subscribe), Python, [JavaScript](https://www.pubnub.com/guides/javascript/)등 여러 언어로 제공됩니다. MQTT 클라이언트 라이브러리는 여러 프로그래밍 언어에서도 사용할 수 있는 MQTT 브로커를 통해 통신합니다.

**MQTT는 어떻게 작동하나요?**
--------------------

MQTT는 매우 유연한 프로토콜이지만, 기본 개체는 MQTT 클라이언트와 MQTT 브로커 두 가지뿐입니다.

### MQTT 클라이언트는 어떻게 작동하나요?

MQTT 클라이언트는 MQTT 프로토콜을 구현하는 모든 엔드포인트가 될 수 있습니다. IoT의 경우 클라이언트는 센서, 모니터, 아두이노 보드와 같은 연결된 디바이스이지만, MQTT는 IoT에 국한되지 않으며, 예를 들어 스마트폰이나 노트북도 클라이언트가 될 수 있습니다.

MQTT 클라이언트는 서로 직접 통신하지 않습니다. 하지만 모든 상호 작용은 클라이언트 사이에 위치하여 메시지 라우팅을 처리하는 MQTT 브로커라고 하는 서버 구성 요소에 의해 '중개'됩니다.

### MQTT 그룹화란 무엇인가요?

MQTT의 모든 커뮤니케이션은 '토픽'으로 그룹화됩니다. MQTT 클라이언트는 토픽에 메시지를 게시하고 다른 사람들로부터 메시지를 받기 위해 구독할 수 있습니다. 토픽은 모든 문자열이 될 수 있으며, 사용 사례에 따라 그룹 채팅의 메시지처럼 센서 업데이트가 토픽에 게시되는 등 공통의 관심사를 가진 주제를 그룹화하기 위한 것입니다.

### MQTT 브로커란 무엇인가요?

브로커는 어떤 클라이언트가 어떤 토픽에 가입되어 있는지 관리하고, 특정 토픽에 게시된 메시지를 수신하며, 업데이트를 위해 가입된 모든 클라이언트에게 해당 메시지를 전송하는 역할을 합니다. 클라이언트와 브로커 간의 연결이 끊어지면, 브로커는 메시지를 캐싱하여 연결이 다시 설정될 때 클라이언트에게 전달하는 역할도 담당하게 됩니다.

![](https://pubnub.com/cdn/3prze68gbwl1/010wxh2h4hFBh3nJ3bSSfV/5534ff8b8041c7634edf9a9e430213cb/MQTT_Brokers.png)

### **어떤 MQTT 브로커를 사용할 수 있나요?**

MQTT 브로커는 MQTT 프로토콜의 기본이며, MQTT 서버로 간주할 수 있습니다. 앞서 언급했듯이, 브로커는 모든 클라이언트 사이에 위치하여 통신을 원활하게 합니다.

오픈 소스 및 독점적인 MQTT 브로커가 많이 존재하며, MQTT 기반 배포에서 가장 중요한 아키텍처 결정 중 하나는 브로커를 호스팅하는 방법입니다. MQTT는 매우 큰 규모로 실행되도록 설계되었기 때문에 모든 브로커 아키텍처는 그에 맞게 확장되어야 합니다. 대부분의 기업 배포는 클라우드에 호스팅된 독점 제품을 사용하므로 인프라에 대한 걱정이 없지만, 자체 호스팅 옵션도 사용할 수 있습니다.

브로커는 모든 통신 사이에 위치하여 메시지를 보관하고 모든 세션의 보안 기록을 유지할 수 있으며, 클라이언트가 서로 격리되어 있어 클라이언트의 불안정성과 취약성을 샌드박스화할 수 있고, 네트워크 토폴로지에 따라 브로커가 네트워크 전반의 트래픽을 줄이고 보다 효율적인 라우팅을 가능하게 해줍니다.

MQTT 및 Pub/Sub 사용 방법
--------------------

MQTT 프로토콜을 지원하는 모든 클라이언트는 토픽을 구독 및 게시할 수 있지만, 아래 예시 모델에서 볼 수 있듯이 모든 통신은 브로커를 통해 이루어집니다.

![](https://pubnub.com/cdn/3prze68gbwl1/1ydm5PYB4ietnpbnz0faTk/6995f5a911c1e73da1b6936c39ac1a7c/MQTT_and_Pub_sub.png)

저희는**자체 MQTT 브로커인** [**MQTT 브릿지를**](https://www.pubnub.com/docs/sdks/mqtt) 통해 **PubNub와 MQTT 솔루션을 원활하게 통합할 수 있습니다. 자세한 내용은 이 글의 끝부분에서 확인할 수** 있습니다.

**MQTT 프로토콜 기능**

흔히 IoT 솔루션으로 간주되지만, MQTT는 잘 알려진 많은 IoT 제품의 기반이 되는 프로토콜일 뿐입니다. MQTT의 많은 기능은 기기 간의 효율적인 통신에 특히 적합합니다:

**손쉬운 시작과 실행**

MQTT는 오랫동안 사용되어 왔으며, 강력하고 안정적이며 확장 가능한 독점 및 오픈 소스 솔루션이 많이 있습니다. 이러한 기존 MQTT 구성 요소는 대규모 솔루션부터 열정적인 프로젝트에 이르기까지 모든 프로젝트에서 수정 없이 개발자 경험에 관계없이 사용할 수 있습니다.

**신뢰성 및 구성**

MQTT에는 나중에 자세히 설명하는 서비스 품질(QoS) 개념이 있는데, 이는 MQTT 브로커에서 메시지를 대기열에 넣고 캐시하여 연결이 다시 설정되면 클라이언트에 전달합니다. 이는 부분적으로 연결된 장치나 IoT 장치와 같이 간헐적으로 연결되는 클라이언트에서 특히 효과적입니다.

**클라이언트는 솔루션 아키텍처를 고려할 필요가 없습니다.**

MQTT를 사용하면 토픽에 메시지를 게시하고 사용 가능할 때 메시지를 수신할 수 있습니다. 클라이언트는 연결 설정 또는 재설정이나 수신자가 메시지를 수신하고 있는지 여부에 대해 걱정할 필요가 없으며, "그냥 작동"합니다.

**확장성을 고려한 설계**

MQTT는 스타트업부터 글로벌 기업까지 솔루션의 규모에 상관없이 모든 상황에 대응할 수 있습니다. 가장 유명한 예로, 페이스북 메신저는 커뮤니케이션에 MQTT를 사용하고 있습니다.

### **MQTT 세션 수명 주기**

MQTT는 연결을 위해 [TCP/IP에](https://www.geeksforgeeks.org/tcp-ip-model/) 의존하므로 다음과 같은 유사한 수명 주기를 따릅니다.

**연결**

MQTT 클라이언트가 MQTT 브로커에 대한 연결을 시작합니다. 일반적으로 표준 MQTT 포트[(](https://5gcroco.eu/images/templates/rsvario/images/5GCroCo_MQTT_webseminar.pdf) 보안 연결과 비보안 연결의 경우 각각[1883/883](https://5gcroco.eu/images/templates/rsvario/images/5GCroCo_MQTT_webseminar.pdf) )를 통해 이루어집니다.

**인증**

MQTT 프로토콜은 대부분의 사용 사례에 충분한 기본 TCP/IP 연결에 대해 [TLS](https://www.pubnub.com/guides/ssl-tls/) 이상의 인증 고려 사항이 없습니다.

**게시/구독**

연결되면 클라이언트는 토픽을 게시하거나 구독하여 메시지를 주고받을 수 있습니다.

**연결 해제**

연결 해제는 클라이언트 또는 브로커에 의해 시작될 수 있으며, 진행 중인 요청이 모두 처리된 후 MQTT 세션이 종료됩니다.

![](https://pubnub.com/cdn/3prze68gbwl1/1jvUkts6It8DfsYNqDpLDx/78c82a87b78a21684b6549c7ff66d536/MQTT_lifecycle_chart.png)

### **MQTT 서비스 품질(QoS)**

[서비스 품질을](http://www.steves-internet-guide.com/mqtt-which-qos-to-use/) 통해 솔루션 설계자는 MQTT 연결의 안정성을 지정할 수 있으며, 일반적으로 연결의 안정성이 높을수록 재시도 및 메시지 보존을 위한 잠재적 메모리 오버헤드가 커집니다.

**QoS -1**

메시지는 한 번만 전송되며 클라이언트와 브로커는 배달을 확인하기 위한 추가 단계를 수행하지 않습니다. 이를 "발사 후 잊어버림"이라고도 합니다.

이는 클라이언트가 보낸 메시지에만 적용됩니다. 메시지가 브로커에서 수신되면 QoS 0으로 간주됩니다.

**QoS 0**

발신자와 수신자가 핸드셰이크를 수행하여 메시지의 사본이 한 개만 수신되도록 합니다. 이렇게 하면 메시지의 전달이 보장되고 메시지의 사본이 여러 개 전송되는 것을 방지할 수 있습니다.

**QoS 1**

수신자가 수신을 확인할 때까지 메시지가 여러 번 다시 전송됩니다. 이 방법은 시간에 민감한 메시지에 가장 적합하지만 메시지가 중복 수신될 수 있습니다.

**MQTT 사용 사례와 IoT**
-------------------

MQTT는 가볍고 전력 효율이 높은 프로토콜로, 지난 수년 동안 전력 효율이 주요 고려 사항인 솔루션에 사용되어 왔습니다.

IoT는 MQTT가 가장 널리 사용되는 예시입니다. IoT 장치는 일반적으로 배터리로 작동하며 유지보수 비용이 매우 높기 때문에 배터리 교체 주기가 길어야 합니다. 가정 환경에서는 배터리를 가끔 교체하는 것이 어렵지 않지만, 산업 환경에서는 수천 개의 센서가 넓은 지역에 퍼져 있고 접근하기 어려운 위치에 있는 경우가 많아 유지보수 비용이 매우 빠르게 상승할 수 있습니다.

화재 감지기, 도난 추적, 위치 모니터링, 센서, 엔진 상태 등 MQTT[IoT](https://www.pubnub.com/blog/new-improved-pubnub-mqtt-support-and-iot-capabilities/) 사용 사례에는 화재 감지기, 도난 추적, 위치 모니터링, 센서 등이 포함됩니다. 또한 MQTT는 데이터 오버헤드가 매우 낮기 때문에 데이터가 비싸거나 수천 개의 장치가 배포되어 대역폭이 우려되는 환경에서는 MQTT가 이상적입니다.

PubNub와**MQTT는 IoT에 적합하게 함께 작동합니다** . **안정적이고 확장 가능하며 효율적인 IoT 솔루션을 제공하는 방법에 대해 자세히 알아보려면**[**IoT**](https://www.pubnub.com/demos/iot-dashboard/) **데모와** [**IoT 튜토리얼을**](https://www.pubnub.com/tutorials/iot-dashboard/)**참조하세요** .

MQTT는 실시간 커뮤니케이션에서도 매우 널리 사용되고 있으며, 가장 잘 알려진 예로 Facebook 메신저를 들 수 있습니다. Facebook이 MQTT를 선택한 이유는 무엇일까요? 휴대폰의 배터리를 소모하지 않고, 과도한 데이터를 사용하지 않으며, 안전한 프로토콜에서 실행되고, 확장이 가능하고, 그룹 채팅을 쉽게 할 수 있으며, 중앙 MQTT 브로커 백본 인프라를 통해 모든 데이터를 배포할 수 있기 때문이죠.

**펍넙은 MQTT 사용 사례를 지원하나요?**
--------------------------

물론입니다! PubNub은 [매우 짧은 지연 시간을](https://www.pubnub.com/guides/whats-so-important-about-low-latency/) 제공하는 [MQTT 브릿지를](https://www.pubnub.com/docs/sdks/mqtt) 제공하여 사용자 정의 MQTT 브로커를 배포할 필요가 없으며, [함수](https://www.pubnub.com/docs/general/portal/functions) 및 [데이터 스트리밍과](https://www.pubnub.com/docs/channels/subscribe) 같은 다른 PubNub 기능과의 간단한 통합을 제공합니다.

PubNub는 게시-구독 모델을 중심으로 설계되었기 때문에 MQTT에 매우 잘 매핑됩니다:

-   게시/구독: 다음 개념은 PubNub와 MQTT 모두 동일합니다.
    
-   PubNub 채널: MQTT에서 이에 해당하는 개념은 '토픽'입니다.
    
-   UUID: PubNub와 MQTT 모두 각 클라이언트에 할당된 고유 식별자라는 개념이 있습니다.
    

와일드카드: 채널/토픽을 구독할 때 와일드카드: PubNub와 MQTT 모두 와일드카드를 지원합니다. PubNub [문서](https://www.pubnub.com/docs/sdks/mqtt#wildcard-subscribe) 를 참조하세요.

MQTT 사용 사례를 활용하는 방법
-------------------

MQTT를 커뮤니케이션 수단으로 사용하는 핵심은 토픽입니다. 토픽은 놀랍도록 간단한 아이디어로, MQTT만의 고유한 개념은 아니지만, MQTT 프로토콜은 토픽의 힘을 아주 훌륭하게 활용하고 있습니다. 토픽은 암묵적으로 몇 가지 작업을 수행하는데, 가장 중요한 것은 메시지가 올바른 수신자에게 전달되도록 하는 것입니다. MQTT는 토픽을 파일 경로로 취급합니다. 토픽을 단순한 커뮤니케이션 필터로 생각하면, 경로 적용은 매우 강력해질 수 있습니다.

경로의 특정 상위 레벨이나 리프 요소에 관심이 있을 수 있습니다. 명시적으로 말하지 않아도 MQTT는 트리 경로에서 구독하는 위치에 따라 메시지를 필터링합니다. 간단한 아이디어지만 매우 효과적으로 사용할 수 있습니다.

사용 사례에 맞는 MQTT 기술 사양
--------------------

MQTT의 기술적 측면에 대해 좀 더 자세히 살펴보겠습니다. 먼저, 이 프로토콜은 TCP/IP 네트워킹 스택 위에서 실행됩니다. 클라이언트가 연결하고 게시/구독할 때, MQTT는 해당 프로세스의 핸드셰이킹에 도움이 되는 다양한 메시지 유형을 가지고 있습니다. MQTT 헤더는 2바이트이며 첫 바이트는 상수입니다.

첫 번째 바이트에는 전송되는 메시지 유형과 QoS 수준, 보존 및 DUP(중복) 플래그를 지정합니다. 두 번째 바이트는 나머지 길이 필드입니다. 관심이 있으시다면 [MQTT 사양에서](http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html) 더 많은 정보를 얻을 수 있습니다.

PubNub와 MQTT를 사용하는 방법
---------------------

[이제 PubNub이](https://www.pubnub.com/blog/new-improved-pubnub-mqtt-support-and-iot-capabilities/) 실시간 글로벌 [데이터 스트림 네트워크를](https://www.pubnub.com/products/pubnub-platform/) 통해 [MQTT를 지원하게](https://www.pubnub.com/blog/new-improved-pubnub-mqtt-support-and-iot-capabilities/) 되면서, 프로토콜에 대한 개요와 함께 저희의 관점에서 이 프로토콜을 사용할 수도 있고 사용하지 않을 수도 있는 이유를 알려드리고자 합니다.

이미 MQTT 기반 기기를 배포하셨을 수도 있습니다. 또는 새로운 IoT 배포를 고려하고 있을 수도 있습니다. 어느 쪽이든, &#8220;언제 MQTT를 사용해야 하고, 언제 PubNub를 사용해야 하는가? &#8221;라는 질문이 생기며, 두 가지를 모두 사용하는 것이 합리적일까요? MQTT 기반 디바이스를 위한 강력한 양방향 통신 옵션을 고려하고 있다면 PubNub은 엔터프라이즈급 보안, 확장성 및 안정성을 제공하며, 서비스형 기능, 프레즌스 감지, 메시지 저장 및 재생과 같은 다양한 부가가치 기능도 제공합니다. 그리고 이 모든 기능을 간단한 게시-구독 명령으로 사용할 수 있습니다.

땅콩버터와 초콜릿이라는 속담처럼 PubNub와 MQTT를 함께 사용하면 많은 임베디드 디바이스 사용 사례를 우아하게 해결할 수 있습니다. 지연 시간이 짧고 효율적인 이상 징후 감지와 같은 사용 사례를 충족하기 위해 PubNub와 MQTT를 활용할 수 있습니다. 예를 들어, [산업용 발전 터빈에 MQTT 기반 센서가](https://thenewstack.io/tutorial-implementing-predictive-maintenance-connected-devices-pubnub-azure-ml-part-1/) 있다고 가정해 보겠습니다. "서비스형 기능" 기능을 포함한 PubNub를 활용하여 센서 데이터에 실시간으로 반응하고 전송할 수 있으므로 운영팀은 데이터가 중앙 데이터센터에 도달하기 전에 터빈의 문제를 파악할 수 있습니다. 또한 PubNub을 MQTT 기반 홈 알람과 함께 활용하여 알람 전반의 신호를 검토하고 오탐을 전송하는 잘못된 알람이 있는지 식별할 수 있습니다. 또한 여러 사용 사례에 걸쳐 여러 머신 러닝 서비스에 대한 PubNub의 통합을 활용하여 이상 징후를 감지할 수 있습니다.

MQTT가 현재 인프라의 일부가 아닌 경우, 모든 [사물 인터넷](https://www.pubnub.com/solutions/iot-device-control/) 연결을 위해 PubNub의 수많은 [IoT SDK와](https://www.pubnub.com/docs/) 함께 PubNub 데이터 스트림 네트워크를 직접 활용하는 것을 고려할 수 있습니다. 또는 저전력 디바이스를 위해 MQTT가 포함된 PubNub 네트워크를 사용하는 것도 좋은 선택이 될 수 있습니다.

MQTT 지원 기기에서 펍넙 네트워크를 활용하려면 mqtt.pubnub.com에서 기기를 펍넙에 구독해야 합니다. 펍넙의 [MQTT 지원 및 IoT 기능 개선 가이드에서](https://www.pubnub.com/blog/new-improved-pubnub-mqtt-support-and-iot-capabilities/) 구독 단계를 자세히 안내해 드립니다.

추가 MQTT 리소스
-----------

-   [MQTT 프로토콜](https://mqtt.org/)
    
-   [파호 프로젝트](https://eclipse.dev/paho/) (MQTT 클라이언트)
    

펍넙이 어떤 도움을 줄 수 있나요?
===================

이 문서는 원래 [PubNub.com에](https://www.pubnub.com/blog/what-is-mqtt-use-cases/) 게시되었습니다.

저희 플랫폼은 개발자가 웹 앱, 모바일 앱, IoT 기기를 위한 실시간 인터랙티브를 구축, 제공, 관리할 수 있도록 지원합니다.

저희 플랫폼의 기반은 업계에서 가장 크고 확장성이 뛰어난 실시간 에지 메시징 네트워크입니다. 전 세계 15개 이상의 PoP가 8억 명의 월간 활성 사용자를 지원하고 99.999%의 안정성을 제공하므로 중단, 동시 접속자 수 제한, 트래픽 급증으로 인한 지연 시간 문제를 걱정할 필요가 없습니다.

PubNub 체험하기
-----------

[라이브 투어를](https://www.pubnub.com/tour/introduction/) 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.

설정하기
----

PubNub [계정에](https://admin.pubnub.com/signup/) 가입하여 PubNub 키에 무료로 즉시 액세스하세요.

시작하기
----

사용 사례나 [SDK에](https://www.pubnub.com/docs) 관계없이 [PubNub 문서를](https://www.pubnub.com/docs) 통해 바로 시작하고 실행할 수 있습니다.