โ ๊ธฐ๋ณธ ๊ฐ๋
- Publisher : ํน์ topic(๋๋ subject) ์ ๋ํ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ณ , ๋ฉ์์ง๋ฅผ ์์คํ ์ ์ ์กํ๋ ์ฃผ์ฒด
- Subscriber : ํน์ topic๋ค์ ๊ตฌ๋ ํ๊ณ , ๊ตฌ๋ ํ topic์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด, ์ด๋ฒคํธ ๋ฉ์์ง๋ฅผ ์์ ํ๋ ์ฃผ์ฒด
- Publisher์ subscriber๋ ์๋ก์ ์กด์ฌ๋ฅผ ๋ชจ๋ฅด๋ฉฐ, ์ง์ ํต์ ํ์ง ์๋๋ค.
- ์ 3์ ์์๊ฐ publisher์ subscriber๋ฅผ ์ฐ๊ฒฐํ๋ฉฐ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ค.
- Publisher์ subscriber๊ฐ publishing๊ณผ receiving ํ๋ ๋์ ์๋ก ์ฐ๊ฒฐ์ ์ง์ํ ํ์๊ฐ ์์ผ๋ฏ๋ก ํจ์จ์ ์ด๋ค.
- ์ต์ ์ ํจ์จ์ ์ํด, pub/sub ๋ชจ๋ธ์์๋ 3๊ฐ์ง ์ฐจ์์ ๋ถ๋ฆฌํ๋ค.
1๏ธโฃ ๊ณต๊ฐ ๋ถ๋ฆฌ (Space decoupling)
- Publisher์ subscriber๋ ์๋ก์ ์กด์ฌ๋ฅผ ์ ํ์๊ฐ ์๋ค.
- ๊ทธ๋์ ์๋ก์ IP์ฃผ์์ ํฌํธ๋ฒํธ๋ ๋ชฐ๋ผ๋ ๋๋ค.
2๏ธโฃ ์๊ฐ ๋ถ๋ฆฌ (Time decoupling)
- Publisher์ subscriber๋ ๋์์ ์ผ์ ์ํํ์ง ์์๋ ๋๋ค.
3๏ธโฃ ๋๊ธฐํ ๋ถ๋ฆฌ (Synchronization decoupling)
- ์์ชฝ์ด ์์ ํ๋ ๋์, ๋ฐ๋์ชฝ์ ์์ ์ด ์ค๋จ๋ ํ์๊ฐ ์๋ค.
- ์ฝ๊ฒ ๋งํ์๋ฉด, publisher๊ฐ publishingํ๋๋์ subscriber์ receiving ์์ ์ด ์ค๋จ๋ ํ์๊ฐ ์์ผ๋ฉฐ,
subscriber๊ฐ receivingํ๋ ๋์ publisher์ publishing ์์ ์ด ์ค๋จ๋ ํ์๊ฐ ์๋ค.
โ ๋ฉ์์ง ํํฐ๋ง
- ์๋ฒ๋ ๊ฐ subscriber๋ค์ด ๊ตฌ๋ ํ ๋ฉ์์ง๋ง ์์ ํ๋๋ก ๋ฉ์์ง๋ฅผ ํํฐ๋งํ์ฌ ์ ์กํ์ฌ์ผ ํ๋ค.
๐ฅ Subject-based filtering (Topic-based filtering)
- Subscriber๋ค์ ๊ด์ฌ ์๋ ํน์ ํ ํฝ์ ๊ตฌ๋ ํ๊ณ , ์๋ฒ๋ ํด๋น ํ ํฝ์ ๊ตฌ๋ ํ ํด๋ผ์ด์ธํธ(subscriber)๋ค์๊ฒ ํด๋น ํ ํฝ์ ๋ฉ์์ง๋ฅผ ๋ผ์ฐํ ํ๋ค.
- Topic์ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๋์ด ์๊ณ , ๊ฐ ๊ณ์ธต์ '/'๋ก ๊ตฌ๋ถ๋์ด ์๋ค. (์์: "home/living-room/temperature")
- ํด๋ผ์ด์ธํธ๋ค์ด topic ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ํํ ์์์ผ๋ง ํ๋ค๋ ๋จ์ ์ด ์๋ค.
๐ฅ Content-based filtering
- Subscriber๋ค์ ํน์ filter expression์ ๊ตฌ๋ ํ๊ณ , ์๋ฒ๋ ๋ฉ์์ง์ ๋ด์ฉ์ ๊ธฐ๋ฐํ์ฌ ์ ์ ํ filter expression์ ๊ตฌ๋ ํ ํด๋ผ์ด์ธํธ๋ค์๊ฒ ๋ฉ์์ง๋ฅผ ๋ผ์ฐํ ํ๋ค. (filter expression ์์: "tracking-number = '1234',")
๐ฅ Type-based filtering
- Subscriber๋ค์ ํน์ ํ์ ์ด๋ ํด๋์ค์ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ ํ๊ณ , ์๋ฒ๋ ๋ฉ์์ง์ ํ์ ์ ํ์ธํ ๋ค ํด๋น ํ์ ์ ๊ตฌ๋ ํ ํด๋ผ์ด์ธํธ๋ค์๊ฒ ๋ฉ์์ง๋ฅผ ๋ผ์ฐํ ํ๋ค.
โ Pub/Sub Architecture์ ์ฅ์ (Client-Server ๋ชจ๋ธ๊ณผ ๋น๊ต)
- ์ ํต์ ์ธ ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ๋ณด๋ค ํจ์ฌ ๋ง์ ์์ ํด๋ผ์ด์ธํธ๋ค์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ ์ ์๋ค. (Sender์ receiver๋ค์ด ์ง์์ ์ผ๋ก ์ง์ ์ฐ๊ฒฐ๋์ด ์์ง ์์๋ ๋๋ฏ๋ก, ์ฑ๋ฅ ์ ํ ์์ด ๋ง์ ํด๋ผ์ด์ธํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค!)
- ์ ํต์ ์ธ ํด๋ผ์ด์ธํธ์๋ฒ ๋ชจ๋ธ์์๋ ์๋ฒ๊ฐ ๋ค์ด๋๋ฉด ๋ชจ๋ ํด๋ผ์ด์ธํธ์์ ์ฐ๊ฒฐ์ด ๋๊ฒจ์ ๋ฉ์์ง๊ฐ ์์ค๋ ์ ์๋ ๋ฐ๋ฉด, Pub/Sub ๋ชจ๋ธ์ Subscriber์์ ์ฐ๊ฒฐ์ด ๋๊ธฐ๋๋ผ๋ subscriber์๊ฒ ๋ณด๋ผ ๋ฉ์์ง๋ฅผ ๋ฉ์์ง ํ์ ์ ์ฅํด๋์๋ค๊ฐ ์ ๋ฌํ๋ฏ๋ก, ๋ฉ์์ง ์์ค์ ๋ฐฉ์งํ ์ ์๋ค.
- ์ ์ ๋ ฅ, ๋ถ์์ ํ ๋คํธ์ํฌ์์๋ ์ํํ ํต์ ์ด ๊ฐ๋ฅํ๋ฏ๋ก IoT ๋๋ฐ์ด์ค ํต์ ์ ์ ๋ฆฌํ๋ค.
โ Reference
https://www.hivemq.com/blog/mqtt-essentials-part2-publish-subscribe/
'๊ฐ๋ฐ ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ธํฐ๋ท ๋คํธ์ํฌ (1) | 2024.03.18 |
---|---|
URI vs URN vs URL ์ฐจ์ด์ ? (0) | 2023.08.18 |
Spring DI (0) | 2023.08.17 |
REST API์ URI ์ค๊ณ ๊ท์น (0) | 2023.08.11 |
DDD ์ค๊ณ, SQL ์ค์ฌ ์ค๊ณ (0) | 2023.08.03 |