์ด๋ฒคํธ
์ด๋ฒคํธ๊ฐ ์(Why) ํ์ํ ๊น์?
Example
์ผํ๋ชฐ์์ ๊ตฌ๋งค๋ฅผ ์ทจ์ํ๋ฉด?
- ํ๋ถ ์ฒ๋ฆฌ๋ฅผ ์งํ ํด์ผ ํฉ๋๋ค.
ํ๋ถ ์ฒ๋ฆฌ ์๋น์ค๊ฐ Exception์ด ๋ฐ์ํ๋ค๋ฉด?
- ์งํํ๋ ํ๋ถ ์ฒ๋ฆฌ๋ฅผ ์ทจ์(Rollback) ํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
- ํ๋ถ ์ฒ๋ฆฌ๋ ์งํ(Commit)ํ๊ณ ํ๋ถ ์ฒ๋ฆฌ๋ฅผ ์ฌ์๋(Retry)๋ฅผ ํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
ํ๋ถ ์ฒ๋ฆฌ ์๋น์ค๊ฐ ๋ฆ๊ฒ ์๋ตํ๋ค๋ฉด?
- ํ๋ถ์ ์ฒ๋ฆฌํ๋ ์ธ๋ถ ์์คํ ์ ์๋ต ์๊ฐ์ด ๊ธธ์ด์ง๋ฉด ๊ทธ๋งํผ CancelOrderService๋ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ฉ๋๋ค.
- CancelOrderService์ ์ฑ๋ฅ์ RefundService์ ์์กด์ ์ด๊ฒ ๋ฉ๋๋ค.
์ทจ์ ์๋น์ค์ ๊ธฐ๋ฅ์ ๋ ์ถ๊ฐํ๊ฒ ๋๋ค๋ฉด?
- ์ทจ์ ์๋น์ค์ E-Mail์ ํตํด ์ทจ์ ์๋ฆผ์ ๋ฐ๊ณ ์ถ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฒ ๋ฉ๋๋ค.
- ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด ์ทจ์ ์๋น์ค๋ RefundService, NotiService์ ์์กด์ ์ด๊ฒ ๋ฉ๋๋ค.
- ์ทจ์ ์๋น์ค๋ ์ทจ์, ์๋ฆผ, ํ๋ถ ๋ก์ง์ด ์์ด๊ฒ ๋๊ณ . ๋ฌธ์ ๋ ๋ ๋ณต์กํด ์ง๋๋ค.
- ํ๋ถ์ ์ฑ๊ณตํ์ง๋ง, ์๋ฆผ์ด ์คํจํ๋ค๋ฉด?
Bounded Context ๊ฐ์ ๊ฐ๊ฒฐํฉ(High Coupling)
- ์ทจ์, ์๋ฆผ, ํ๋ถ์ด ๋ชจ๋ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์๊ธฐ ๋๋ฌธ์ ์์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด?
Bounded Context ๊ฐ์ ๊ฐํ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด Event๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ์ ์ผ๋ก Processing ํ๋ ๋ฐฉ๋ฒ์ด ๋ฑ์ฅํ๊ฒ ๋์์ต๋๋ค.
์ด๋ฒคํธ๋ ์ด๋(Where)์ ์ฐ์ผ๊น์?
- Trigger
- ์ฃผ๋ฌธ์ ๊ฒฝ์ฐ ์ฃผ๋ฌธ ์ทจ์ ์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ ์ ์๋ค.
- ํ๋ถ ์๋น์ค๋ ์ฃผ๋ฌธ ์ทจ์ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์๋ก ๋ค๋ฅธ ์์คํ
๊ฐ์ ๋ฐ์ดํฐ ๋๊ธฐํ
- ๋ฐฐ์ก์ง ๋ณ๊ฒฝ ์ด๋ฒคํธ ๋ฐ์
- ์ธ๋ถ ๋ฐฐ์ก ๋ฐฐ์ก์ง ๋ณ๊ฒฝ
- ๋ด๋ถ ๋ฐฐ์ก ๋ฐฐ์ก์ง ๋ณ๊ฒฝ
- ๋ฐฐ์ก์ง ๋ณ๊ฒฝ ์ด๋ฒคํธ ๋ฐ์
๋น๋๊ธฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ
- ๋ก์ปฌ ํธ๋ค๋ฌ๋ฅผ ๋น๋๊ธฐ๋ก ์คํ
- ์ด๋ฒคํธ ์ ์ฅ์์ ์ด๋ฒคํธ ํฌ์๋ ์ฌ์ฉ
- Polling
- ์ธ๋ถ์ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์
- ์ด๋ฒคํธ ์ถ์ ๋ฐ์ดํฐ ํฌ์๋์ ์ ์ฅ
- ์ด๋ฒคํธ ์ ์ฅ์์ ์ด๋ฒคํธ ์ ๊ณต API ์ฌ์ฉ
- Interrupt
- ํธ๋ค๋ฌ๊ฐ API ์๋ฒ๋ฅผ ํตํด ์ด๋ฒคํธ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋ ๋ฐฉ์
- ์ด๋ฒคํธ ์ถ์ ์ธ๋ถ ํธ๋ค๋ฌ์ ์ ์ฅ
- ๋ฉ์์ง ํ ์ฌ์ฉ
- RabbitMQ : Global Transaction ์ง์๊ณผ ํจ๊ป ํด๋ฌ์คํฐ์ HA ์ง์
- Kafka : Global Transaction ์ง์ X, ๋ค๋ฅธ Message Queue๋ณด๋ค ๋์ ์ฑ๋ฅ
Global Transaction
- ํ์ํ๋ค๋ฉด ์ด๋ฒคํธ๋ฅผ ๋ฐ์ํ๋ ๋๋ฉ์ธ ๊ธฐ๋ฅ๊ณผ ๋ฉ์์ง ํ์ ์ด๋ฒคํธ๋ฅผ ์ ์ฅํ๋ ์ ์ฐจ๋ฅผ ํ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด์ผ ํ๋ค.
- ๊ทธ๋ ๊ธฐ ์ํด์ Global Transcation์ด ํ์ํฉ๋๋ค.
- https://www.popit.kr/rest-%EA%B8%B0%EB%B0%98%EC%9D%98-%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%B6%84%EC%82%B0-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EA%B5%AC%ED%98%84-1%ED%8E%B8/
- https://www.popit.kr/rest-%EA%B8%B0%EB%B0%98%EC%9D%98-%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%B6%84%EC%82%B0-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EA%B5%AC%ED%98%84-2%ED%8E%B8-tcc-cancel-timeout/
์ด๋ฒคํธ ์ ์ฉ ์ ๊ณ ๋ ค์ฌํญ
- ์ด๋ฒคํธ ์์ค ์์ฒด๋ฅผ ์ด๋ฒคํธ์ ์ถ๊ฐํ ์ง ์ฌ๋ถ
- ์ด๋ฒคํธ ์ ์ก ์คํจ๋ฅผ ์ผ๋ง๋ ํ์ฉํ ๊ฒ์ธ์ง
- ์ด๋ฒคํธ ์์ค
- ์ด๋ฒคํธ ์์
- ์ด๋ฒคํธ ์ฌ์ฒ๋ฆฌ(๋ฉฑ๋ฑ์ฑ)
Etc
Publisher - Subscribe Pattern
Advantages
- ๋ฎ์ ๊ฒฐํฉ๋(Loose coupling)
- ํ์ฅ์ฑ(Scalability)
Disadvantages
- ๋ฉ์์ง ์ ๋ฌ์ ๋ณด์ฅํ ์ ์๋ค.
- Topic ๋ณ๋ชฉ ํ์