๊ฐ์
์ต๊ทผ์ ์งํํ ํ๋ก์ ํธ ์ค์ socket ํต์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ , responce๋ฅผ ๋ฐ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋๋ฐ
๋คํธ์ํฌ๊ฐ ๋ถ์์ ํ ํ๊ฒฝ์์ ์งํํ๋๊น socket ์ฐ๊ฒฐ ๋ถ์์ , ์ฐ๊ฒฐ ์ง์ฐ ๋ฑ๋ฑ ์ด์๋ค์ด ๋ฐ์ํด์
๋ค์์๋ mqtt ํน์ kafka๋ฅผ ์ฌ์ฉํด๋ด์ผ๊ฒ ๋ค ์ถ์ด์ ์์นํด๋ณด์๋ค.
๊ฐ๋จํ ๋น๊ต
· MQTT : ๊ฒฝ๋ ๋ฉ์์ง, ๋ฎ์ ๋๊ธฐ ์๊ฐ ๋ฐ ๋ฎ์ ๋ฐ์ดํฐ ํธ๋ํฝ์ ์ ํฉํ๋ค. IoT๋ ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฆฌํ๋ค.
· Kafka : ๋์ ๋ฐ์ดํฐ ํธ๋ํฝ ๋ฐ ๋ฉ์์ง ์ ์ง ๊ด๋ฆฌ๊ฐ ํ์ํ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ๋ค. ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ด ์ค์ํ ๋ ์ ๋ฆฌํ๋ค.
์ข ๋ ์์ธํ๊ฒ ์ ๋ฆฌ
โ MQTT
· Message Queuing Telemetry Transport
· ์ ํ๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง ์ฅ์น๋ IoT(์ฌ๋ฌผ์ธํฐ๋ท) ์ฅ์น ์ฌ์ด์ ํต์ ์ ์ํด ์ค๊ณ๋ ํ๋กํ ์ฝ
· ๊ฒฝ๋ํ๋ ์ค๊ณ์ ํจ์จ์ ์ธ ๋ฉ์์ง ์ ์ก์ผ๋ก ์ ์ ๋ ฅ, ์ ๋์ญํญ ํ๊ฒฝ์์ ์ต์ ํ๋ ์ฑ๋ฅ์ ๋ฐํํ๋ค!
โจ MQTT ํน์ง
- ์ํ ํจํท ํฌ๊ธฐ
- MQTT ๋ฉ์์ง๋ ๋งค์ฐ ์์ ํฌ๊ธฐ์ ํจํท์ ์ฌ์ฉํ์ฌ ๋์ญํญ์ ์ต์ํํ๋ค.
- ํค๋ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์์ผ๋ฉฐ, ์ต์ํ์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋๋ก ์ค๊ณ๋์๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ํค๋๋ 2๋ฐ์ดํธ๋ก ๋งค์ฐ ์๋ค.
- QoS (Quality of Service)
- MQTT๋ QoS๋ฅผ 3๊ฐ์ง ์์ค์ผ๋ก ์ ๊ณตํ์ฌ ๋ฉ์์ง ์ ์ก์ ์์ ์ฑ์ ์ค์ ํ ์์๋ค.
- QoS 0 : At most once (์ต๋ 1ํ ์ ์ก, ์ ๋ฌ ๋ณด์ฅ ์์)
- QoS 1 : At least once (์ต์ 1ํ ์ ์ก, ์ค๋ณต ๊ฐ๋ฅ์ฑ ์์)
- QoS 2 : Exactly once (์ ํํ 1ํ ์ , ๋ ๋์ ์ ๋ขฐ์ฑ)
- ์ด๋ฌํ ์ต์ ์ ํตํด ์ฅ์น ๊ฐ ํต์ ์์ ํธ๋ํฝ๊ณผ ์ ๋ขฐ์ฑ ์ฌ์ด์ ๊ท ํ์ ๋ง์ถ ์ ์๋ค.
- MQTT๋ QoS๋ฅผ 3๊ฐ์ง ์์ค์ผ๋ก ์ ๊ณตํ์ฌ ๋ฉ์์ง ์ ์ก์ ์์ ์ฑ์ ์ค์ ํ ์์๋ค.
- ์ฐ๊ฒฐ ์ ์ง์ ์ ์ ๋ ฅ ์ค๊ณ
- MQTT๋ ‘Keep Alive’ ๋ฉ์์ง๋ก ์ฐ๊ฒฐ์ ์ ์งํ์ฌ ์ฅ์น๊ฐ ์์๋ก ์ฌ์ฐ๊ฒฐํ์ง ์์๋ ๋๋๋ก ํ๋ค.
- ์ด ๊ธฐ๋ฅ์ ์ ์ ๋ ฅ ํ๊ฒฝ์์ ์ ๋ ฅ ์๋น๋ฅผ ์ค์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฐฐํฐ๋ฆฌ๋ก ์๋ํ๋ ์ฅ์น๋ค์ ์ ํฉํ๋ค.
- TCP ๊ธฐ๋ฐ์ ์ฐ๊ฒฐ ์งํฅ์ ํ๋กํ ์ฝ
- MQTT๋ TCP ์์์ ๋์ํ์ฌ ์ ๋ขฐ์ฑ ์๋ ์ฐ๊ฒฐ์ ์ ์งํ๋ฉฐ ์ํ ์ฅ์น ๊ฐ์ ํต์ ์ ์ ๋ฆฌํ ๊ตฌ์กฐ
โ Kafka
· ๋๊ท๋ชจ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ์ํ ๋ถ์ฐํ ๋ฉ์์ง ํ๋ซํผ
· ๋์ ์ฒ๋ฆฌ๋๊ณผ ๋ฎ์ ์ง์ฐ ์๊ฐ, ํ์ฅ์ฑ์ ๋ชฉํ๋ก ์ค๊ณ๋์๋ค.
· ์ค์๊ฐ ๋ก๊ทธ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ๋ถ์, ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ์ ์์ฃผ ์ฌ์ฉ๋๋ค.
โจ Kafka ํน์ง
- ๋ถ์ฐํ ์ํคํ
์ฒ
- ๋ถ์ฐํ์ผ๋ก ์ค๊ณ๋์ด ์ฌ๋ฌ ๋ธ๋ก์ปค๊ฐ ํด๋ฌ์คํฐ๋ฅผ ํ์ฑํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค. → ๋ฐ์ดํฐ์ ์ค๋ณต์ฑ๊ณผ ํ์ฅ์ฑ์ ๋ณด์ฅํ์ฌ ๋์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ๋ฐ์ดํฐ๋ ์ฌ๋ฌ ํํฐ์ ์ผ๋ก ๋๋์ด ์ ์ฅ๋๋ฉฐ ๊ฐ ํํฐ์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ๋์ด ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ๋์ ์ฒ๋ฆฌ๋๊ณผ ์ ์ง์ฐ์ฑ
- ๋ฐ์ดํฐ ์ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ์ ์์ด ๋งค์ฐ ๋์ ์ฒ๋ฆฌ๋์ ์๋ํ๋ค.
- ๋ด๋ถ์ ์ผ๋ก ‘Zero-Copy' ๊ธฐ์ ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ๋์คํฌ๋ก ๋ฐ๋ก ์ ์กํ๊ณ ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ๊ณผ์ ์ ์ค์ด๊ธฐ ๋๋ฌธ
- ๋ฐฐ์น ์ ์ก๊ณผ ์์ถ์ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
- ๋ฐ์ดํฐ ์ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ์ ์์ด ๋งค์ฐ ๋์ ์ฒ๋ฆฌ๋์ ์๋ํ๋ค.
- offset ๊ธฐ๋ฐ ๋ฉ์์ง ๊ด๋ฆฌ
- Consumer๊ฐ ๋ฉ์์ง๋ฅผ ์๋นํ ๋ ํด๋น ๋ฉ์์ง์ offset์ ๊ธฐ๋กํ๋ค. → ๋ฉ์์ง๋ฅผ ์ ํํ๊ฒ ์ถ์ ํ๊ณ Consumer๊ฐ ์ธ์ ๋ ์ง ํ์ํ ๋ ๋ฉ์์ง๋ฅผ ๋ค์ ์ฒ๋ฆฌํ๊ฑฐ๋ ํน์ ์ง์ ์์๋ถํฐ ์ฌ์ฒ๋ฆฌํ ์ ์๋ค.
- ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ก๊ทธ, ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ ๋ ๋งค์ฐ ์ ์ฉํ๋ค.
- ๋ด๊ตฌ์ฑ ์๋ ๋ฐ์ดํฐ ๋ณด๊ด
- ๋ฉ์์ง๋ฅผ ๋ธ๋ก์ปค์ ๋ก๊ทธ์ ์ ์ฅํ๋ฉฐ ์ง์ ๋ ๊ธฐ๊ฐ ๋์ ๋ฉ์์ง๋ฅผ ๋ณด๊ดํ๋ค. ๊ทธ๋์ ๋ฉ์์ง๊ฐ ์๋น๋์ง ์๋๋ผ๋ ์์ค ์์ด ์์คํ ์ ๋จ์ ์์ด ๋ฐ์ดํฐ ์ฌ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ค์๊ฐ ๋ถ์ ์์คํ ์ด๋ ํธ๋์ญ์ ๋ก๊ทธ ์ฒ๋ฆฌ ๋ฑ์์ ์ค์ํ ์ญํ ์ ํ๋ค.
๐ ๋ง์ง๋ง ์ ๋ฆฌ
ํน์ฑ | MQTT | Kafka |
๋ฉ์์ง ํฌ๊ธฐ | ์๊ณ ์ต์ํ์ ํค๋ | ๋ํ ๋ก๊ทธ, ์ด๋ฒคํธ ๋ฐ์ดํฐ |
QoS | ์ฌ๋ฌ ์์ค ์ ๊ณต (0, 1, 2) | ๋ณด์ฅ๋ ์ ๋ฌ (At least once) |
์ฐ๊ฒฐ ๋ฐฉ์ | TCP ๊ธฐ๋ฐ, ๊ฒฝ๋ํ | ๋ถ์ฐ ํด๋ฌ์คํฐ ๊ธฐ๋ฐ |
์ฃผ์ ์ฌ์ฉ ์ฌ๋ก | IoT ์ฅ์น, ์ ํ๋ ๋ฆฌ์์ค ํต์ | ๋๊ท๋ชจ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ, ์ค์๊ฐ ๋ถ์ |
๋ฐ์ดํฐ ์ ์ฅ | ๋ฉ์์ง๋ฅผ ์ผ์์ ์ผ๋ก ๋ณด๊ด | ๋ฉ์์ง์ ๋ด๊ตฌ์ฑ ๋ณด์ฅ, ๋ก๊ทธ ์ ์ฅ |
'๐ database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MongoDB] ๊ฐ๋จํ ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.01.10 |
---|---|
[MQTT] python ์ผ๋ก sub / pub ๊ตฌํํ๊ธฐ (1) | 2024.10.28 |
mysql ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ค์๊ฐ ํ์ธ ์งํ (3) | 2024.10.20 |
mysql ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ค์๊ฐ ํ์ธ (2) | 2024.10.02 |
[MQTT] message๋ฅผ ์๋ณด๋ด๋๋ฐ ๊ณ์ message๊ฐ ์์ด๋ issue (1) | 2024.03.07 |