๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ ๊ณต๋ถ€

Pub/Sub Architecture

by syLim___ 2023. 11. 28.
728x90

 

โœ… ๊ธฐ๋ณธ ๊ฐœ๋…

 - 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/ 

 

728x90