소프트웨어 엔지니어
2025. 9. 20. 14:34
2025. 9. 20. 14:34
1. MQTT 개요
- **MQTT (Message Queuing Telemetry Transport)**는 경량 Pub/Sub 메시징 프로토콜.
- 설계 목적: 저대역폭, 불안정한 네트워크 환경에서 IoT 디바이스 간 메시지 교환.
- TCP/IP 위에서 동작하며, TLS를 통해 보안 통신 가능.
- 주요 특징:
- 최소 오버헤드 (작은 헤더: 2바이트)
- Publish/Subscribe 패턴 기반
- QoS 레벨 설정 가능
- 지속적 세션과 Last Will 메시지 지원
2. MQTT 아키텍처
2.1 구성 요소
- Broker
- 메시지 중앙 허브.
- 클라이언트 간 메시지 라우팅.
- QoS 처리, 세션 유지, Retained 메시지 관리.
- 예: Mosquitto, EMQX, HiveMQ
- Client
- Publisher, Subscriber 역할 가능.
- 메시지를 브로커에 발행(Publish)하거나 구독(Subscribe).
- 장치가 작을수록 경량 라이브러리 사용 (C, Python, JavaScript 등)
2.2 Topic (주제)
- 메시지가 발행되는 식별자.
- 계층 구조: home/livingroom/temperature
- 구독 패턴:
- #: 다단계 와일드카드 → 모든 하위 토픽 구독
- +: 단일 단계 와일드카드 → 특정 레벨만 구독
2.3 메시지 유형
- Publish: 클라이언트 → 브로커
- Subscribe: 브로커 → 클라이언트
- Connect / Disconnect
- Ping: 연결 유지
- Unsubscribe
2.4 QoS (Quality of Service)
- QoS 0 – At most once
- 한 번만 전송, Ack 없음
- 낮은 신뢰성, 최소 오버헤드
- QoS 1 – At least once
- 최소 한 번 전송, Ack 필요
- 중복 가능성 있음
- QoS 2 – Exactly once
- 한 번만 전송, 중복 없음
- 4단계 핸드셰이크 → 가장 안전, 오버헤드 큼
2.5 Session / Persistent 메시지
- Clean Session
- true: 연결 종료 시 구독 정보 삭제
- false: 연결 종료 후 재접속 시 메시지 미수신 복원 가능
- Retained Message
- 마지막 메시지를 브로커가 저장
- 신규 구독자가 연결 시 즉시 전달
- Last Will and Testament (LWT)
2.6 연결 흐름 (기본)
- Client → Broker 연결 (CONNECT)
- Broker → Client 연결 승인 (CONNACK)
- Client 메시지 발행 (PUBLISH) 또는 구독 (SUBSCRIBE)
- Broker → Client 전달 (PUBLISH)
- QoS/ACK 처리
- 연결 종료 (DISCONNECT)
3. 보안
- TLS/SSL: 메시지 암호화
- Username/Password: 기본 인증
- ACL: topic 단위 접근 제어
- JWT / OAuth: 토큰 기반 인증도 지원 가능
4. MQTT 장점
- 매우 경량 → IoT 디바이스 적합
- 비동기 Pub/Sub → 느슨한 결합
- 낮은 전력, 네트워크 효율
- 다양한 QoS 제공 → 안정성 조절 가능
- Retained, LWT → 장애 대응 기능
5. MQTT 단점 / 한계
- 메시지 순서 보장은 단일 클라이언트 연결 내에서만 보장
- 브로커 의존 → 단일 장애점 가능성 (클러스터링 필요)
- QoS 2 사용 시 오버헤드 큼
- HTTP/REST 대비 디버깅 도구 제한적
6. 활용 예시
- IoT 센서 데이터 수집
- 스마트홈 디바이스 제어
- 원격 모니터링 시스템
- 모바일 앱 실시간 알림
- Vehicle telematics (차량 원격 데이터 수집)