{"id":557,"date":"2023-09-04T12:11:59","date_gmt":"2023-09-04T03:11:59","guid":{"rendered":"https:\/\/blog.dozzing.kr\/?p=557"},"modified":"2025-10-15T16:02:56","modified_gmt":"2025-10-15T07:02:56","slug":"c-mqtt-%ed%86%b5%ec%8b%a0-%ed%81%b4%eb%9d%bc%ec%9d%b4%ec%96%b8%ed%8a%b8-%ec%98%88%ec%a0%9c","status":"publish","type":"post","link":"https:\/\/blog.dozzing.kr\/?p=557","title":{"rendered":"[C#] MQTT \ud1b5\uc2e0 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc608\uc81c"},"content":{"rendered":"<h2>\ud83d\udcab MQTT\ub780?<\/h2>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3726e84bdd54b5ef32d86bd4d30a6f8b.jpg\"><img decoding=\"async\" src=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3726e84bdd54b5ef32d86bd4d30a6f8b.jpg\" alt=\"\" \/><\/a><br \/>\nMQTT(\uba54\uc2dc\uc9c0 \ud050\uc789 \ud154\ub808\uba54\ud2b8\ub9ac \ud2b8\ub79c\uc2a4\ud3ec\ud2b8, Message Queuing Telemetry Transport)\ub294 ISO \ud45c\uc900(ISO\/IEC PRF 20922) \ubc1c\ud589-\uad6c\ub3c5 \uae30\ubc18\uc758 \uba54\uc2dc\uc9d5 \ud504\ub85c\ud1a0\ucf5c\uc774\ub2e4.<br \/>\nTCP\/IP \ud504\ub85c\ud1a0\ucf5c \uc704\uc5d0\uc11c \ub3d9\uc791\ud55c\ub2e4. \"\uc791\uc740 \ucf54\ub4dc \uacf5\uac04\"(small code footprint)\uc774 \ud544\uc694\ud558\uac70\ub098 \ub124\ud2b8\uc6cc\ud06c \ub300\uc5ed\ud3ed\uc774 \uc81c\ud55c\ub418\ub294 \uc6d0\uaca9 \uc704\uce58\uc640\uc758 \uc5f0\uacb0\uc744 \uc704\ud574 \uc124\uacc4\ub418\uc5b4 \uc788\ub2e4. \ubc1c\ud589-\uad6c\ub3c5 \uba54\uc2dc\uc9d5 \ud328\ud134\uc740 \uba54\uc2dc\uc9c0 \ube0c\ub85c\ucee4\uac00 \ud544\uc694\ud558\ub2e4.<\/p>\n<p>\u00a0<\/p>\n<h2>\ud83d\udcab \uc608\uc81c \uc124\uba85<\/h2>\n<p>\ud074\ub77c\uc774\uc5b8\ud2b8 \ud504\ub85c\uadf8\ub7a8 \ub450\uac1c\ub97c \uc0dd\uc131\ud574\uc11c \uac01\uc790 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0\uc11c \ubcf4\ub0b4\ub294 \uba54\uc138\uc9c0\ub97c \uc0c1\ub300 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \ub728\ub3c4\ub85d \ud558\ub294 \ud504\ub85c\uc81d\ud2b8\uc774\ub2e4 .<br \/>\n\u00a0<\/p>\n<h2>\ud83d\udcab \uc2e4\ud589 \uc804 \ub2e4\uc6b4\ubc1b\uc544\uc57c\ud558\ub294 \uac83\ub4e4<\/h2>\n<h5>1. \ube0c\ub85c\ucee4\ub294 <a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/mosquitto.org\/download\/\">Mosquitto<\/a>\ub97c \ub2e4\uc6b4\ubc1b\uc544 \uc0ac\uc6a9<\/h5>\n<h5>2. NuGet \ud328\ud0a4\uc9c0 <code>M2Mqtt<\/code> \uc124\uce58<\/h5>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_f74247d9fd5e72074a3f22bd57cd50b7.jpg\"><img decoding=\"async\" src=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_f74247d9fd5e72074a3f22bd57cd50b7.jpg\" alt=\"\" \/><\/a><br \/>\n\u00a0<\/p>\n<h2>\ud83d\udcab Mosquitto \uc2dc\uc791<\/h2>\n<h5>1. cmd\ucc3d\uc5d0\uc11c Mosquitto\uac00 \uc124\uce58\ub41c \uacbd\ub85c\ub85c \uc774\ub3d9<\/h5>\n<p><code>cd C:\\Program Files\\mosquitto<\/code><\/p>\n<h5>2. \uc774\ub3d9\ud55c\ub4a4 Mosquitto broker \uc2e4\ud589(-v : \ubaa8\ub4e0 \ud1b5\uc2e0\uacfc\uc815\uc744 \ubcf4\uc5ec\uc8fc\ub294 \uc635\uc158)<\/h5>\n<p><code>mosquitto -v<\/code><br \/>\n<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_6199a4b3977ff90abf87a16197db54bc.jpg\"><img decoding=\"async\" src=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_6199a4b3977ff90abf87a16197db54bc.jpg\" alt=\"\" \/><\/a><br \/>\n\u00a0<\/p>\n<h2>\ud83d\udcab \ud074\ub77c\uc774\uc5b8\ud2b8 form \ud615\ud0dc<\/h2>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3faabf4faf72aeac15d853f20b0bdcc0.jpg\"><img decoding=\"async\" src=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3faabf4faf72aeac15d853f20b0bdcc0.jpg\" alt=\"\" \/><\/a><br \/>\n\u00a0<\/p>\n<h2>\ud83d\udcab \ud074\ub77c\uc774\uc5b8\ud2b8 \uc2dc\uc791<\/h2>\n<h5>1. Start \ubc84\ud2bc\uc744 \ub204\ub974\uba74 \ud074\ub77c\uc774\uc5b8\ud2b8-broker \uc5f0\uacb0 \uc2dc\uc791<\/h5>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_cdb656001655a6ec867a6974ae21365e.jpg\"><img decoding=\"async\" src=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_cdb656001655a6ec867a6974ae21365e.jpg\" alt=\"\" \/><\/a><br \/>\n\u00a0<\/p>\n<h2>\ud83d\udcab \uc804\uc1a1 \ubc0f \uc885\ub8cc<\/h2>\n<h5>1. \uba54\uc138\uc9c0 \uc804\uc1a1<\/h5>\n<p>\uc804\uc1a1\ubc84\ud2bc\uc744 \ub204\ub974\uba74 \uc218\uc2e0 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc218\uc2e0\uba54\uc138\uc9c0 label\uc5d0 \uba54\uc138\uc9c0\ud45c\uc2dc<br \/>\n<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_666e58c50346ab849e0e20cfb83b8266.jpg\"><img decoding=\"async\" src=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_666e58c50346ab849e0e20cfb83b8266.jpg\" alt=\"\" \/><\/a><\/p>\n<h5>2. \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc885\ub8cc\ub418\uc5c8\uc744\ub54c<\/h5>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_4eb09ffbfc0688ffa8f70c109e3069ee.jpg\"><img decoding=\"async\" src=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_4eb09ffbfc0688ffa8f70c109e3069ee.jpg\" alt=\"\" \/><\/a><br \/>\n\u00a0<\/p>\n<h2>\ud83d\udcab \ud074\ub77c\uc774\uc5b8\ud2b8 \uc18c\uc2a4 \ucf54\ub4dc<\/h2>\n<p><strong>\ud074\ub77c\uc774\uc5b8\ud2b8 \uc18c\uc2a4 \ucf54\ub4dc\ub294 \uc218\uc2e0\/\ubc1c\uc2e0 \ud1a0\ud53d\ub9cc \ub2e4\ub984!!<\/strong><\/p>\n<h5>1. Client 1<\/h5>\n<pre><code class=\"language-csharp line-numbers\">using System;\nusing System.Net;\nusing System.Reflection.Emit;\nusing System.Text;\nusing System.Windows.Forms;\nusing uPLibrary.Networking.M2Mqtt;\nusing uPLibrary.Networking.M2Mqtt.Messages;\n\nnamespace Client\n{\n    public partial class Form1 : Form\n    {\n        private MqttClient client;\n\n        public Form1()\n        {\n            InitializeComponent();\n            \/\/\ud3fc \ub2eb\uae30 \uc774\ubca4\ud2b8 \uc120\uc5b8\n            this.FormClosed += Form1_FormClosing;\n        }\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ \ud3fc \ub2eb\uae30 \uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec \uc120\uc5b8\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;param name=\"sender\"&gt;&lt;\/param&gt;\n        \/\/\/ &lt;param name=\"e\"&gt;&lt;\/param&gt;\n        private void Form1_FormClosing(object sender, FormClosedEventArgs e)\n        {\n            if (client != null &amp;&amp; client.IsConnected)\n            {\n                client.Disconnect();\n            }\n        }\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ \uc218\uc2e0 \uba54\uc138\uc9c0 \ud45c\uc2dc\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;param name=\"sender\"&gt;&lt;\/param&gt;\n        \/\/\/ &lt;param name=\"e\"&gt;&lt;\/param&gt;\n        private void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)\n        {\n            \/\/ \uc218\uc2e0\ub41c \uba54\uc2dc\uc9c0\ub97c \ubcc0\uc218\uc5d0 \uc800\uc7a5\n            string receivedMessage = Encoding.UTF8.GetString(e.Message);\n\n            \/\/ UI \uc5c5\ub370\uc774\ud2b8\ub97c \uc704\ud574 UI \uc2a4\ub808\ub4dc\ub85c \uc804\ub2ec\n            Invoke(new Action(() =&gt;\n            {\n                \/\/ receivedMessage\ub97c Form label ReceivedText\uc5d0 \ud45c\uc2dc\n                ReceivedText.Text = receivedMessage;\n            }));\n        }\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ start \ubc84\ud2bc \ud074\ub9ad\ud588\uc744\ub54c \uc2e4\ud589\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;param name=\"sender\"&gt;&lt;\/param&gt;\n        \/\/\/ &lt;param name=\"e\"&gt;&lt;\/param&gt;\n        private void Startbutton_Click(object sender, EventArgs e)\n        {\n            \/\/ MQTT \ube0c\ub85c\ucee4 \uc8fc\uc18c\n            string MQTT_BROKER_ADDRESS = \"127.0.0.1\";\n\n            \/\/ \ud074\ub77c\uc774\uc5b8\ud2b8 \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131\n            client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS));\n\n            \/\/ \uba54\uc2dc\uc9c0 \uc218\uc2e0 \uc2dc \uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec \ub4f1\ub85d\n            client.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;\n\n            \/\/ \uace0\uc720\ud55c \ud074\ub77c\uc774\uc5b8\ud2b8 ID \uc0dd\uc131\n            string clientId = \"COOKIE\";\n\n            try\n            {\n                client.Connect(clientId);\n                \/\/\uc5f0\uacb0\uc774 \uc131\uacf5\ud558\uba74 Serverconnect\uc5d0 \uc131\uacf5 \uba54\uc138\uc9c0\ucd9c\ub825\n                if (client.IsConnected) Serverconnect.Text = \"SERVER \" + MQTT_BROKER_ADDRESS + \"\uc640 \uc5f0\uacb0 \uc131\uacf5!\";\n            }\n            catch (Exception ex)\n            {\n                \/\/\uc5f0\uacb0\uc774 \uc2e4\ud328\ud558\uba74 Serverconnect\uc5d0 \uc2e4\ud328 \uba54\uc138\uc9c0, \uc624\ub958\uba54\uc138\uc9c0 \ucd9c\ub825\n                Serverconnect.Text = \"\ube0c\ub85c\ucee4\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\\n\" + ex.Message + \"\uc5f0\uacb0 \uc624\ub958\";\n            }\n\n            \/\/ \uc218\uc2e0 \ud1a0\ud53d \"coorong\" \uad6c\ub3c5\n            client.Subscribe(new string[] { \"coorong\" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });\n        }\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ Send\ubc84\ud2bc \ud074\ub9ad\ud588\uc744\ub54c \uc2e4\ud589\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;param name=\"sender\"&gt;&lt;\/param&gt;\n        \/\/\/ &lt;param name=\"e\"&gt;&lt;\/param&gt;\n        private void Sendbutton_Click(object sender, EventArgs e)\n        {\n            \/\/ \ubcf4\ub0bc \uba54\uc2dc\uc9c0\n            string messageToSend = SendText.Text;\n\n            \/\/ \ubc1c\uc2e0 \ud1a0\ud53d \"cookie\", \uba54\uc138\uc9c0 \ubc1c\uc1a1\n            client.Publish(\"cookie\", Encoding.UTF8.GetBytes(messageToSend), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);\n\n            \/\/\uba54\uc138\uc9c0\ubc15\uc2a4 \ucd08\uae30\ud654\n            SendText.Text = \"\";\n        }\n    }\n}\n\n<\/code><\/pre>\n<p>\u00a0<\/p>\n<h5>2. Client 2<\/h5>\n<pre><code class=\"language-csharp line-numbers\">using System;\nusing System.Net;\nusing System.Reflection.Emit;\nusing System.Text;\nusing System.Windows.Forms;\nusing uPLibrary.Networking.M2Mqtt;\nusing uPLibrary.Networking.M2Mqtt.Messages;\n\nnamespace Client\n{\n    public partial class Form1 : Form\n    {\n        private MqttClient client;\n\n        public Form1()\n        {\n            InitializeComponent();\n            \/\/\ud3fc \ub2eb\uae30 \uc774\ubca4\ud2b8 \uc120\uc5b8\n            this.FormClosed += Form1_FormClosing;\n        }\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ \ud3fc \ub2eb\uae30 \uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec \uc120\uc5b8\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;param name=\"sender\"&gt;&lt;\/param&gt;\n        \/\/\/ &lt;param name=\"e\"&gt;&lt;\/param&gt;\n        private void Form1_FormClosing(object sender, FormClosedEventArgs e)\n        {\n            if (client != null &amp;&amp; client.IsConnected)\n            {\n                client.Disconnect();\n            }\n        }\n\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ \uc218\uc2e0 \uba54\uc138\uc9c0 \ud45c\uc2dc\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;param name=\"sender\"&gt;&lt;\/param&gt;\n        \/\/\/ &lt;param name=\"e\"&gt;&lt;\/param&gt;\n        private void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)\n        {\n            \/\/ \uc218\uc2e0\ub41c \uba54\uc2dc\uc9c0\ub97c \ubcc0\uc218\uc5d0 \uc800\uc7a5\n            string receivedMessage = Encoding.UTF8.GetString(e.Message);\n\n            \/\/ UI \uc5c5\ub370\uc774\ud2b8\ub97c \uc704\ud574 UI \uc2a4\ub808\ub4dc\ub85c \uc804\ub2ec\n            Invoke(new Action(() =&gt;\n            {\n                \/\/ receivedMessage\ub97c Form label ReceivedText\uc5d0 \ud45c\uc2dc\n                ReceivedText.Text = receivedMessage;\n            }));\n        }\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ start \ubc84\ud2bc \ud074\ub9ad\ud588\uc744\ub54c \uc2e4\ud589\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;param name=\"sender\"&gt;&lt;\/param&gt;\n        \/\/\/ &lt;param name=\"e\"&gt;&lt;\/param&gt;\n        private void Startbutton_Click(object sender, EventArgs e)\n        {\n            \/\/ MQTT \ube0c\ub85c\ucee4 \uc8fc\uc18c\n            string MQTT_BROKER_ADDRESS = \"127.0.0.1\";\n\n            \/\/ \ud074\ub77c\uc774\uc5b8\ud2b8 \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131\n            client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS));\n\n            \/\/ \uba54\uc2dc\uc9c0 \uc218\uc2e0 \uc2dc \uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec \ub4f1\ub85d\n            client.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;\n\n            \/\/ \uace0\uc720\ud55c \ud074\ub77c\uc774\uc5b8\ud2b8 ID \uc0dd\uc131\n            string clientId = \"COORONG\";\n\n            try\n            {\n                client.Connect(clientId);\n                \/\/\uc5f0\uacb0\uc774 \uc131\uacf5\ud558\uba74 Serverconnect\uc5d0 \uc131\uacf5 \uba54\uc138\uc9c0\ucd9c\ub825\n                if (client.IsConnected) Serverconnect.Text = \"SERVER \" + MQTT_BROKER_ADDRESS + \"\uc640 \uc5f0\uacb0 \uc131\uacf5!\";\n            }\n            catch (Exception ex)\n            {\n                \/\/\uc5f0\uacb0\uc774 \uc2e4\ud328\ud558\uba74 Serverconnect\uc5d0 \uc2e4\ud328 \uba54\uc138\uc9c0, \uc624\ub958\uba54\uc138\uc9c0 \ucd9c\ub825\n                Serverconnect.Text = \"\ube0c\ub85c\ucee4\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\\n\" + ex.Message + \"\uc5f0\uacb0 \uc624\ub958\";\n            }\n\n            \/\/ \uc218\uc2e0 \ud1a0\ud53d \"cookie\" \uad6c\ub3c5\n            client.Subscribe(new string[] { \"cookie\" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });\n        }\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ Send\ubc84\ud2bc \ud074\ub9ad\ud588\uc744\ub54c \uc2e4\ud589\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;param name=\"sender\"&gt;&lt;\/param&gt;\n        \/\/\/ &lt;param name=\"e\"&gt;&lt;\/param&gt;\n        private void Sendbutton_Click(object sender, EventArgs e)\n        {\n            \/\/ \ubcf4\ub0bc \uba54\uc2dc\uc9c0\n            string messageToSend = SendText.Text;\n\n            \/\/ \ubc1c\uc2e0 \ud1a0\ud53d \"coorong\", \uba54\uc138\uc9c0 \ubc1c\uc1a1\n            client.Publish(\"coorong\", Encoding.UTF8.GetBytes(messageToSend), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);\n\n            \/\/\uba54\uc138\uc9c0\ubc15\uc2a4 \ucd08\uae30\ud654\n            SendText.Text = \"\";\n        }\n    }\n}\n\n<\/code><\/pre>\n<p>\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udcab MQTT\ub780? MQTT(\uba54\uc2dc\uc9c0 \ud050\uc789 \ud154\ub808\uba54\ud2b8\ub9ac \ud2b8\ub79c\uc2a4\ud3ec\ud2b8, Message Queuing Telemetry Transport)\ub294 ISO \ud45c\uc900(ISO\/IEC PRF 20922) \ubc1c\ud589-\uad6c\ub3c5 \uae30\ubc18\uc758 \uba54\uc2dc\uc9d5 \ud504\ub85c\ud1a0\ucf5c\uc774\ub2e4. TCP\/IP \ud504\ub85c\ud1a0\ucf5c \uc704\uc5d0\uc11c \ub3d9\uc791\ud55c\ub2e4. &#8220;\uc791\uc740 \ucf54\ub4dc \uacf5\uac04&#8221;(small code footprint)\uc774 \ud544\uc694\ud558\uac70\ub098 \ub124\ud2b8\uc6cc\ud06c \ub300\uc5ed\ud3ed\uc774 \uc81c\ud55c\ub418\ub294 \uc6d0\uaca9 \uc704\uce58\uc640\uc758 \uc5f0\uacb0\uc744 \uc704\ud574 \uc124\uacc4\ub418\uc5b4 \uc788\ub2e4. \ubc1c\ud589-\uad6c\ub3c5 \uba54\uc2dc\uc9d5 \ud328\ud134\uc740 \uba54\uc2dc\uc9c0 \ube0c\ub85c\ucee4\uac00 \ud544\uc694\ud558\ub2e4. \u00a0 \ud83d\udcab \uc608\uc81c \uc124\uba85 \ud074\ub77c\uc774\uc5b8\ud2b8 \ud504\ub85c\uadf8\ub7a8 \ub450\uac1c\ub97c \uc0dd\uc131\ud574\uc11c \uac01\uc790 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0\uc11c \ubcf4\ub0b4\ub294 \uba54\uc138\uc9c0\ub97c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,49],"tags":[6,36,37],"class_list":["post-557","post","type-post","status-publish","format-standard","hentry","category-csharp","category-system-development","tag-c","tag-mqtt","tag-37"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[C#] MQTT \ud1b5\uc2e0 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc608\uc81c - Dozzing World<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.dozzing.kr\/?p=557\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[C#] MQTT \ud1b5\uc2e0 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc608\uc81c - Dozzing World\" \/>\n<meta property=\"og:description\" content=\"\ud83d\udcab MQTT\ub780? MQTT(\uba54\uc2dc\uc9c0 \ud050\uc789 \ud154\ub808\uba54\ud2b8\ub9ac \ud2b8\ub79c\uc2a4\ud3ec\ud2b8, Message Queuing Telemetry Transport)\ub294 ISO \ud45c\uc900(ISO\/IEC PRF 20922) \ubc1c\ud589-\uad6c\ub3c5 \uae30\ubc18\uc758 \uba54\uc2dc\uc9d5 \ud504\ub85c\ud1a0\ucf5c\uc774\ub2e4. TCP\/IP \ud504\ub85c\ud1a0\ucf5c \uc704\uc5d0\uc11c \ub3d9\uc791\ud55c\ub2e4. &quot;\uc791\uc740 \ucf54\ub4dc \uacf5\uac04&quot;(small code footprint)\uc774 \ud544\uc694\ud558\uac70\ub098 \ub124\ud2b8\uc6cc\ud06c \ub300\uc5ed\ud3ed\uc774 \uc81c\ud55c\ub418\ub294 \uc6d0\uaca9 \uc704\uce58\uc640\uc758 \uc5f0\uacb0\uc744 \uc704\ud574 \uc124\uacc4\ub418\uc5b4 \uc788\ub2e4. \ubc1c\ud589-\uad6c\ub3c5 \uba54\uc2dc\uc9d5 \ud328\ud134\uc740 \uba54\uc2dc\uc9c0 \ube0c\ub85c\ucee4\uac00 \ud544\uc694\ud558\ub2e4. \u00a0 \ud83d\udcab \uc608\uc81c \uc124\uba85 \ud074\ub77c\uc774\uc5b8\ud2b8 \ud504\ub85c\uadf8\ub7a8 \ub450\uac1c\ub97c \uc0dd\uc131\ud574\uc11c \uac01\uc790 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0\uc11c \ubcf4\ub0b4\ub294 \uba54\uc138\uc9c0\ub97c [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.dozzing.kr\/?p=557\" \/>\n<meta property=\"og:site_name\" content=\"Dozzing World\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-04T03:11:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-15T07:02:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3726e84bdd54b5ef32d86bd4d30a6f8b.jpg\" \/>\n<meta name=\"author\" content=\"Dozzing\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dozzing\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.dozzing.kr\/?p=557\",\"url\":\"https:\/\/blog.dozzing.kr\/?p=557\",\"name\":\"[C#] MQTT \ud1b5\uc2e0 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc608\uc81c - Dozzing World\",\"isPartOf\":{\"@id\":\"https:\/\/blog.dozzing.kr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.dozzing.kr\/?p=557#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.dozzing.kr\/?p=557#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3726e84bdd54b5ef32d86bd4d30a6f8b.jpg\",\"datePublished\":\"2023-09-04T03:11:59+00:00\",\"dateModified\":\"2025-10-15T07:02:56+00:00\",\"author\":{\"@id\":\"https:\/\/blog.dozzing.kr\/#\/schema\/person\/52258baef65b530d3e867e4c1f79c36f\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.dozzing.kr\/?p=557#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.dozzing.kr\/?p=557\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/blog.dozzing.kr\/?p=557#primaryimage\",\"url\":\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3726e84bdd54b5ef32d86bd4d30a6f8b.jpg\",\"contentUrl\":\"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3726e84bdd54b5ef32d86bd4d30a6f8b.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.dozzing.kr\/?p=557#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.dozzing.kr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[C#] MQTT \ud1b5\uc2e0 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc608\uc81c\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.dozzing.kr\/#website\",\"url\":\"https:\/\/blog.dozzing.kr\/\",\"name\":\"Dozzing World\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.dozzing.kr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.dozzing.kr\/#\/schema\/person\/52258baef65b530d3e867e4c1f79c36f\",\"name\":\"Dozzing\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/blog.dozzing.kr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0bbe3fe675c3641965411ffb61a1368b3bf05e794deaa3c7bd0ef7b4690a614a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0bbe3fe675c3641965411ffb61a1368b3bf05e794deaa3c7bd0ef7b4690a614a?s=96&d=mm&r=g\",\"caption\":\"Dozzing\"},\"sameAs\":[\"https:\/\/blog.dozzing.kr\/\"],\"url\":\"https:\/\/blog.dozzing.kr\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[C#] MQTT \ud1b5\uc2e0 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc608\uc81c - Dozzing World","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.dozzing.kr\/?p=557","og_locale":"ko_KR","og_type":"article","og_title":"[C#] MQTT \ud1b5\uc2e0 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc608\uc81c - Dozzing World","og_description":"\ud83d\udcab MQTT\ub780? MQTT(\uba54\uc2dc\uc9c0 \ud050\uc789 \ud154\ub808\uba54\ud2b8\ub9ac \ud2b8\ub79c\uc2a4\ud3ec\ud2b8, Message Queuing Telemetry Transport)\ub294 ISO \ud45c\uc900(ISO\/IEC PRF 20922) \ubc1c\ud589-\uad6c\ub3c5 \uae30\ubc18\uc758 \uba54\uc2dc\uc9d5 \ud504\ub85c\ud1a0\ucf5c\uc774\ub2e4. TCP\/IP \ud504\ub85c\ud1a0\ucf5c \uc704\uc5d0\uc11c \ub3d9\uc791\ud55c\ub2e4. \"\uc791\uc740 \ucf54\ub4dc \uacf5\uac04\"(small code footprint)\uc774 \ud544\uc694\ud558\uac70\ub098 \ub124\ud2b8\uc6cc\ud06c \ub300\uc5ed\ud3ed\uc774 \uc81c\ud55c\ub418\ub294 \uc6d0\uaca9 \uc704\uce58\uc640\uc758 \uc5f0\uacb0\uc744 \uc704\ud574 \uc124\uacc4\ub418\uc5b4 \uc788\ub2e4. \ubc1c\ud589-\uad6c\ub3c5 \uba54\uc2dc\uc9d5 \ud328\ud134\uc740 \uba54\uc2dc\uc9c0 \ube0c\ub85c\ucee4\uac00 \ud544\uc694\ud558\ub2e4. \u00a0 \ud83d\udcab \uc608\uc81c \uc124\uba85 \ud074\ub77c\uc774\uc5b8\ud2b8 \ud504\ub85c\uadf8\ub7a8 \ub450\uac1c\ub97c \uc0dd\uc131\ud574\uc11c \uac01\uc790 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0\uc11c \ubcf4\ub0b4\ub294 \uba54\uc138\uc9c0\ub97c [&hellip;]","og_url":"https:\/\/blog.dozzing.kr\/?p=557","og_site_name":"Dozzing World","article_published_time":"2023-09-04T03:11:59+00:00","article_modified_time":"2025-10-15T07:02:56+00:00","og_image":[{"url":"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3726e84bdd54b5ef32d86bd4d30a6f8b.jpg","type":"","width":"","height":""}],"author":"Dozzing","twitter_card":"summary_large_image","twitter_misc":{"\uae00\uc4f4\uc774":"Dozzing","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"4\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.dozzing.kr\/?p=557","url":"https:\/\/blog.dozzing.kr\/?p=557","name":"[C#] MQTT \ud1b5\uc2e0 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc608\uc81c - Dozzing World","isPartOf":{"@id":"https:\/\/blog.dozzing.kr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.dozzing.kr\/?p=557#primaryimage"},"image":{"@id":"https:\/\/blog.dozzing.kr\/?p=557#primaryimage"},"thumbnailUrl":"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3726e84bdd54b5ef32d86bd4d30a6f8b.jpg","datePublished":"2023-09-04T03:11:59+00:00","dateModified":"2025-10-15T07:02:56+00:00","author":{"@id":"https:\/\/blog.dozzing.kr\/#\/schema\/person\/52258baef65b530d3e867e4c1f79c36f"},"breadcrumb":{"@id":"https:\/\/blog.dozzing.kr\/?p=557#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.dozzing.kr\/?p=557"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/blog.dozzing.kr\/?p=557#primaryimage","url":"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3726e84bdd54b5ef32d86bd4d30a6f8b.jpg","contentUrl":"https:\/\/blog.dozzing.kr\/wp-content\/uploads\/2023\/09\/wp_editor_md_3726e84bdd54b5ef32d86bd4d30a6f8b.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.dozzing.kr\/?p=557#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.dozzing.kr\/"},{"@type":"ListItem","position":2,"name":"[C#] MQTT \ud1b5\uc2e0 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc608\uc81c"}]},{"@type":"WebSite","@id":"https:\/\/blog.dozzing.kr\/#website","url":"https:\/\/blog.dozzing.kr\/","name":"Dozzing World","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.dozzing.kr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Person","@id":"https:\/\/blog.dozzing.kr\/#\/schema\/person\/52258baef65b530d3e867e4c1f79c36f","name":"Dozzing","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/blog.dozzing.kr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0bbe3fe675c3641965411ffb61a1368b3bf05e794deaa3c7bd0ef7b4690a614a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0bbe3fe675c3641965411ffb61a1368b3bf05e794deaa3c7bd0ef7b4690a614a?s=96&d=mm&r=g","caption":"Dozzing"},"sameAs":["https:\/\/blog.dozzing.kr\/"],"url":"https:\/\/blog.dozzing.kr\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/blog.dozzing.kr\/index.php?rest_route=\/wp\/v2\/posts\/557","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.dozzing.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.dozzing.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.dozzing.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.dozzing.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=557"}],"version-history":[{"count":13,"href":"https:\/\/blog.dozzing.kr\/index.php?rest_route=\/wp\/v2\/posts\/557\/revisions"}],"predecessor-version":[{"id":1226,"href":"https:\/\/blog.dozzing.kr\/index.php?rest_route=\/wp\/v2\/posts\/557\/revisions\/1226"}],"wp:attachment":[{"href":"https:\/\/blog.dozzing.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.dozzing.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=557"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.dozzing.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}