MQTT 코딩할 때 가장 많이 고민되는게 있다.
보내는 놈의 QoS 랑, 받는 놈의 QoS.
나는 QoS=1로 보내고, 받는 놈이 QoS=2로 받으면 확실하지 않을까?
이거에 대한 썰을 풀고자 한다.
자, 자 각설하고
우리야 client와 server 라고 하지만, broker 입장에서는 둘 다 client 아니겠나.
다음을 생각해보자.
client와 server 가 서로 다른 QoS를 사용할 때 QoS는 어느 쪽을 따를까?
세상에 당신이 최초로 고민한 문제는 없다.
구글신한테 물어봐라.
사수한테 물어보면 위와 같은 대꾸를 듣는다.
사수님의 말이 맞다.
당연히 이것도 테스트한 사람이 있다.
Roger Light 가 만든 다음 시나리오 표를 보자.
앞에 2개는 설정(setting)이고, 뒤 2개는 결과다.
# | QoS publishing | QoS subscribing | QoS Publisher >> Broker | QoS Broker >> Subscriber |
---|---|---|---|---|
1 | 0 | 1 or 2 | 0 | 0 |
2 | 1 or 2 | 0 | 1 or 2 | 0 |
3 | 2 | 1 | 2 | 1 |
4 | 1 | 1 | 1 | 1 |
출처: https://cedalo.com/blog/understanding-mqtt-qos/
1번은 받는 놈이 아무리 QoS를 1, 2로 하더라도 보내는 QoS가 0 이면 받는 QoS도 0 이라는 거다.
2,3번도 같은 맥락으로 이해할 수 있다.
즉 아무리 내가 보낼 때 높은 QoS로 보내도, 받는 쪽이 어떻게 받도록 설정하느냐에 따라 달라진다는 거다.
유식한 말로 QoS Downgrade 현상이라고 한다.
따라서 4번과 같이 보내는 QoS와 받는 QoS를 맞추는 것이 정신 건강에 이롭다.
QoS가 높아질수록 신뢰도는 높아지지만 속도는 느려질 것같다는 느낌적 느낌은 받는데....
그렇다 이건 느낌이다. 숫자가 아니다.
회의 시간에 느낌만 이야기 하면 초급 취급 받는다.
숫자를 제시해야 한다.
QoS별로 초당 몇 개의 Packet을 보낼 수 있는지에 대한 다음 벤치마킹 데이터를 보자.
보내는 건 별 차이가 없는데, 받는 건 드라마틱한 차이가 보인다.
솔직히 이 자료보고 나도 놀랐다.
생각보다 QoS=1이 QoS=2보다 안 빠르네 😰
이거 보니 괜히 QoS=0 으로 프로그램 고치고 싶어진다😝
해보고 잘되면 목에 힘주고 아무한테도 알려주지 말고 연봉협상💰 때 넌지시 얘기하라.
도움 많이 받았습니다. ^^