TL;DR
제한된 배터리, 불안정한 네트워크 또는 pub-sub 메시징 패턴을 사용하는 IoT 장치에는 MQTT를 사용하세요. 표준 웹/모바일 API에는 HTTP를 사용하세요. MQTT는 HTTP의 100바이트 이상에 비해 2바이트 헤더를 사용하여, 제약이 있는 장치에 이상적입니다. Modern PetstoreAPI는 애완동물 추적 목걸이 및 스마트 급식기에 MQTT를 구현합니다.
소개
애완동물 추적 목걸이는 5분마다 위치 업데이트를 보내야 합니다. 6개월 동안 지속되어야 하는 코인 배터리로 작동합니다. HTTP를 사용하면 배터리가 2주 만에 방전됩니다. MQTT를 사용하면 6개월 내내 지속됩니다.
HTTP는 API의 표준이지만, IoT 장치가 아닌 웹 브라우저용으로 설계되었습니다. MQTT(Message Queuing Telemetry Transport)는 제한된 대역폭과 불안정한 네트워크를 가진 제약이 있는 장치용으로 개발되었습니다.
Modern PetstoreAPI는 웹 및 모바일 앱에는 HTTP를 사용하지만, 애완동물 추적 목걸이, 스마트 급식기, 건강 모니터와 같은 IoT 장치에는 MQTT를 사용합니다.
이 가이드에서는 언제 MQTT가 HTTP보다 우세한지 배우고, Modern PetstoreAPI의 실제 사례를 확인하며, 사용 사례에 맞는 올바른 프로토콜을 선택하는 방법을 알아봅니다.
MQTT란 무엇인가요?
MQTT는 IoT를 위해 설계된 경량 pub-sub 메시징 프로토콜입니다.
MQTT 작동 방식
장치는 토픽에 메시지를 발행합니다. 다른 장치는 토픽을 구독합니다:
Publisher (Pet Collar):
Topic: pets/019b4132/location
Payload: {"lat":37.7749,"lng":-122.4194,"battery":85}
Subscriber (Mobile App):
Subscribe to: pets/019b4132/location
Receives: {"lat":37.7749,"lng":-122.4194,"battery":85}
MQTT 브로커는 중간에서 발행자로부터 구독자에게 메시지를 라우팅합니다.
주요 MQTT 기능
1. 작은 헤더 - MQTT: 2바이트, HTTP: 100-500바이트
2. 영구 연결 - MQTT는 연결을 유지합니다
3. 서비스 품질(QoS) - 전송 보장을 위한 QoS 0/1/2
4. Last Will - 장치가 예기치 않게 연결 해제될 경우 전송되는 메시지
5. 유지 메시지 - 브로커가 새 구독자를 위해 마지막 메시지를 저장합니다
MQTT vs HTTP 비교
| 특징 | MQTT | HTTP |
|---|---|---|
| 헤더 크기 | 2바이트 | 100-500바이트 |
| 패턴 | Pub-Sub | 요청-응답 |
| 연결 | 영구적 | 요청별 |
| 대역폭 | 매우 낮음 | 더 높음 |
| 배터리 영향 | 최소 | 상당함 |
| 브라우저 지원 | WebSocket을 통해 | 기본 지원 |
대역폭 예시
하루 1000회 위치 업데이트:
- HTTP: 하루 420KB, 한 달 12.6MB
- MQTT: 하루 52KB, 한 달 1.56MB
MQTT는 8배 적은 대역폭을 사용합니다.
MQTT가 우세할 때
1. 제한된 배터리를 가진 IoT 장치
애완동물 추적 목걸이:
- MQTT: 6개월 배터리 수명
- HTTP: 2주 배터리 수명
이유: 영구 연결, 작은 헤더, 적은 라디오 사용 시간.
2. 불안정한 네트워크
불규칙한 커버리지를 가진 셀룰러 IoT 장치:
- 전송 보장을 위한 QoS
- 자동 재연결
- 세션 영속성
3. 다대다 통신
스마트 애완동물 급식기 시나리오:
Feeder 1 → pets/019b4132/feeding
Feeder 2 → pets/019b4127/feeding
App 1 → subscribes to pets/+/feeding (all pets)
App 2 → subscribes to pets/019b4132/feeding (one pet)
4. 실시간 센서 데이터
매초 업데이트를 보내는 애완동물 건강 모니터:
- 영구 연결 (오버헤드 없음)
- 최소 대기 시간
- 고주파 업데이트에 효율적
HTTP가 우세할 때
1. 표준 웹/모바일 앱
HTTP는 보편적입니다:
- 모든 언어에는 HTTP 라이브러리가 있습니다
- 브라우저는 기본적으로 이를 지원합니다
- 프록시 및 방화벽이 이를 허용합니다
2. 요청-응답 패턴
애완동물 세부 정보 가져오기:
GET /pets/019b4132
200 OK
{"name":"Fluffy","species":"CAT"}
HTTP는 요청-응답에 더 간단합니다.
3. 캐싱 요구 사항
HTTP 캐싱은 즉시 작동합니다:
- 브라우저 캐싱
- CDN 캐싱
- 프록시 캐싱
MQTT는 캐싱 기능이 없습니다.
4. RESTful API
HTTP 상태 코드, 메서드 및 의미론:
- 200 OK, 404 Not Found, 201 Created
- GET, POST, PUT, DELETE
- 표준 오류 처리
Modern PetstoreAPI는 MQTT를 어떻게 사용하나요?
Modern PetstoreAPI는 IoT 장치에 MQTT를 구현합니다.
애완동물 추적 목걸이
목걸이가 위치를 발행합니다:
Topic: pets/019b4132/location
QoS: 1 (at least once)
Payload: {
"lat": 37.7749,
"lng": -122.4194,
"battery": 85,
"timestamp": "2026-03-13T10:30:00Z"
}
모바일 앱이 구독합니다:
const mqtt = require('mqtt');
const client = mqtt.connect('mqtts://mqtt.petstoreapi.com');
client.subscribe('pets/019b4132/location');
client.on('message', (topic, message) => {
const location = JSON.parse(message);
updateMap(location.lat, location.lng);
});
스마트 급식기
급식기가 스케줄을 구독합니다:
Topic: pets/019b4132/feeding-schedule
Retained: true
Payload: {
"times": ["08:00", "18:00"],
"amount": 100
}
급식기가 급식 이벤트를 발행합니다:
Topic: pets/019b4132/feeding-events
Payload: {
"timestamp": "2026-03-13T08:00:15Z",
"amount": 100,
"dispensed": true
}
건강 모니터
모니터가 활력 징후를 발행합니다:
Topic: pets/019b4132/health
QoS: 0 (fire and forget, high frequency)
Payload: {
"heartRate": 120,
"temperature": 38.5,
"activity": "resting"
}
Apidog로 MQTT 테스트
Apidog는 HTTP 및 기타 프로토콜과 함께 MQTT 테스트를 지원합니다.
MQTT Pub-Sub 테스트
- MQTT 브로커에 연결
- 토픽 구독
- 테스트 메시지 발행
- 메시지 형식 검증
- QoS 수준 테스트
네트워크 오류 시뮬레이션
- 재연결 로직 테스트
- QoS 1/2 전송 확인
- Last Will 메시지 확인
- 세션 영속성 검증
HTTP와 비교
두 프로토콜로 동일한 기능을 테스트합니다:
- 대역폭 사용량 측정
- 지연 시간 비교
- 데이터 일관성 확인
결론
MQTT와 HTTP는 서로 다른 목적을 가집니다. 제한된 리소스를 가진 IoT 장치에는 MQTT를 사용하세요. 표준 웹/모바일 API에는 HTTP를 사용하세요.
Modern PetstoreAPI는 사용자 대면 API에는 HTTP를, IoT 장치에는 MQTT를 사용하는 방법을 보여줍니다. 올바른 프로토콜은 "더 나은" 것이 아니라 사용자의 제약 조건에 따라 달라집니다.
Apidog로 두 프로토콜을 모두 테스트하여 사용 사례에 가장 적합한 것을 찾아보세요.
FAQ
MQTT는 HTTP를 통해 작동할 수 있나요?
MQTT는 HTTP를 통해 작동하는 WebSocket 위에서 실행될 수 있습니다. 이는 방화벽 통과에 도움이 되지만, MQTT의 일부 효율성 이점을 잃게 됩니다.
MQTT QoS 수준은 무엇인가요?
- QoS 0: 최대 한 번 (응답 없음)
- QoS 1: 최소 한 번 (응답 확인됨, 중복될 수 있음)
- QoS 2: 정확히 한 번 (보장됨, 중복 없음)
MQTT는 안전한가요?
예, MQTT는 TLS 암호화(MQTTS) 및 사용자 이름/비밀번호 인증을 지원합니다. Modern PetstoreAPI는 모든 IoT 장치에 MQTTS를 사용합니다.
브라우저에서 MQTT를 사용할 수 있나요?
브라우저는 WebSocket을 통해 MQTT를 사용할 수 있습니다. MQTT.js와 같은 라이브러리는 브라우저 환경을 지원합니다.
MQTT는 WebSocket과 어떻게 비교되나요?
MQTT는 WebSocket 위에서 실행될 수 있는 프로토콜입니다. WebSocket은 전송 계층입니다. MQTT는 WebSocket 위에 pub-sub, QoS 및 IoT 특정 기능을 추가합니다.
