MQTT?

2024. 4. 3. 16:55·여러가지/이것저것

MQTT란?

MQTT(Message Queuing Telemetry Transport)는 IoT(사물 인터넷) 장치 간의 경량 메시징 프로토콜입니다. MQTT는 저대역폭, 높은 지연 시간, 불안정한 네트워크 환경에서도 효과적으로 작동하도록 설계되었으며, IoT 애플리케이션에서 널리 사용됩니다. 이 프로토콜의 주요 특징과 장점은 다음과 같습니다


주요 특징

  • 간결하고 가벼움: 프로토콜 자체가 간결하며, Message Header의 크기가 작아 효율적인 네트워크 사용을 가능하게 한다.
  • Publisher-Subscriber Model: MQTT는 Publisher(데이터를 전송하는 Client)와 Subscriber(데이터를 수신하는 Client)간의 통신을 위한 모델을 제공한다. Client는 Topic을 Subscribe하고, 해당 Topic으로 데이터를 전송하는 다른 클라이언트는 그 데이터를 수신한다.
  • QoS(Quality of Service) 레벨: Message 전송 품질을 조절하기 위한 QoS 레벨을 제공한다. 이를 통해 메시지의 안정성과 전송 성능을 조절 할 수 있다.
  • 유연한 메시지 전송: 메시지를 지정된 Topic으로 전송하고, Client는 관심있는 Topic을 Subscribe함으로서 유연한 메시지 전송이 가능하다.
  • 접속성 및 끊김 처리: Client는 Server에 지속적으로 연결되어 있지 않아도 되며, 연결이 끊어졌을 때 재접속을 처리할 수 있다.

장점

MQTT(Message Queuing Telemetry Transport) 프로토콜의 설계와 기능은 다양한 IoT 환경에서의 효율적인 메시지 교환을 위한 여러 장점을 제공합니다. 여기에는 다음과 같은 주요 장점들이 포함됩니다:

1. 낮은 대역폭 요구사항

  • MQTT는 매우 경량의 메시지 페이로드와 효율적인 데이터 포맷을 사용합니다. 이로 인해 낮은 대역폭을 요구하며, 이는 대역폭이 제한적인 환경에서 매우 유용합니다.

2. 효율적인 데이터 전송

  • MQTT의 퍼블리시/서브스크라이브 모델은 데이터를 필요로 하는 클라이언트에만 메시지를 전송합니다. 이는 네트워크 트래픽과 서버 처리량을 최소화하는 데 도움이 됩니다.

3. 신뢰성 있는 메시지 전송

  • MQTT는 세 가지 품질 서비스(QoS) 레벨을 제공하여, 메시지가 한 번 이상, 정확히 한 번, 또는 최대 한 번 전송되도록 보장합니다. 이는 메시지 전송의 신뢰성을 크게 향상시킵니다.

4. 지연 시간 최소화

  • 경량 프로토콜과 효율적인 메시징 메커니즘으로 인해 MQTT는 매우 낮은 지연 시간을 제공합니다. 이는 실시간 응용 프로그램과 반응성이 중요한 시스템에서 특히 중요합니다.

5. 높은 상호운용성

  • MQTT는 다양한 프로그래밍 언어와 플랫폼을 지원합니다. 이로 인해 다양한 장치와 시스템 간의 통신을 용이하게 하며, IoT 생태계 내에서의 상호운용성을 강화합니다.

6. 간단한 연결 설정

  • MQTT는 클라이언트와 서버 간의 연결 설정을 간단하게 만듭니다. 이는 IoT 장치가 제한된 컴퓨팅 리소스를 가진 경우에 특히 중요합니다.

7. 네트워크 불안정성에 대한 강력한 내성

  • MQTT는 네트워크 연결이 불안정하거나 제한적인 환경에서도 잘 작동합니다. 클라이언트가 일시적으로 연결이 끊어지더라도 메시지를 저장하고 연결이 복구되면 전송할 수 있습니다.

8. 다양한 사용 사례 지원

  • 스마트 홈 자동화, 산업 모니터링, 차량 통신, 웨어러블 기기 등 다양한 IoT 응용 프로그램에서 MQTT를 활용할 수 있습니다.

단점

MQTT 프로토콜의 특성과 설계 목표로 인해 여러 장점을 제공하지만, 특정 시나리오나 환경에서는 단점이나 제한 사항으로 작용할 수 있습니다. 다음은 MQTT의 몇 가지 단점입니다:

1. 보안 취약성

  • 기본 MQTT 프로토콜은 암호화를 제공하지 않으며, 데이터의 기밀성과 무결성을 보장하기 위해서는 TLS/SSL 같은 추가적인 보안 계층이 필요합니다. 이는 특히 공개 네트워크를 통해 민감한 정보를 전송할 때 중요합니다.

2. 브로커 의존성

  • MQTT는 중앙 집중식 메시지 브로커에 의존합니다. 이는 단일 실패 지점(Single Point of Failure, SPOF)이 될 수 있으며, 브로커의 가용성이 전체 시스템의 신뢰성에 큰 영향을 미칩니다.

3. 네트워크 연결 요구

  • MQTT는 연속적인 네트워크 연결을 필요로 합니다. 일부 IoT 장치나 환경에서는 지속적인 연결을 유지하기 어려울 수 있으며, 이는 메시지 손실 또는 지연으로 이어질 수 있습니다.

4. 헤더 오버헤드

  • 비록 MQTT의 헤더 크기가 매우 작다고는 하지만, 매우 작은 데이터 패킷을 자주 전송하는 환경에서는 여전히 오버헤드가 될 수 있습니다. 이는 전력 소비량 증가와 같은 문제로 이어질 수 있습니다.

5. 메시지 순서 보장의 제한

  • MQTT는 기본적으로 메시지 순서를 보장하지 않습니다. 높은 QoS 레벨을 사용할 때에만 순서가 보장되며, 이는 추가적인 네트워크 트래픽과 처리 지연을 초래할 수 있습니다.

복잡한 상태 관리:

  • MQTT 클라이언트는 연결 상태, 구독 상태, QoS에 따른 메시지 전송 상태 등 여러 상태를 관리해야 합니다. 이는 특히 대규모 시스템에서 클라이언트 구현을 복잡하게 만들 수 있습니다.

단점을 해결 할 수 있는 대안

MQTT 프로토콜의 단점에 대한 해결책과 대안을 모색하는 것은 IoT 시스템의 신뢰성, 보안, 그리고 효율성을 증가시키는 중요한 과제입니다. 각각의 단점에 대해 고려할 수 있는 해결 방안은 다음과 같습니다:

1. 보안 취약성

  • 해결책: MQTT 메시지의 암호화와 데이터 보호를 위해 TLS/SSL 보안 계층을 사용합니다. 또한, 강력한 인증 메커니즘(예: 상호 인증, 디지털 인증서)을 구현하여 무단 액세스를 방지합니다.
  • 대안: CoAP(Constrained Application Protocol)와 같은 다른 프로토콜은 DTLS(Datagram Transport Layer Security)를 사용하여 UDP 기반 통신에서도 보안을 제공합니다.

2. 브로커 의존성

  • 해결책: 고가용성(High Availability) 구성을 사용하여 브로커의 신뢰성을 향상시킵니다. 여러 대의 브로커를 클러스터링하여 단일 실패 지점을 제거합니다.
  • 대안: P2P(Peer-to-Peer) 기반의 메시징 프로토콜을 고려할 수 있습니다. 이는 중앙 집중식 브로커 없이 장치 간 직접 통신을 가능하게 합니다.

3. 네트워크 연결 요구

  • 해결책: 로컬 네트워크에서 메시지를 캐싱하고, 장치가 다시 온라인 상태가 될 때 전송합니다. 이는 오프라인 메시징 기능을 통해 가능합니다.
  • 대안: LPWAN(Low Power Wide Area Network) 기술(예: LoRaWAN, Sigfox)은 네트워크 연결이 불안정한 환경에서도 저전력으로 장거리 통신을 가능하게 합니다.

4. 헤더 오버헤드

  • 해결책: 메시지 페이로드의 크기를 최적화하고, 필요할 때만 메시지를 전송하여 오버헤드를 최소화합니다.
  • 대안: CoAP은 매우 작은 헤더 크기를 가진 경량 프로토콜로, 제한적인 환경에서 효과적인 대안이 될 수 있습니다.

5. 메시지 순서 보장의 제한

  • 해결책: 애플리케이션 레벨에서 메시지 순서를 관리하거나, QoS 2(정확히 한 번) 수준을 사용하여 중요한 메시지의 순서를 보장합니다.
  • 대안: XMPP(Extensible Messaging and Presence Protocol)와 같은 프로토콜은 기본적으로 메시지 순서를 보장하며, 복잡한 메시징 요구 사항에 적합할 수 있습니다.

복잡한 상태 관리

  • 해결책: 고급 클라이언트 라이브러리를 사용하여 상태 관리의 복잡성을 추상화하고, 장치 관리 및 모니터링 도구를 활용하여 시스템을 효율적으로 관리합니다.
  • 대안: 더 단순한 프로토콜을 사용하여 특정 애플리케이션의 요구 사항을 충족시킬 수 있습니다. 예를 들어, 단순한 텍스트 기반 프로토콜이나 HTTP REST API가 적절할 수 있습니다.

참고

  • CoAP : https://jeongchul.tistory.com/297
  • LPWAN : https://www.dusuniot.com/ko/blog/what-is-lpwan-technology/
  • QoS : https://www.ibm.com/docs/ko/ibm-mq/9.2?topic=concepts-qualities-service-provided-by-mqtt-client
저작자표시 (새창열림)

'여러가지 > 이것저것' 카테고리의 다른 글

OOP?  (0) 2024.04.03
AMQP?  (0) 2024.04.03
커널(Kernel)  (0) 2024.03.22
XSS(Cross-Site Scripting)?  (1) 2024.03.21
SQL Injection  (0) 2024.03.21
'여러가지/이것저것' 카테고리의 다른 글
  • OOP?
  • AMQP?
  • 커널(Kernel)
  • XSS(Cross-Site Scripting)?
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (286) N
      • 여러가지 (107)
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (38)
        • 파이썬 (30)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3) N
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (5)
        • 암호화폐 (5)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Docker-compose
    java
    FastAPI
    완전탐색
    celery
    프로그래머스
    AWS
    ecs
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    자바
    SAA
    Spring Boot
    시험
    Python
    WebFlux
    OOP
    Spring WebFlux
    항해99
    백준
    파이썬
    Redis
    spring
    reactor
    DP
    취업리부트
    EC2
    RDS
    docker
    mybatis
    그리디
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
MQTT?
상단으로

티스토리툴바