Fan-Out Pattern
Fan-Out Pattern ํจํด์ด๋?
ํฌ์์ ํจํด์ ํ๋์ ๋ฉ์์ง(์ด๋ฒคํธ)๋ฅผ ๋ค์์ ๊ตฌ๋ ์(Subscriber)์๊ฒ ๋์์ ์ ๋ฌํ๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ ์ํคํ ์ฒ ํจํด์ ๋๋ค.
publisher๊ฐ ๋จ์ผ ๋ฉ์์ง๋ฅผ ๋๊ธฐ์ด์ ํตํด ์ฌ๋ฌ subscriber์๊ฒ ๋ฉ์์ง๋ฅผ ์ ์ก
์ฆ, ํ๋์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๋์(์๋น์ค, ๋๋ฐ์ด์ค ๋ฑ)์ผ๋ก ๋ณต์ ๋์ด ๋ถ๋ฐฐ๋๋ 1:N ๊ตฌ์กฐ์ ๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์์ ๋๋ค.
ํฌ์์ ํจํด์ ์๋ ์๋ฆฌ (Pub/Sub)
์ด ํจํด์ ์ฃผ๋ก ๋ฐํ/๊ตฌ๋
(Pub/Sub) ๋ชจ๋ธ์ ํตํด ๊ตฌํ๋ฉ๋๋ค. ์์คํ
์ ์ธ ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๋ก ๋๋ฉ๋๋ค.
๋ฐํ์ (Publisher):
์ด๋ฒคํธ๋ฅผ ์์ฑํ๊ณ ๋ฉ์์ง๋ฅผ ํ ๋ฒ ๋ฐํํ๋ ์ฃผ์ฒด์ ๋๋ค.
๋ฐํ์๋ ์ด ๋ฉ์์ง๋ฅผ ๋๊ฐ, ๋ช ๋ช ์ด ๋ฐ๋์ง ์ ํ์๊ฐ ์์ต๋๋ค.
๋ฉ์์ง ๋ธ๋ก์ปค (Message Broker):
๋ฐํ์์ ๊ตฌ๋ ์ ์ฌ์ด์ '์ค๊ฐ์' ์ญํ ์ ํฉ๋๋ค. (์: RabbitMQ, Kafka, AWS SNS)
๋ฐํ์๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ๋ฐ์, ์ด ๋ฉ์์ง๋ฅผ ๊ตฌ๋ ์ ์ฒญํ ๋ชจ๋ ๊ตฌ๋ ์์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณต์ ํ์ฌ ์ ๋ฌํฉ๋๋ค.
์ด ๋จ๊ณ๊ฐ ๋ฐ๋ก 'ํฌ์์'์ด ์ผ์ด๋๋ ์ง์ ์ ๋๋ค.
๊ตฌ๋ ์ (Subscriber):
๋ฉ์์ง ๋ธ๋ก์ปค์๊ฒ ํน์ ์ข ๋ฅ์ ๋ฉ์์ง(ํ ํฝ)๋ฅผ ๋ฐ๊ฒ ๋ค๊ณ ๋ฏธ๋ฆฌ '๊ตฌ๋ (Subscribe)'์ ์ ์ฒญํ ๋์์ ๋๋ค.
๋ธ๋ก์ปค๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ์ ๋ฌ๋ฐ์ ๊ฐ์ ํ์ํ ์ฒ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.
ํฌ์์ ํจํด์ ์ฅ์
์ด ํจํด์ ํต์ฌ ์ฅ์ ์ ๋์ปคํ๋ง(Decoupling), ์ฆ ๋ฐํ์์ ๊ตฌ๋
์ ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ ๊ฒ์
๋๋ค.
์ ์ฐ์ฑ:
๊ตฌ๋ ์๊ฐ ์๋ก ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋์ด๋ ๋ฐํ์์ ์ฝ๋๋ ์ ํ ์์ ํ ํ์๊ฐ ์์ต๋๋ค.
ํ์ฅ์ฑ:
๊ตฌ๋ ์๊ฐ ์๋ฐฑ๋ง ๊ฐ๋ก ๋์ด๋๋ ๋ฐํ์๊ฐ ํ๋ ์ผ(๋ฉ์์ง 1ํ ๋ฐํ)์ ๋์ผํฉ๋๋ค.
๋ฉ์์ง ๋ธ๋ก์ปค๊ฐ ๋ถํ๋ฅผ ์ฒ๋ฆฌํด ์ค๋๋ค.
๋น๋๊ธฐ ์ฒ๋ฆฌ:
๋ฐํ์๋ ๋ฉ์์ง๋ฅผ ๋ธ๋ก์ปค์ ์ ๋ฌํ ํ, ๊ตฌ๋ ์๊ฐ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ ๋๊น์ง ๊ธฐ๋ค๋ฆด ํ์ ์์ด ์ฆ์ ๋ค์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์ฃผ์ ์ฌ์ฉ ์ฌ๋ก
ํฌ์์ ํจํด์ ํ๋์ ์ด๋ฒคํธ๋ฅผ ์ฌ๋ฌ ์์คํ
์ด ๊ฐ๊ฐ ์ ๋ฌ๋ฐ์ ์ฒ๋ฆฌํด์ผ ํ๋ ๋ค์ํ ์ํฉ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
ํธ์ ์๋ฆผ:
'๊ธด๊ธ ๊ณต์ง' ๋ฉ์์ง ํ๋๋ฅผ ์๋ฐฑ๋ง ๋์ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ(๊ตฌ๋ ์)์ ๋์์ ์ ์กํ ๋
๋ง์ดํฌ๋ก์๋น์ค:
'์ฃผ๋ฌธ ์๋ฃ' ์ด๋ฒคํธ ํ๋๋ฅผ '์ฌ๊ณ ์๋น์ค', '๋ฐฐ์ก ์๋น์ค', '์๋ฆผ ์๋น์ค' ๋ฑ ์ฌ๋ฌ ๊ด๋ จ ์๋น์ค(๊ตฌ๋ ์)์ ๋์์ ์ ํํ ๋
๊ทธ๋ฃน ์ฑํ :
ํ ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ๋ฉ์์ง๋ฅผ ์ฑํ ๋ฐฉ์ ์ฐธ์ฌํ ๋ชจ๋ ์ฌ์ฉ์(๊ตฌ๋ ์)์๊ฒ ์ ๋ฌํ ๋
๋ฐ์ดํฐ ๋๊ธฐํ:
์๋ณธ DB์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ฅผ ์ฌ๋ฌ ์บ์ ์๋ฒ๋ ๊ฒ์ ์์ง(๊ตฌ๋ ์)์ ์ ํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ ๋
Last updated