[통신] MQTT

보람찬하루·2024년 9월 6일
1

CS

목록 보기
2/2

배경

인턴을 진행하며 장비 시뮬레이션 프로그램에 MQTT 클라이언트와 브로커를 구축해야하는 상황이 생겨 MQTT에 대해 공부를 진행하였다


1. MQTT란?

  • 경량 메시지 통신 프로토콜, 주로 IoT와 저전력 장치에서 사용
  • 발행/구독(Pub/Sub) 모델 기반으로 브로커가 메시지를 중계
  • 비동기 통신으로 실시간이 아닌 느슨한 연결 제공
  • ISO 표준(ISO/IEC PRF 20922)으로, IoT(Internet of Things) 시스템에서 센서장치 간 통신에 자주 사용

2. 특징

  • 발행/구독 모델로 메시지 중계
  • QoS (Quality of Service): 0, 1, 2의 3가지 전송 신뢰 수준

    0 : 최대 1회 전송. Topic을 통해 메시지를 전송할 뿐 보장X (보낸 다음 잊어버림)
    1 : 최소 1회 전송. 구독하는 클라이언트가 메시지를 받았는지 불확실하면 정해진 횟수만큼 재전송한다. 메시지의 핸드셰이킹 과정을 엄밀하게 추적하지는 않으므로 중복의 위험성이 있다. (확인 응답을 거치는 전달)
    2 : 구독하는 클라이언트가 요구된 메시지를 정확히 한 번 수신할 수 있도록 보장한다. 메시지의 핸드셰이킹 과정을 추적한다. 높은 품질을 보장하지만 성능의 희생이 따른다. (보장된 전달)

    0에 가까울수록 메시지 처리에 대한 부하가 줄어들고, 메시지 손실의 위험이 높아진다. 반대로 2에 가까울수록 메시지 손실 위험을 줄어들지만 메시지 처리 부하가 급격히 늘어난다.
  • 경량성: 작은 헤더로 저전력, 저대역폭에서 효율적
  • 연결 유지(Keep-alive): PING 메시지를 통해 상태 확인
  • 지속성: 메시지 영구 저장 가능

3. 구성 요소

  • 브로커(Broker): 메시지 중계 서버, 클라이언트가 발행한 메시지를 구독하는 다른 클라이언트에게 전달
  • 발행자(Publisher): 메시지를 주제(Topic)에 발행
  • 구독자(Subscriber): 특정 주제를 구독해 메시지 수신
  • 주제(Topic): 메시지 전송의 논리적 채널, 계층적 구조로 이루어져 있으며, 슬래시(/)로구분 예: home/livingroom/temperature

4. 동작 방식

  • 발행자는 주제에 메시지 발행, 브로커가 구독자에게 전달
  • 하나의 클라이언트가 발생자와 구독자 역할 동시 수행 가능
  • QoS에 따라 메시지 신뢰성 보장

5. 장점

  • 경량성: 저대역폭 환경에서 사용 가능
  • 유연성: 비동기 통신으로 다수의 클라이언트 비동기 통신 지원
  • 안정성: QoS를 통해 메시지 전송 보장

6. 단점

  • 브로커 의존성: 브로커 장애 시 전체 통신에 영향
  • 보안 문제: 기본 암호화 없음, TLS 필요
  • 느림: 실시간 통신 요구에는 부적합

7. 사용 사례

  • IoT 통신: 센서와 스마트 홈 기기
  • 원격 모니터링: 기상 센서, 스마트 시티
  • 알림 시스템: 푸시 알림, 경보 시스템

8. MQTT vs HTTP

  • MQTT는 경량, 비동기 통신, HTTP는 동기 요청/응답 구조
  • MQTT는 저전력/저대역폭 장치에 적합, HTTP는 웹에 적합

9. 보안

  • TLS로 통신 암호화 지원
  • 사용자 인증(username/password) 제공

10. 브로커 예시

  • Mosquitto: 경량 오픈소스 브로커
  • EMQX: 대규모 배포에 적합한 고성능 브로커

11. 관련 라이브러리

  • paho-mqtt: 파이썬에서 MQTT 사용하는 라이브러리
  • Eclipse Mosquitto: MQTT 브로커와 클라이언트

참고 레퍼런스
profile
를 만들어 가자

0개의 댓글