์ ๋ต ํจํด์ ์๊ณ ๋ฆฌ์ฆ ์งํฉ์ ์ฌ์ฉํ๋ ํจํด. ์๊ณ ๋ฆฌ์ฆ๊ตฐ(์งํฉ)์ ์ ์ํ๊ณ ์บก์ํํด์ ๊ฐ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ํ๋์ ์ธํฐํ์ด์ค๋ก ๋ฌถ์ด ์บก์ํํ๊ณ , ์ด๋ค์ ๊ต์ฒดํ๋ฉด์ ์ธ ์ ์๋ ํจํด์ ์๋ฏธํ๋ค.
์ค๋ฆฌ ์๋ฎฌ๋ ์ด์ ๊ฒ์์ ์ค๋ฆฌ ๊ตฌํ ์์. ๊ธฐ์กด ์ค๋ฆฌ๋ค ์ค์์ ์ผ๋ถ ์ค๋ฆฌ์ ๋๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ, ์์ ๋์ ์ค๋ฆฌ์ ๊ธฐ๋ฅ๋ค์ ์๊ณ ๋ฆฌ์ฆ ๋๋ ์ธํฐํ์ด์ค๋ผ๊ณ ํ๊ณ , ์ด๋ฅผ ์ ๋ต(Strategy)์ด๋ผ๊ณ ๋ฌถ์ด ํ์์ ๋ฐ๋ผ ์ฃผ์ ์์ผ์ฃผ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค. - ์ถ์ฒ: ํค๋ ํผ์คํธ ๋์์ธ ํจํด
์ ๋ต ํจํด์ ๋ฐํ์์์ ์ ๋ต์ ๊ต์ฒดํ ์ ์๊ธฐ ๋๋ฌธ์ ๋น์ทํ ๋ชฉ์ ์ ๊ฐ์ง๋ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ ํ์ ์ผ๋ก ๋ณ๊ฒฝํ๋ฉด์ ์ฌ์ฉํ ๋ ์ ์ฉํ๋ค. ๋๋ ๋น์ทํ์ง๋ง ๊ฐ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ํ๋ ๊ฐ์ฒด๋ฅผ ๊ตฌํํ ๋ ์ ์ฉํ๋ค. (์ - ์๋์ฐจ ๊ฒฝ๋ก, ๋๋ณด ๊ฒฝ๋ก, ์์ ๊ฑฐ ๊ฒฝ๋ก๋ฅผ ๊ฐ๊ฐ ์๋ ค์ฃผ๋ ๋ด๋น๊ฒ์ด์ )
์ ๋ต ํจํด์ ์ฌ์ฉํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํ์ ๋ถ๋ฆฌํด์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ์ด๋ก ์ธํด ๊ฐ๋ฐฉ ํ์ ์์น์ ์ค์ํ๊ฒ ๋์ด ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๊ฑด๋๋ฆฌ์ง ์์ผ๋ฉด์ ๊ธฐ๋ฅ ํ์ฅ์ ํ ์ ์๋ค.
์ต์ ๋ฒ ํจํด์ ํ๋ ํจํด ์ค ํ๋๋ก A ๊ฐ์ฒด์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ A๋ฅผ ๊ด์ฐฐํ๊ณ ์๋ B์๊ฒ ์๋ฆฌ๋ ํจํด์ ์๋ฏธํ๋ค.
- Subject: ๊ด์ฐฐ ๋นํ๋ ๊ฐ์ฒด๋ก, ์ด๋ ํ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ ๊ฐ์ฒด์ด๋ค.
- Observer: Subject๋ฅผ ๊ด์ฐฐํ๊ณ ์๋ ๊ฐ์ฒด๋ก, Subject๊ฐ ๋ฐ์์ํจ ์ด๋ฒคํธ์ ๋ฐ๋ผ ํน์ ๋์์ ์ํํ๋ค.
์ต์ ๋ฒ ํจํด์ Subject์ Observer์ฌ์ด์ ๋์จํ ์ฐ๊ฒฐ ๊ตฌ์ฑ์ ๋ชฉ์ ์ด ์๋ค.
์๋ฅผ ๋ค์ด Subject๊ฐ ์๋ก ์ถ๊ฐ๋๋ค๋ฉด? Subject์ ๊ตฌ๋ ์๋ก Observer๋ฅผ ์ถ๊ฐํ ๋ฟ, Observer์๋ ๋ณ๊ฒฝ์ฌํญ์ด ์๋ค.
๋ํ ๋์จํ ์ฐ๊ฒฐ์ ๋ฐ๋ผ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๋ ํจ๊ณผ๊ฐ ์์ผ๋ฉฐ ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์น ์ค ๋จ์ผ ์ฑ ์ ์์น๊ณผ ๊ฐ๋ฐฉ ํ์ ์์น์ ์ค์ํ๊ฒ ๋๋ค.
๋ฐํ ๊ตฌ๋ ํจํด์ ์ต์ ๋ฒ ํจํด๊ณผ ๋์ผํ๊ฒ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ Subject(=Publisher)์ ๊ทธ ์ด๋ฒคํธ๋ฅผ ๋ฐ๊ธฐ์ํด Subject๋ฅผ ๊ด์ฐฐํ๋ Observer(Subscriber)๊ฐ ์กด์ฌํ๋ค. ๋ ์ฌ์ด์ ์ค๊ฐ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ ํ๋์ ๊ณ์ธต(๋ฏธ๋ค์จ์ด)์ด ์กด์ฌํ๋ค.
๋ฐํ ๊ตฌ๋ ํจํด์ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์กด์ฌํ๋ค.
- ๋ฐํ์๊ฐ ๋ณด๋ด๋ ๋ฉ์์ง(์ด๋ฒคํธ)์๋ ์์ ์๊ฐ ์ ํด์ ธ ์์ง ์๋ค.
- ํน์ ๋์ ์์ด ์ ๋ฌ๋ ๋ฉ์์ง๋ ๊ตฌ๋ ์ค์ธ ์์ ์์๊ฒ ์ ๋ฌ๋๋ค.
- ์์ ์๋ ๋ฐํ์์ ๋ํ ์ ๋ณด ์์ด ๋ฉ์์ง(์ด๋ฒคํธ)๋ฅผ ์์ ํ๋ค.
์ต์ ๋ฒ ํจํด๊ณผ์ ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
-
์ต์ ๋ฒ ํจํด์ Observer์ Subject ๊ฐ ์๋ก๋ฅผ ์๊ณ ์์ผ๋, ๋ฐํ ๊ตฌ๋ ํจํด์์๋ ์๋ก๋ฅผ ๋ชฐ๋ผ๋ ์๊ด์๋ค.
์ต์ ๋ฒ ํจํด์ ๋ ๊ฐ์ฒด๊ฐ์ ์ง์ ์ ์ธ ์ํต์ด ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค. (Subject์์ Observer์ ๋ฉ์๋๋ฅผ ์ง์ ์ ์ผ๋ก ํธ์ถํ๊ธฐ ๋๋ฌธ)
๋ฐ๋ฉด ๋ฐํ ๊ตฌ๋ ํจํด์ Publisher ๊ฐ์ฒด์ Subscriber ๊ฐ์ฒด ์ฌ์ด์ ์ง์ ์ ์ธ ์ํต์ ํ์ง ์์๋ ๋๋ค. ์ํต์ ์ญํ ์ Event Channel์ธ ์ 3์๊ฐ ์ํํ๊ธฐ ๋๋ฌธ์ด๋ค.
-
๋ฐํ ๊ตฌ๋ ํจํด์ด ์ต์ ๋ฒ ํจํด๋ณด๋ค ๋ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์ง๋ค.
1์ ๋ด์ฉ์์ ์ดํด๋ดค๋ฏ์ด, ์๋ก์ ์กด์ฌ๋ฅผ ์ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ ์ฌ์ด์ ๋์ฑ ๋์จํ ๊ฒฐํฉ์ ์ป์ ์ ์๋ค.
์ต์ ๋ฒ ํจํด๊ณผ ๋ค๋ฅด๊ฒ ๋ฐํ ๊ตฌ๋ ํจํด์์๋ ๊ตฌ๋ , ์ด๋ฒคํธ ์ ๋ฌ ๋ฑ ๋ชจ๋๋ฅผ ์ค๊ฐ ๊ณ์ธต์ ์์ํ๊ณ ์์ผ๋ฏ๋ก ๋์ฑ ๋ถ๋ฆฌ๋ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
-
์ต์ ๋ฒ ํจํด์ ์ฃผ๋ก ๋๊ธฐ์ ์ผ๋ก ๋์ํ๋ฉฐ, ๋ฐํ ๊ตฌ๋ ํจํด์ ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๊ฒ ๋๋ค.
๋ฐํ๊ตฌ๋ ํจํด์์๋ Publisher, Subscriber ์ฌ์ด์ ์ค๊ฐ ๋ธ๋ก์ปค์๊ฒ ์ด๋ฒคํธ๋ฅผ ๋์ง๊ณ ๋ค๋ฅธ ์์ ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ์์ ์ ํ์ฉํ ์ ์๋ค.
์ฐธ๊ณ ์๋ฃ
- https://jeonyeohun.tistory.com/216
- https://learn.microsoft.com/ko-kr/azure/architecture/patterns/publisher-subscriber
- https://gobae.tistory.com/122
์ค์ฌ์ ํจํด์ ํ๋ ํจํด ์ค ํ๋๋ก ๊ฐ์ฒด ๊ฐ ๋ณต์กํ ์์กด ๊ด๊ณ๋ฅผ ์ค์ผ ์ ์๋ ํจํด์ด๋ค. ๊ฐ์ฒด ๊ฐ์ ์ํธ ์์ฉ ๋ก์ง์ ์บก์ํํ์ฌ Mediator์๊ฒ ๋งก๊น์ผ๋ก์จ ์ํธ ์์ฉ ๋ก์ง์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ง๋ค๊ณ ์ํธ ์์ฉ ์ฃผ์ฒด์ธ ๋ ๊ฐ์ฒด ์ฌ์ด์ ์ข ์์ฑ์ ์ค์ผ ์ ์๋ค.
- Mediator: ๊ฐ์ฒด๋ค๊ณผ ํต์ ํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ ์ํธ ์์ฉ์ ๋ํ ๋ก์ง์ ์ค์ ์ ์ด ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
- Component(Collague): Mediator ๊ฐ์ฒด์ ์ํด ์ค์ฌ๋๋ ํด๋์ค(Object)
ํ๋์ ๊ฐ์ฒด์์ ๋ฐ์ํ ์ด๋ฒคํธ์ ๋ํ์ฌ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์๋ต์ ํ ๋ ์ค์ฌ์ ํจํด์ ์ฌ์ฉํ๋ค. ์ด ๋ ๊ฐ์ฒด๋ค์ ์๋ก ๋ ๋ฆฝ์ ์ด๊ณ ์ํธ ์์ฉ์ Mediator ๊ฐ์ฒด๋ฅผ ํตํด์ ํ๋ค.
์ค์ฌ์ ํจํด์ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ๊ณ ์๋ค.
์ฅ์ :
- ์ํธ ์์ฉ์ ๋ก์ง์ด Mediator์๊ฒ ์ค์ ์ง์ค ์ ์ด๋๋ค.
- ๋จ์ผ ์ฑ ์ ์์น ์ค์: Component ์์ฒด์ ์์ ๊ณผ ๋ค๋ฅธ ๊ฐ์ฒด์์ ์ํธ ์์ฉ์ด ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฑ ์์ด ๋ถ๋ฆฌ๋์ด ์ฝ๋๋ฅผ ์์ ํ๊ธฐ ์ฝ๋ค.
- ๊ฐ๋ฐฉ ํ์ ์์น ์ค์: ๊ฐ์ฒด๋ค์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ Mediator์ ๊ธฐ๋ฅ์ ํ์ฅํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์๋ค. ๊ทธ ๋ฐ๋๋ ์ฑ๋ฆฝํ๋ค.
- ํ๋ก๊ทธ๋จ์ component ๊ฐ ๊ฒฐํฉ๋๋ฅผ ์ค์ผ ์ ์๋ค.
๋จ์ :
- ์๊ฐ์ด ์ง๋๊ณ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด Mediator ๊ฐ์ฒด๊ฐ ๋๋ฌด ๋ง์ ๊ธฐ๋ฅ์ ํฌํจํด ๋ณต์กํ ๊ตฌ์กฐ๊ฐ ๋ ์ ์๋ค.
์ฐธ๊ณ ์๋ฃ

