์ธ๊ธฐ๊ธ ์๊ตฌ์ฌํญ
- ์ผ ๋จ์๋ก ์์ 10๊ฑด ์ธ๊ธฐ๊ธ ์ ์
- ๋งค์ผ ์ค์ 1์ ์ ๋ฐ์ดํธ
- ์ข์์ ์/๋๊ธ ์/์กฐํ์ ๊ธฐ๋ฐ ์ ์ ๊ณ์ฐ
- ์ ์ = (์ข์์ ์ * 3) + (๋๊ธ ์ * 2) + (์กฐํ์ * 1)
- ์ต๊ทผ 7์ผ ์ธ๊ธฐ๊ธ ๋ด์ญ ์กฐํ
์ค๊ณ
- ๋งค์ผ ๊ฒ์๊ธ ์์ฑ ํธ๋ํฝ์ ์๋ฐฑ~์์ฒ๋ง ๊ฑด ์ด์
- ํ๋ฃจ๋์ ์์ฑ๋ ๋ชจ๋ ๊ฒ์๊ธ์ ๋ํด์,
- ์ ์๋ฅผ ๊ณ์ฐํ๊ณ , ์์ 10๊ฑด์ ์ฐพ์์ผํ๋ ์์
- ์ด๋ฌํ ์์ ์ 1์๊ฐ ๋ง์ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค.
- ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
- ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ๊ณ ๋ คํด๋ณผ ์ ์๋ค.
- ์ค์ 12์๊ฐ ๋์๋ง์, ์ ๋ ์์ฑ๋ ๊ฒ์๊ธ์ ๋ชจ๋ ์ํ
- ๊ฐ ๊ฒ์๊ธ์ ๋ํด์ ์ข์์ ์, ์กฐํ์, ๋๊ธ ์๋ฅผ ์กฐํ
- ๊ฒ์๊ธ์ ์ ์๋ฅผ ๊ณ์ฐ
- ๋ชจ๋ ๊ฒ์๊ธ์ ๋ํด์ ์์ 10๊ฑด์ ์ ์
- ๋ฐฐ์น ์์
์ ํตํด ๋ฌธ์ ์์ด ์ฒ๋ฆฌํ ์ ์์ง๋ง, ์ ํ์ฌํญ์ด ์กด์ฌํ๋ค.
- ์ฒ๋ฆฌํด์ผํ ๊ฒ์๊ธ์ ๊ฐ์๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ
- 1์๊ฐ ๋ง์ ์ฒ๋ฆฌํ๊ธฐ์๋ ์๊ฐ์ด ์ด๋ฐํ ์ ์๋ค.
- ๋ง์ฝ ์ค์ 1์์ ์
๋ฐ์ดํธ ๋๋๊ฒ ์๋๋ผ,
- ์ค์ 00์ 10๋ถ์?, ์ค์ 00์์ ์ฆ์ ์ ๋ฐ์ดํธํด์ผํ๋ค๋ฉด?
- ๋ง์ฝ ์ค์ 1์์ ์
๋ฐ์ดํธ ๋๋๊ฒ ์๋๋ผ,
- ๋น ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ณ๋ ฌ ์์คํ
์ ๊ตฌ์ถํ ์ ์๋ค.
- ํ์ง๋ง ์ค๊ณ์ ๊ตฌํ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ
- ๋ณ๋ ฌ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฅ๋น์ ๋ฆฌ์์ค๋ ๊ณ ๋ คํด์ผ ํจ
- 1์๊ฐ ๋ง์ ์ฒ๋ฆฌํ๊ธฐ์๋ ์๊ฐ์ด ์ด๋ฐํ ์ ์๋ค.
- ์ฒ๋ฆฌํด์ผํ ๊ฒ์๊ธ์ ๊ฐ์๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ
- ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ค๊ณ ํ๋๋ผ๋
- ์ธ๊ธฐ๊ธ ์ ์ ์๋ ๊ฒ์๊ธ, ์ข์์ ์, ์กฐํ์, ๋๊ธ์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค.
- ์ด๋ฌํ ๋ฐ์ดํฐ๋ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๋ ๋ง์ดํฌ๋ก์๋น์ค์์ ๊ฐ์ง๊ณ ์๋ค.
- 1์๊ฐ ๋ง์ ๊ฐ ์๋น์ค์ ๋ฌด์ํ ๋ง์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค.
- ์์ ๋ถํฐ 1์๊ฐ๋์ ์ธ๊ธฐ๊ธ ์๋น์ค์ ์ํด ํ ์๋น์ค์ด ๋ถํ๊ฐ ํญ๋ฐ์ ์ผ๋ก ์์นํ ์ ์๋ค.
- ํ ์๋น์ค์ ์ํฅ์ด ๊ฐ ์ ์๋ค.
- ์ธ๊ธฐ๊ธ ์ ์ ์๋ ๊ฒ์๊ธ, ์ข์์ ์, ์กฐํ์, ๋๊ธ์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค.
- ์๊ฐ์ ์ธ ์ ์ฝ, ๊ฐ๋ฐ ๋ณต์ก์ฑ, ๋ ธ์ถ ์๊ฐ ์ ์ฑ ๋ฑ์ ๋ฐ๋ผ์ ์ฒ๋ฆฌ์๋ ํ๊ณ๊ฐ ์๊ธธ ์ ์๋ค.
- Stream Processing(์คํธ๋ฆผ ์ฒ๋ฆฌ) ์ ๋ํด ์์๋ณด์
- ์คํธ๋ฆผ(Stream)
- ์ฐ์์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ
- ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ๋ ๋ก๊ทธ, ์ผ์ ๊ฐ์ง, ์ฃผ์ ๊ฑฐ๋ ๋ฐ์ดํฐ ๋ฑ๊ณผ ๊ฐ์ด ์ฐ์์ ์ผ๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ
- ์คํธ๋ฆผ ์ฒ๋ฆฌ(Stream Processing)
- ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๋ ๊ฒ
- ์ฐ์์ ์ผ๋ก ๋ค์ด์ค๋ ์ค์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- ์ธ๊ธฐ๊ธ ์ ์ ์ ์ํด ์คํธ๋ฆผ ์ฒ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถ
- ๊ฒ์๊ธ ์์ฑ/์์ /์ญ์ ์ด๋ฒคํธ
- ๋๊ธ ์์ฑ/์ญ์ ์ด๋ฒคํธ
- ์ข์์ ์์ฑ/์ญ์ ์ด๋ฒคํธ
- ์กฐํ์ ์ง๊ณ ์ด๋ฒคํธ
- ์ ์ด๋ฒคํธ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ฐ์์ ์ฒ๋ฆฌํ๋ฉด?
- ๋ณ๋์ ๋ฐฐ์น ์์คํ ์ ๊ตฌ์ถํ์ง ์๊ณ ๋, ์ค์๊ฐ์ผ๋ก ์ธ๊ธฐ๊ธ์ ํ์ํ ์ ์๋ฅผ ๊ณ์ฐํ์ฌ ์์ 10๊ฑด์ ๋ฏธ๋ฆฌ ์์ฑํด ๋ ์ ์์ ๊ฒ
์ต์ข ์ค๊ณ
- ์ธ๊ธฐ๊ธ ์ ์ ์ ํ์ํ ์ด๋ฒคํธ๋ฅผ ์คํธ๋ฆผ์ผ๋ก ๋ฐ๋๋ค.
- ์ค์๊ฐ์ผ๋ก ๊ฐ ๊ฒ์๊ธ์ ์ ์๋ฅผ ๊ณ์ฐํ๋ค.
- ์ค์๊ฐ์ผ๋ก ์์ 10๊ฑด์ ์ธ๊ธฐ๊ธ ๋ชฉ๋ก์ ๋ง๋ ๋ค.
- Client๋ ์ธ๊ธฐ๊ธ ๋ชฉ๋ก์ ์กฐํํ๋ค.

- ์คํธ๋ฆผ ๋ฐ์ดํฐ ์์ค๋ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์์ฐํ๋ค. ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ ์ค์๊ฐ์ผ๋ก, ์ฐ์์ ์ผ๋ก ์์ฐ๋๋ค.
- ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ธฐ๋ก ์ ๋ฌ๋๋ค. ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ธฐ๋ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋ฐ์ดํฐ ๊ฐ๊ณต ๋๋ ํํฐ๋ง ๋๋ ์ง๊ณ ๋ฑ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
- ์์ ์ ์ํํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ธฐ๋, ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ค. ์ด๋ฌํ ๊ฒฐ๊ณผ๋ Client์ ์ํด ์ฌ์ฉ๋ ์ ์๋ค.

- ์ฌ๊ธฐ์ ์คํธ๋ฆผ ๋ฐ์ดํฐ ์์ค๋ ๊ฒ์๊ธ/๋๊ธ/์ข์์/์กฐํ์ ์๋น์ค๊ฐ ๋ ์ ์๊ณ , ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด์ ์ค์๊ฐ์ผ๋ก ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์์ฐํ๋ค.
- ์คํธ๋ฆผ ๋ฐ์ดํฐ ์์ค๋ ์ ์ด๋ฒคํธ๋ฅผ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ก ์์ฐํ๋ ๊ฒ์ด๋ค. ์ด๋, ์กฐํ์ ์ด๋ฒคํธ๋ ํธ๋ํฝ์ด ๋ง์ ์ ์์ผ๋ฏ๋ก ๋ฐฑ์ ์์ (100๊ฐ ๋จ์)์๋ง ์์ฐํด๋ณธ๋ค. ํธ๋ํฝ์ด ๋ง์ ์กฐํ์๊น์ง ๋ฐ๋์ ์ ํํ๊ฒ ์ ์๋ฅผ ๊ณ์ฐํ ํ์๋ ์๋ค๋ ๊ด์ ์ด๋ค.!

- ์ธ๊ธฐ๊ธ ์๋น์ค๋ ์ด๋ฌํ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ ์ธ๊ธฐ๊ธ ์ ์ ์์ ์ ์ฌ์ฉํ๋ค. ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ๋๋ง๋ค ์ ์๋ฅผ ๊ณ์ฐํ๊ณ , ์์ 10๊ฑด์ ์ธ๊ธฐ๊ธ ๋ชฉ๋ก์ ์์ฑํด ๋๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ์ ์ ๋ ์ธ๊ธฐ๊ธ ๋ฐ์ดํฐ(์ฒ๋ฆฌ ๊ฒฐ๊ณผ)๋ 7์ผ๊ฐ ๋ด์ญ๋ง ๊ด๋ฆฌํ๋ฉด ๋๋ฏ๋ก, ํ๋ฐ์ฑ ๋ฐ์ดํฐ์ด๋ค. ๋, ์ผ ๋จ์ ์์ 10๊ฑด์ ๊ฒ์๊ธ ๋ฐ์ดํฐ๋ง ํ์ํ๋ฏ๋ก, ์ปค๋ค๋ ์ ์ฅ๊ณต๊ฐ์ด ํ์ํ์ง ์๋ค.
- ์ฌ๊ธฐ์ Redis๋ฅผ ์ฌ์ฉํ๋ค. ๋น ๋ฅธ ์ ์ฅ์๋ก์์ ์ด์ ๋ ์๊ณ , TTL๋ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ง์ ๋ ๊ธฐ๊ฐ์ด ์ง๋๋ฉด ์๋ ์ญ์ ๊ฐ๋ฅ
- ๋, ๋ค์ํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋ค. Sorted Set(=zset) ์๋ฃ ๊ตฌ์กฐ๋, ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ ฌ๋ ์งํฉ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
- ์์ ์ ์ 10๊ฑด์ ๊ฒ์๊ธ์ ์ ๋ ฌ ์ํ๋ก ์ ์งํ ์ ์๋ค.
- ๊ฒ์๊ธ/๋๊ธ/์ข์์/์กฐํ์ ์๋น์ค๋, ์ค์๊ฐ ์ด๋ฒคํธ๋ฅผ ์ธ๊ธฐ๊ธ ์๋น์ค๋ก ์ด๋ป๊ฒ ์ ๋ฌ ๊ฐ๋ฅํ๊ฐ?
- ์ธ๊ธฐ๊ธ ์๋น์ค๋ ์์ ์ ๋ฆฌ์์ค์ ์๋ง๊ฒ ์ผ๊ธฐ๊ธ ์ ์ ์์ ์ ์ ์ฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ด์ผ ํ๋ค.
- ์ด๋ฌํ ์ด๋ฒคํธ ์ ๋ฌ ๋ฐ ์ฒ๋ฆฌ ๊ณผ์ ์ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ๋ํด์ ์์ ํ๊ณ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ ๊ฒ์ด๋ค.
- API vs Message Broker ๋ ๊ฐ์ง ๋ฐฉ์์ ๋ํด์ ์์๋ณด์
API

- ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ์๊ธฐ๋ฉด, ์ธ๊ธฐ๊ธ ์๋น์ค๋ก API๋ฅผ ์ด์ฉํ ์ด๋ฒคํธ ์ ์ก
- ๊ฐ๋จํ๊ฒ ๊ตฌํ
- ํ ์๋น์ค์ ์ง์ ์ ์์กด, ์์คํ ๊ฐ ๊ฒฐํฉ๋ ์ฆ๊ฐ
- ์๋ฒ ๋ถํ ์ ํ
- ์ธ๊ธฐ๊ธ : ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก push ๋ฐ์
- ๊ฒ์๊ธ/์ข์์/์กฐํ์/๋๊ธ :๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก push
- ์ฅ์ ์ ํ, ์ ์ค๋ฑ์ ์ํ ๋์
Message Broker (โ ์ฑํ)

- ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ์๊ธฐ๋ฉด, ๋ฉ์์ง ๋ธ๋ก์ปค๋ ์ด๋ฒคํธ ์ ์ก, ์ธ๊ธฐ๊ธ ์๋น์ค์์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์์ ์ฒ๋ฆฌ
- ๋ณต์กํ ๊ตฌํ : ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์์คํ ์ด ํ์ํ ์ ์์
- ํ ์๋น์ค์ ๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ์ด์ฉํ ๊ฐ์ ์ ์์กด์ฑ, ์์คํ ๊ฐ ๊ฒฐํฉ๋ ๊ฐ์
- ์๋ฒ ๋ถํ ์ ํ
- ์ธ๊ธฐ๊ธ : ๋ฉ์์ง ๋ธ๋ก์ปค์์ ์ ์ ํ๊ฒ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ๋ฅ
- ๊ฒ์๊ธ/์ข์์/์กฐํ์/๋๊ธ: ๋ฉ์์ง ๋ธ๋ก์ปค๋ก ์ด๋ฒคํธ ์ ์ก๋ง ํ๋ฉด ๋จ
- ์ฅ์ ์ ํ, ์ ์ค ๋ฑ์ ์ํ ๋ฎ์
- ๊ตฌํ์ ๋ณต์กํ๋, ๋๊ท๋ชจ ์์คํ ์์ ๋ง์ ์ฅ์ ์ ๊ฐ์ง
- ํ๋ฒ ๊ตฌ์ถํด ๋๋ฉด, ๋์ ํ์ฉ๋
- Consumer Group๋ง ๋ฌ๋ฆฌํ์ฌ ๊ฐ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ๊ฒ์๊ธ ์กฐํ ์ต์ ํ์๋ ์ฌ์ฉํ ์์

Kafka๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ ์ ์ก์ ์ค๊ฐ
- ๊ฒ์๊ธ/๋๊ธ/์ข์์/์กฐํ์ ์๋น์ค :
Producer
- ์ธ๊ธฐ๊ธ ์๋น์ค :
Consumer
์ด๋ ๊ฒ ์ด๋ฒคํธ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ์ ํต์ ํ๋ ์ํคํ
์ฒ๋ฅผ Event Driven Architecture
๋ผ๊ณ ํ๋ค.


์ธ๊ธฐ๊ธ ์๋น์ค๊ฐ ์ธ๊ธฐ๊ธ ๋ฐ์ดํฐ ์์ฑ ๊ณผ์
- ์ค๋ ๋ ์ง 2025๋
10์ 1์ผ
- 10์ 1์ผ์ ์์ฑ๋ ๊ฒ์๊ธ์, 2์ผ ์ค์ 1์๋ถํฐ ์ ๊ณตํด์ผ ํ ์ธ๊ธฐ๊ธ์ด ๋๋ค.
- 1์ผ 00์ 00๋ถ ~ 2์ผ 00์ 00๋ถ ์ฌ์ด์ ์์ฑ๋ ๊ฒ์๊ธ์ ๋ํ ์ด๋ฒคํธ๋ ๊ฐ ๊ฒ์๊ธ์ ์ ์๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ณ์ฐํ์ฌ Redis(key=20251001)์ ์ฝ์
- key=20251001์ Sorted Set(zset) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ฐ ๊ฒ์๊ธ์ ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ ฌ๋ ์ํ๋ฅผ ๊ฐ์ง๋ ๊ฒ(data = ๊ฒ์๊ธ ID, score=๊ฒ์๊ธ ์ ์)
- ์ด๋ฅผ ์ด์ฉํ์ฌ Sorted Set์ ์์ 10๊ฑด์ ๋ฐ์ดํฐ๋ง ์ ์ง
- ์ค๋ ๋ ์ง 2025๋
10์ 2์ผ
- ์ด์ ๋ถํฐ ์์ฑ๋๋ ๊ฒ์๊ธ์ key=20251002์ Sorted Set์ ์ฝ์ ๋๋ค.
- key=20251001์ ์์ฑ, ๋์ด์ ๊ฑด๋ค์ผ ํ์ ์์
- ์ค์ 1์๊ฐ ๋๋ฉด, ์ธ๊ธฐ๊ธ ์ ๊ณตํ๋ค. ์ด์ ๋ฏธ๋ฆฌ ์ค์๊ฐ์ผ๋ก ๋ง๋ค๊ณ ์์๊ธฐ์ ๋ฐฐ์น ์์ ์ ๋ถํ์, Client๊ฐ ์กฐํํด์ผํ๋ ๋ฐ์ดํฐ๋ง ์ง์
- ๋ง์ฝ ์ ์ ๊ณ์ฐ์ ๋๊ธ์ ์ ๋ํฌ ์์ฑ์ ์๊ฐ ํ์ํ๋ค๋ฉด?
- ์ด๋ฌํ ๋ฐ์ดํฐ๋ ๋๊ธ ์๋น์ค์์ ์ ๊ณตํ์ง๊ณ ๋ณด์ ํ๊ณ ์์ง๋ ์์
- ๋๊ธ ์๋น์ค๊ฐ ์ธ๊ธฐ๊ธ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฐํ๊ณ ๊ด๋ฆฌํ ์ฑ ์์ ์์, ์ฆ ์ด๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์์ฐํ๊ณ ๊ด๋ฆฌํ ์ฑ ์์ ์ธ๊ธฐ๊ธ
- ์ธ๊ธฐ๊ธ ์๋น์ค๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฒต์ ์ผ๋ก ๋ณด๊ดํ๋ค๋ฉด?
- ์ด๋ฒคํธ๋ก ์ ๋ฌ๋ฐ์ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ์์ฒด์ ์ผ๋ก ๊ฐ๊ณต ๋ฐ ์์ฐ ๊ฐ๋ฅ
- ๋ค๋ฅธ ์๋น์ค์ ์์กดํ์ง ์๊ณ , ๋ ๋ฆฝ์ ์ผ๋ก ๊ธฐ๋ฅ ์ ๊ณต ๊ฐ๋ฅ
- ๋ฐ๋ผ์ ์ ์ ๊ณ์ฐ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ฐ ์๋น์ค์ ๋ค์ ์์ฒญํ์ง ์๊ณ , ์์ฒด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋๋ก ํ๋ค.
- ์ด๋ฌํ ๋ฐ์ดํฐ๋ ํ๋ฃจ๋ง ๋ณด๊ดํ๋ฉด ๋์ง๋ง, ์ฉ๋์ด ํฌ์ง ์์ผ๋ฏ๋ก ์ ๊ทผ์ด ๋น ๋ฅด๊ณ ํ๋ฐ์ฑ์ ๊ฐ์ง๋ Redis๋ฅผ ์ฌ์ฉ

Producer
- ๊ฒ์๊ธ/๋๊ธ/์ข์์/์กฐํ์ ์๋น์ค๋ Kafka๋ก ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ producer ์ญํ
- Producer๋ ์ ์๋ ์ด๋ฒคํธ๋ฅผ Kafka๋ก ์ ์ ๋ฌํ๋ฉด ๋จ
Transactional Messaging
- ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ, ์์์ฑ ๊ด๋ฆฌ๋ฅผ ์ํด ํธ๋์ญ์
๊ด๋ฆฌ๋ ์ค์(
๋ชจ๋ ์คํ๋๊ฑฐ๋, ์คํด๋์ง ์๊ฑฐ๋
)

- Producer๋ ๋น์ง๋์ค ๋ก์ง ์ํ
- Kafka๋ก ์ด๋ฒคํธ ๋ฐ์ดํฐ ์ ์ก
- Consumer๋ Kafka์์ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ฒ๋ฆฌ
- Producer์์ ์ ์กํ ์ด๋ฒคํธ๊ฐ Consumer์์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์๋, ๋คํธ์ํฌ๋ฅผ ํตํ ๋ณต์กํ ์ ์ก ๊ณผ์ ์ด ํ์ํ๋ค.
- ๋คํธ์ํฌ๋ ์ธ์ ๋ ์๋จ๋ ์ ์๊ณ , Producer/Consumer/Kafka์์๋ ์ฅ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ์ด๋ฌํ ๊ณผ์ ์์ ๋ฐ์ดํฐ๋ ์ ์ค ์์ด ์ฒ๋ฆฌ๋ ๊น?
Kafka์ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ์ ๋ฌ๋์๋ค๋ฉด, ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ณต๊ตฌ ๊ฐ๋ฅํ๋ค.
Consumer๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ ์์ ์ผ๋ก ๋ชจ๋ ์๋ฃํ ์ดํ์๋ offset์ commitํ๋ฉด, ๋ฐ์ดํฐ ์ ์ค์์ด ์ฒ๋ฆฌ ๊ฐ๋ฅ

Producer๊ฐ Kafka์ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ๊ณผ์ ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด?
- Producer๋ Kafka๋ก์ ๋ฐ์ดํฐ ์ ์ก๊ณผ ๋ฌด๊ดํ๊ฒ ์ ์ ๋์ํด์ผํจ
- ๋ฐ์ดํฐ ์ ์ก์ด ์คํจํ๋คํด์, Producer์ ์ฅ์ ๊ฐ ์ ํ๋๋ฉด ์๋จ
- ๊ฒ์๊ธ์ ์ ์ ์์ฑ๋์ด๋, ์ด๋ฒคํธ๋ฅผ Kafka์ ์ ๋ฌํ ์ ์๋ ์ํฉ
- ์ ๋ขฐํ ์ ์๋ ์์คํ (Kafka)๋ก ์์ง ๋ฐ์ดํฐ๊ฐ ์ ์ก๋์ง ๋ชปํ๊ธฐ ๋๋ฌธ์, ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ ์ ์ค
- ์ด๋ก์ธํด ๊ฐ ์๋น์ค๋ง๋ค ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๊นจ์ง
- Producer์์ ๊ฒ์๊ธ์ด ์์ฑ๋์์ง๋ง, Consumer๋ ์ด ์ฌ์ค์ ์ ๋ฌ๋ฐ์ง ๋ชปํ๊ฒ
- ๊ทธ๋์, ๋น์ฆ๋์ค ๋ก์ง ์ํ๊ณผ ์ด๋ฒคํธ ์ ์ก์ด ํ๋์ ํธ๋์ญ์
์ผ๋ก ์ฒ๋ฆฌ๋์ด์ผํจ
โ ๏ธ๋น์ฆ๋์ค ๋ก์ง ์ํ๊ณผ ์ด๋ฒคํธ ์ ์ก์ด ๋ชจ๋ ์ผ์ด๋๊ฑฐ๋, ๋ชจ๋ ์ผ์ด๋์ง ์๊ฑฐ๋
- ์ด๋ฌํ ๋ณด์ฅ์ ๊ผญ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋ ํ์๋ ์์
- ๋น์ฆ๋์ค ๋ก์ง์ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋๋ผ๋, ์ด๋ฒคํธ ์ ์ก์ ์ฅ์ ๊ฐ ํด์๋ ์ดํ ๋ค๋ฆ๊ฒ ์ฒ๋ฆฌ๋์ด๋ ์ถฉ๋ถํ ์ ์์
- ์ต์ข ์ ์ผ๋ก ์ผ๊ด์ฑ์ด ์ ์ง๋ ์๋ ์๋ ๊ฒ(Eventually Consistency)
- Transaction start
- ๋น์ฆ๋์ค ๋ก์ง ์ํ
- commit or rollback
- ์ด๋ฌํ ํธ๋์ญ์ ์ ์คํ๋ง์ @Transactional์ ์ด์ฉํ๋ฉด ์์ฝ๊ฒ ์ ์ฉ ๊ฐ๋ฅ
- ์ฌ๊ธฐ์ ๋จ์ํ๊ฒ ์ด๋ฒคํธ ์ ์ก ์ฝ๋๋ฅผ ํฌํจํ๋ฉฐ?
- Transaction start
- ๋น์ฆ๋์ค ๋ก์ง ์ํ
- publishEvent()
- commit or rollback
- ์ง๊ธ๊น์ง ์ฌ์ฉํ๋ ํธ๋์ญ์ ์ MySQL์ ๋จ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค(1๊ฐ ์ค๋)์ ๋ํ ํธ๋์ญ์
- MySQL์ ์ํ ๋ณ๊ฒฝ๊ณผ Kafka๋ก์ ๋ฐ์ดํฐ ์ ์ก์, MySQL์ ํธ๋์ญ์ ๊ธฐ๋ฅ์ ์ด์ฉํด์ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ ์ ์์
- ์๋ก ๋ค๋ฅธ ์์คํ ์ด๊ธฐ์
- ๋ง์ฝ ์ด๋ฒคํธ ์ ์ก์์
์ด Kafka ์ฅ์ ๋ก ์ธํด ๋ธ๋กํน ๋๋ค๋ฉด??
- Kafka์ ์ฅ์ ๊ฐ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ MySQL๋ก ์ ํ๋ ์ ์์
- ๋๋, ํธ๋์ญ์ commit์ด ์คํจํ๋๋ฐ, ์ด๋ฒคํธ ์ ์ก์ ์ด๋ฏธ ์๋ฃ๋์์ ์ ๋...
- Transaction start
- ๋น์ฆ๋์ค ๋ก์ง ์ํ
- publishEventAsync()
- commit or rollback
- ๋ง์ฝ 3๋ฒ์ด ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋๋ค๋ฉด?
- ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋ ์ด๋ฒคํธ ์ ์ก์ด ์คํจํ๋คํด์, MySQL์ ํธ๋์ญ์ ์ด ์๋์ผ๋ก ๋กค๋ฐฑ๋์ง ์๋๋ค.
- ๋กค๋ฐฑ์ ์ํ ๋ณด์ ํธ๋์ญ์ ์ ์ง์ ์ํํ ์ ์์ง๋ง, ๋๋ฝ๋ ์ ๋ ์๋ค.
- 2๊ฐ์ ๋ค๋ฅธ ์์คํ
์ ์ด๋ป๊ฒ ๋จ์ผํ ํธ๋์ญ์
์ผ๋ก ๋ฌถ์ ์ ์์๊น?
- ๋ถ์ฐ ์์คํ ๊ฐ์ ํธ๋์ญ์ ๊ด๋ฆฌ๊ฐ ํ์
- Distributed Transaction : ๋ถ์ฐ ์์คํ ์์ํธ๋์ญ์ ์ ๋ณด์ฅํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- Transactional Messaging : ๋ฉ์์ง ์ ์ก๊ณผ ํ ์์คํ ์์ ๊ฐ์ ๋ถ์ฐ ํธ๋์ญ์ ์ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ
Transactional Messaging
1. Two Phase Commit

- ๋ถ์ฐ ์์คํ
์์ ๋ชจ๋ ์์คํ
์ด ํ๋์ ํธ๋์ญ์
์ ์ํํ ๋,
- ๋ชจ๋ ์์คํ ์ด ์ฑ๊ณต : ํธ๋์ญ์ commit
- ํ๋๋ผ๋ ์คํจ : ํธ๋์ญ์ rollback
- ๋ ๋จ๊ณ๋ก ๋๋์ด ์ํ๋จ
Prepare phase(์ค๋น ๋จ๊ณ)
Commit phase(์ปค๋ฐ ๋จ๊ณ)
1-1. Prepare Phase
- Coordinator๋ ๊ฐ ์ฐธ์ฌ์์๊ฒ ํธ๋์ญ์ ์ ์ปค๋ฐํ ์ค๋น๊ฐ ๋์๋์ง ํ์ธ
- ๊ฐ ์ฐธ์ฌ์๋ ์๋ต
1-2. Commit Phase
- ๋ชจ๋ ์ฐธ์ฌ์๊ฐ ์ค๋น ์๋ฃ ์๋ต์ ๋ณด๋ด๋ฉด, Coordinator๋ ๋ชจ๋ ์ฐธ์ฌ์์๊ฒ ํธ๋์ญ์ ์ปค๋ฐ ์์ฒญ
- ๋ชจ๋ ์ฐธ์ฌ์๋ ํธ๋์ญ์ ์ ์ปค๋ฐํจ
- ๋ชจ๋ ์ฐธ์ฌ์์ ์๋ต์ ๊ธฐ๋ค๋ ค์ผ ํ๋ฏ๋ก, ์ง์ฐ์ด ๊ธธ์ด์ง ์ ์๋ค.
- Coordinator ๋๋ ์ฐธ์ฌ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด,
- ์ฐธ์ฌ์๋ค์ ํ์ฌ ์ํ๋ฅผ ๋ชจ๋ฅธ์ฑ ๋๊ธฐํด์ผํจ
- ํธ๋์ญ์ ๋ณต๊ตฌ ์ฒ๋ฆฌ๊ฐ ๋ณต์กํด์ง ์ ์์
Transactional Outbox
- ์ด๋ฒคํธ ์ ์ก์์ ์ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ ํฌํจ์ํฌ ์ ์๋ค.
- ํ์ง๋ง ์ด๋ฒคํธ ์ ์ก ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
์ ํฌํจํ์ฌ ๊ธฐ๋ก ๊ฐ๋ฅ
- ํธ๋์ญ์ ์ ์ง์ํ๋ DB์ Outbox ํ ์ด๋ธ์ ์์ฑํ๊ณ , ์๋น์ค ๋ก์ง ์ํ๊ณผ Outbox ํ ์ด๋ธ ์ด๋ฒคํธ ๋ฉ์์ง ๊ธฐ๋ก์ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ๋๋ค.
- ๋น์ฆ๋์ค ๋ก์ง ์ํ ๋ฐ Outbox ํ
์ด๋ธ ์ด๋ฒคํธ ๊ธฐ๋ก
- Transaction start
- ๋น์ฆ๋์ค ๋ก์ง ์ํ
- Outbox ํ ์ด๋ธ์ ์ ์กํ ์ด๋ฒคํธ ๋ฐ์ดํฐ ๊ธฐ๋ก
- commit or rollback
- Outbox ํ
์ด๋ธ์ ์ด์ฉํ ์ด๋ฒคํธ ์ ์ก ์ฒ๋ฆฌ
- Outbox ํ ์ด๋ธ ๋ฏธ์ ์ก ์ด๋ฒคํธ ์กฐํ
- ์ด๋ฒคํธ ์ ์ก
- Outbox ํ ์ด๋ธ ์ ์ก ์๋ฃ ์ฒ๋ฆฌ

- Client๋ ๋ฐ์ดํฐ ์์ฑ/์์ /์ญ์ ๋ฑ์ ์์ฒญ์ ๋ฐ์
- Client ์์ฒญ์ ์ํด, ๋จ์ผ ํธ๋์ญ์ ๋ด์์ Data Table์ ์ํ ๋ณ๊ฒฝ๊ณผ Outbox Table ์ ์ด๋ฒคํธ ์ฝ์ ์ด ์ฒ๋ฆฌ
- Message Relay๋ Outbox Table์์ ๋ฏธ์ ์ก ์ด๋ฒคํธ๋ฅผ ์กฐํ
Message Relay : Message Broker๋ก ์ด๋ฒคํธ๋ฅผ ์ ์กํ๋ ์ญํ
4. Message Relay๋ ์ด๋ฒคํธ๋ฅผ Message Broker๋ก ์ ์ก
5. Message Relay๋ ์ด๋ฒคํธ ์ ์ก์ด ์ ์์ ์ผ๋ก ์๋ฃ๋์์ผ๋ฉด, Outbox Table์ ์ด๋ฒคํธ๋ฅผ ์๋ฃ ์ํ๋ก ๋ณ๊ฒฝ
Transaction Log Tailing Pattern
- Message Broker๋ก ์ ์กํ๋ ์์ ์ ์ํด ํ์ฉ
- DB์ ํธ๋์ญ์
๋ก๊ทธ๋ฅผ ์ถ์ ๋ฐ ๋ถ์ํ๋ ๋ฐฉ๋ฒ
- DB๋ ๊ฐ ํธ๋์ญ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ก๊ทธ๋ก ๊ธฐ๋ก
- MySQL binlog, PostgreSQL WAL, SQL Server Transaction Log ๋ฑ
- ์ด๋ฌํ ๋ก๊ทธ๋ฅผ ์ฝ์ด์ ์ด๋ฒคํธ๋ฅผ ์ ์กํด๋ณผ์ ์๋ค.
- CDC(Change Data Capture) ๊ธฐ์ ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ค๋ฅธ ์์คํ ์ ์ ์ก
- CDC :
๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๋ ๊ธฐ์

- DB์ ์ํด์ ํธ๋์ญ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ก๊ทธ๋ก ๊ธฐ๋ก
- Transaction Log Miner๋ Transaction Log ์กฐํ
- Transaction Log Miner๋ Message Broker๋ก ์ด๋ฒคํธ ์ ์ก
- Data Table์ ๋ณ๊ฒฝ ์ฌํญ๋ง ์ถ์ ํด๋ ์ถฉ๋ถํ๋ค๋ฉด, Outbox Table์ ์ญ์ ๊ฐ๋ฅ
Transactional Outbox ์ค๊ณ

- Shard_key์ ์กด์ฌ?
- ์ค๋ฉ์ด ๊ณ ๋ ค๋ ๋ถ์ฐ DB ์ฌ์ฉ์ค
- ํธ๋์ญ์ ์ ๊ฐ ์ฌ๋์์ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ๋น ๋ฅด๊ณ ์์ ํ๊ฒ ์ํ๋ ์ ์์
- ์ฌ๋ฌ Shard ๊ฐ์ ๋ถ์ฐ ํธ๋์ญ์ ์ ์ง์ํ๋ DB๋ ์์ผ๋, ์ฑ๋ฅ์ด ๋ค์ ๋จ์ด์ง
- Outbox Table์ ์ด๋ฒคํธ ๋ฐ์ดํฐ ๊ธฐ๋ก๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ์ํ ์ํ ๋ณ๊ฒฝ์ด ๋์ผํ Shard์์ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์๋๋ก ํจ

- ๊ฒ์๊ธ ์๋น์ค๋ก ๊ฒ์๊ธ ์์ฑ/์์ /์ญ์ API๊ฐ ํธ์ถ
- ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ฉด์, Article Table ์ํ ๋ณ๊ฒฝ๊ณผ Outbox Table ์ด๋ฒคํธ ๊ธฐ๋ก์ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌ
- Message Relay๋ Outbox Table์์ ๋ฏธ์ ์ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก polling ํ์ฌ ์กฐํํ๊ณ , Kafka๋ก ์ ์ก
๊ฐ๊ฒฉ์ด ๋๋ฌด ์งง์ผ๋ฉด DB ๋ถํโฌ๏ธ, ๊ฐ๊ฒฉ์ด ๋๋ฌด ๊ธธ๋ฉด ์ด๋ฒคํธ ์ ์ก์ ์ง์ฐ ๋ฐ์
10์ด ๊ฐ๊ฒฉ์ผ๋ก polling ํ๋๋ผ๋, ์ฌ์ ํ ์ง์ฐ์ด ํผ
๊ฒ์๊ธ ์๋น์ค์์ ํธ๋์ญ์ ์ด commit๋๋ฉด, Message Relay๋ก ์ด๋ฒคํธ๋ฅผ ์ฆ์ ์ ๋ฌ. Message Relay๋ ์ ๋ฌ๋ฐ์ ์ด๋ฒคํธ๋ฅผ ๋น๋๊ธฐ๋ก Kafka ์ ์ก ๊ฐ๋ฅ - Message Relay๋ ์ ์ก์ด ์คํจํ ์ด๋ฒคํธ์ ๋ํด์๋ง Outbox Table์์ polling. ๊ทธ๋ ์ง ์์ผ๋ฉด, Message Relay๋ก์ ์ด๋ฒคํธ ์ ๋ฌ๋ ์ ์๋ ์ง์ ์ด 2๊ฐ์ด๋ฏ๋ก ์ค๋ณต ์ฒ๋ฆฌ ๋ ์ ์๋ค.
- ์คํจํ ์ด๋ฒคํธ๋ ์ฅ์ ์ํฉ์์๋ง ๋ฐ์ํ ๊ฒ์ด๊ณ , ์ ์ ์ํฉ์์๋ 10์ด ์ ๋๋ฉด ์ด๋ฒคํธ ์ ์กํ ์๊ฐ์ผ๋ก ์ถฉ๋ถํ์ ๊ฒ
- ์์ฑ๋์ง 10์ด๊ฐ ์ง๋ ์ด๋ฒคํธ๋ง polling
- ๋ฌผ๋ก , ์ฌ์ ํ ์ด๋ฒคํธ๋ ์ค๋ณต ์ฒ๋ฆฌ๋ ์ ์์ผ๋ฏ๋ก Consumer ์ธก์์ ๋ฉฑ๋ฑ์ฑ์ ๊ณ ๋ คํ ๊ฐ๋ฐ์ ํ์
- ์ ์ก์๋ฃ๋์๋ค๋ฉด, Outbox Table์์ ์ญ์
- ์ด๋ฒคํธ๋ ๋น์ฆ๋์ค ๊ด์ ์์ ์ ์๋ฏธํ ์ ์๊ณ , ์ดํ์๋ ์ถ์ ๋๋ ๋ฆฌํ๋ ์ด๊ฐ ํ์ํ ์ํฉ๋ ์์(Event Sourcing)
- ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์๋ ์ด๋ฒคํธ ์ ์ก ์ฉ๋๋ก๋ง ์ฌ์ฉํ๋ฏ๋ก ์ญ์
- ๊ฒ์๊ธ ์๋น์ค๊ฐ ์ฌ๋ฌ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋์์ ์ฒ๋ฆฌ๋ ์๋ ์๊ณ , DB ์ค๋ฉ์ด ๊ณ ๋ ค๋ ๋ถ์ฐ ์์คํ
์ด๋ค. Message Relay๊ฐ Outbox Table์ ๋ฏธ์ ์ก ์ด๋ฒคํธ๋ฅผ polling ํ๋ ์์
์ ์ด๋ป๊ฒ?
- ๋ฏธ์ ์ก ์ด๋ฒคํธ๋ฅผ polling ํ๋ ๊ฒ์ ํน์ ํ ์ค๋ ํค๊ฐ ์์ผ๋ฏ๋ก, ๋ชจ๋ ์ค๋์์ ์ง์ polling
- ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋์์ polling ํ๋ฉด, ์ค๋ณต ์ฒ๋ฆฌ๋ ์ฒ๋ฆฌ์ ์ง์ฐ์ด ๋ฐ์ํ ์ ์๋ค.
- ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฒ๋ฆฌํ ์ค๋๋ฅผ ์ค๋ณต ์์ด ์ ์ ํ ๋ถ์ฐํด์ผํจ
- ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋์ ์ผ๋ถ๋ง ํ ๋น๋ฐ์์ ์ฒ๋ฆฌํ๋๋ก ํด๋ณด์. ์ด๋ฌํ ํ ๋น์ Message Relay๋ด์ Coordinator๊ฐ ์ฒ๋ฆฌ
- Coordinator๋ ์์ ์ ์คํํ ์ ํ๋ฆฌ์ผ์์ ์ ์๋ณ์์ ํ์ฌ ์๊ฐ์ผ๋ก, ์ค์ ์ ์ฅ์์ 3์ด ๊ฐ๊ฒฉ์ผ๋ก ping. ์ด๋ฅผ ํตํด Coordinator๋ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ๋ชฉ๋ก์ ํ์ ํ๊ณ , ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋๋ฅผ ์ ์ ํ ๋ถ์ฐ
- ์ค์ ์ ์ฅ์๋ ๋ง์ง๋ง ping์ ๋ฐ์์ง 9์ด๊ฐ ์ง๋ซ์ผ๋ฉด, ์ ํ๋ฆฌ์ผ์ด์
์ด ์ข
๋ฃ๋์๋ค๊ณ ํ๋จํ๊ณ ๋ชฉ๋ก์์ ์ ๊ณ
- ์ค์ ์ ์ฅ์๋ Redis์ Sorted Set์ ์ด์ฉ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ณ์์ ๋ง์ง๋ง ping ์๊ฐ์ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ฅ ๊ฐ๋ฅ
'์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Redis ZSet(Sorted Set) (0) | 2025.03.16 |
---|---|
Kafka ? ์นดํ์นด๊ฐ ๋ญ๋ฐ.... (0) | 2025.03.15 |
์คํ๋ง ๋๊ท๋ชจ์์คํ ์ค๊ณ (2) (0) | 2025.01.11 |
์คํ๋ง ๋๊ท๋ชจ์์คํ ์ค๊ณ ๊ฐ์ (1) (0) | 2025.01.11 |
SimpleJdbcInsert ์ฌ์ฉ ์, ์๋ ์ปฌ๋ผ ๋ฌธ์ ๋ฐ์ (0) | 2024.04.11 |
์ธ๊ธฐ๊ธ ์๊ตฌ์ฌํญ
- ์ผ ๋จ์๋ก ์์ 10๊ฑด ์ธ๊ธฐ๊ธ ์ ์
- ๋งค์ผ ์ค์ 1์ ์ ๋ฐ์ดํธ
- ์ข์์ ์/๋๊ธ ์/์กฐํ์ ๊ธฐ๋ฐ ์ ์ ๊ณ์ฐ
- ์ ์ = (์ข์์ ์ * 3) + (๋๊ธ ์ * 2) + (์กฐํ์ * 1)
- ์ต๊ทผ 7์ผ ์ธ๊ธฐ๊ธ ๋ด์ญ ์กฐํ
์ค๊ณ
- ๋งค์ผ ๊ฒ์๊ธ ์์ฑ ํธ๋ํฝ์ ์๋ฐฑ~์์ฒ๋ง ๊ฑด ์ด์
- ํ๋ฃจ๋์ ์์ฑ๋ ๋ชจ๋ ๊ฒ์๊ธ์ ๋ํด์,
- ์ ์๋ฅผ ๊ณ์ฐํ๊ณ , ์์ 10๊ฑด์ ์ฐพ์์ผํ๋ ์์
- ์ด๋ฌํ ์์ ์ 1์๊ฐ ๋ง์ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค.
- ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
- ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ๊ณ ๋ คํด๋ณผ ์ ์๋ค.
- ์ค์ 12์๊ฐ ๋์๋ง์, ์ ๋ ์์ฑ๋ ๊ฒ์๊ธ์ ๋ชจ๋ ์ํ
- ๊ฐ ๊ฒ์๊ธ์ ๋ํด์ ์ข์์ ์, ์กฐํ์, ๋๊ธ ์๋ฅผ ์กฐํ
- ๊ฒ์๊ธ์ ์ ์๋ฅผ ๊ณ์ฐ
- ๋ชจ๋ ๊ฒ์๊ธ์ ๋ํด์ ์์ 10๊ฑด์ ์ ์
- ๋ฐฐ์น ์์
์ ํตํด ๋ฌธ์ ์์ด ์ฒ๋ฆฌํ ์ ์์ง๋ง, ์ ํ์ฌํญ์ด ์กด์ฌํ๋ค.
- ์ฒ๋ฆฌํด์ผํ ๊ฒ์๊ธ์ ๊ฐ์๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ
- 1์๊ฐ ๋ง์ ์ฒ๋ฆฌํ๊ธฐ์๋ ์๊ฐ์ด ์ด๋ฐํ ์ ์๋ค.
- ๋ง์ฝ ์ค์ 1์์ ์
๋ฐ์ดํธ ๋๋๊ฒ ์๋๋ผ,
- ์ค์ 00์ 10๋ถ์?, ์ค์ 00์์ ์ฆ์ ์ ๋ฐ์ดํธํด์ผํ๋ค๋ฉด?
- ๋ง์ฝ ์ค์ 1์์ ์
๋ฐ์ดํธ ๋๋๊ฒ ์๋๋ผ,
- ๋น ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ณ๋ ฌ ์์คํ
์ ๊ตฌ์ถํ ์ ์๋ค.
- ํ์ง๋ง ์ค๊ณ์ ๊ตฌํ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ
- ๋ณ๋ ฌ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฅ๋น์ ๋ฆฌ์์ค๋ ๊ณ ๋ คํด์ผ ํจ
- 1์๊ฐ ๋ง์ ์ฒ๋ฆฌํ๊ธฐ์๋ ์๊ฐ์ด ์ด๋ฐํ ์ ์๋ค.
- ์ฒ๋ฆฌํด์ผํ ๊ฒ์๊ธ์ ๊ฐ์๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ
- ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ค๊ณ ํ๋๋ผ๋
- ์ธ๊ธฐ๊ธ ์ ์ ์๋ ๊ฒ์๊ธ, ์ข์์ ์, ์กฐํ์, ๋๊ธ์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค.
- ์ด๋ฌํ ๋ฐ์ดํฐ๋ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๋ ๋ง์ดํฌ๋ก์๋น์ค์์ ๊ฐ์ง๊ณ ์๋ค.
- 1์๊ฐ ๋ง์ ๊ฐ ์๋น์ค์ ๋ฌด์ํ ๋ง์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค.
- ์์ ๋ถํฐ 1์๊ฐ๋์ ์ธ๊ธฐ๊ธ ์๋น์ค์ ์ํด ํ ์๋น์ค์ด ๋ถํ๊ฐ ํญ๋ฐ์ ์ผ๋ก ์์นํ ์ ์๋ค.
- ํ ์๋น์ค์ ์ํฅ์ด ๊ฐ ์ ์๋ค.
- ์ธ๊ธฐ๊ธ ์ ์ ์๋ ๊ฒ์๊ธ, ์ข์์ ์, ์กฐํ์, ๋๊ธ์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค.
- ์๊ฐ์ ์ธ ์ ์ฝ, ๊ฐ๋ฐ ๋ณต์ก์ฑ, ๋ ธ์ถ ์๊ฐ ์ ์ฑ ๋ฑ์ ๋ฐ๋ผ์ ์ฒ๋ฆฌ์๋ ํ๊ณ๊ฐ ์๊ธธ ์ ์๋ค.
- Stream Processing(์คํธ๋ฆผ ์ฒ๋ฆฌ) ์ ๋ํด ์์๋ณด์
- ์คํธ๋ฆผ(Stream)
- ์ฐ์์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ
- ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ๋ ๋ก๊ทธ, ์ผ์ ๊ฐ์ง, ์ฃผ์ ๊ฑฐ๋ ๋ฐ์ดํฐ ๋ฑ๊ณผ ๊ฐ์ด ์ฐ์์ ์ผ๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ
- ์คํธ๋ฆผ ์ฒ๋ฆฌ(Stream Processing)
- ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๋ ๊ฒ
- ์ฐ์์ ์ผ๋ก ๋ค์ด์ค๋ ์ค์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- ์ธ๊ธฐ๊ธ ์ ์ ์ ์ํด ์คํธ๋ฆผ ์ฒ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถ
- ๊ฒ์๊ธ ์์ฑ/์์ /์ญ์ ์ด๋ฒคํธ
- ๋๊ธ ์์ฑ/์ญ์ ์ด๋ฒคํธ
- ์ข์์ ์์ฑ/์ญ์ ์ด๋ฒคํธ
- ์กฐํ์ ์ง๊ณ ์ด๋ฒคํธ
- ์ ์ด๋ฒคํธ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ฐ์์ ์ฒ๋ฆฌํ๋ฉด?
- ๋ณ๋์ ๋ฐฐ์น ์์คํ ์ ๊ตฌ์ถํ์ง ์๊ณ ๋, ์ค์๊ฐ์ผ๋ก ์ธ๊ธฐ๊ธ์ ํ์ํ ์ ์๋ฅผ ๊ณ์ฐํ์ฌ ์์ 10๊ฑด์ ๋ฏธ๋ฆฌ ์์ฑํด ๋ ์ ์์ ๊ฒ
์ต์ข ์ค๊ณ
- ์ธ๊ธฐ๊ธ ์ ์ ์ ํ์ํ ์ด๋ฒคํธ๋ฅผ ์คํธ๋ฆผ์ผ๋ก ๋ฐ๋๋ค.
- ์ค์๊ฐ์ผ๋ก ๊ฐ ๊ฒ์๊ธ์ ์ ์๋ฅผ ๊ณ์ฐํ๋ค.
- ์ค์๊ฐ์ผ๋ก ์์ 10๊ฑด์ ์ธ๊ธฐ๊ธ ๋ชฉ๋ก์ ๋ง๋ ๋ค.
- Client๋ ์ธ๊ธฐ๊ธ ๋ชฉ๋ก์ ์กฐํํ๋ค.

- ์คํธ๋ฆผ ๋ฐ์ดํฐ ์์ค๋ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์์ฐํ๋ค. ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ ์ค์๊ฐ์ผ๋ก, ์ฐ์์ ์ผ๋ก ์์ฐ๋๋ค.
- ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ธฐ๋ก ์ ๋ฌ๋๋ค. ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ธฐ๋ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋ฐ์ดํฐ ๊ฐ๊ณต ๋๋ ํํฐ๋ง ๋๋ ์ง๊ณ ๋ฑ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
- ์์ ์ ์ํํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ธฐ๋, ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ค. ์ด๋ฌํ ๊ฒฐ๊ณผ๋ Client์ ์ํด ์ฌ์ฉ๋ ์ ์๋ค.

- ์ฌ๊ธฐ์ ์คํธ๋ฆผ ๋ฐ์ดํฐ ์์ค๋ ๊ฒ์๊ธ/๋๊ธ/์ข์์/์กฐํ์ ์๋น์ค๊ฐ ๋ ์ ์๊ณ , ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด์ ์ค์๊ฐ์ผ๋ก ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์์ฐํ๋ค.
- ์คํธ๋ฆผ ๋ฐ์ดํฐ ์์ค๋ ์ ์ด๋ฒคํธ๋ฅผ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ก ์์ฐํ๋ ๊ฒ์ด๋ค. ์ด๋, ์กฐํ์ ์ด๋ฒคํธ๋ ํธ๋ํฝ์ด ๋ง์ ์ ์์ผ๋ฏ๋ก ๋ฐฑ์ ์์ (100๊ฐ ๋จ์)์๋ง ์์ฐํด๋ณธ๋ค. ํธ๋ํฝ์ด ๋ง์ ์กฐํ์๊น์ง ๋ฐ๋์ ์ ํํ๊ฒ ์ ์๋ฅผ ๊ณ์ฐํ ํ์๋ ์๋ค๋ ๊ด์ ์ด๋ค.!

- ์ธ๊ธฐ๊ธ ์๋น์ค๋ ์ด๋ฌํ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ ์ธ๊ธฐ๊ธ ์ ์ ์์ ์ ์ฌ์ฉํ๋ค. ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ๋๋ง๋ค ์ ์๋ฅผ ๊ณ์ฐํ๊ณ , ์์ 10๊ฑด์ ์ธ๊ธฐ๊ธ ๋ชฉ๋ก์ ์์ฑํด ๋๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ์ ์ ๋ ์ธ๊ธฐ๊ธ ๋ฐ์ดํฐ(์ฒ๋ฆฌ ๊ฒฐ๊ณผ)๋ 7์ผ๊ฐ ๋ด์ญ๋ง ๊ด๋ฆฌํ๋ฉด ๋๋ฏ๋ก, ํ๋ฐ์ฑ ๋ฐ์ดํฐ์ด๋ค. ๋, ์ผ ๋จ์ ์์ 10๊ฑด์ ๊ฒ์๊ธ ๋ฐ์ดํฐ๋ง ํ์ํ๋ฏ๋ก, ์ปค๋ค๋ ์ ์ฅ๊ณต๊ฐ์ด ํ์ํ์ง ์๋ค.
- ์ฌ๊ธฐ์ Redis๋ฅผ ์ฌ์ฉํ๋ค. ๋น ๋ฅธ ์ ์ฅ์๋ก์์ ์ด์ ๋ ์๊ณ , TTL๋ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ง์ ๋ ๊ธฐ๊ฐ์ด ์ง๋๋ฉด ์๋ ์ญ์ ๊ฐ๋ฅ
- ๋, ๋ค์ํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋ค. Sorted Set(=zset) ์๋ฃ ๊ตฌ์กฐ๋, ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ ฌ๋ ์งํฉ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
- ์์ ์ ์ 10๊ฑด์ ๊ฒ์๊ธ์ ์ ๋ ฌ ์ํ๋ก ์ ์งํ ์ ์๋ค.
- ๊ฒ์๊ธ/๋๊ธ/์ข์์/์กฐํ์ ์๋น์ค๋, ์ค์๊ฐ ์ด๋ฒคํธ๋ฅผ ์ธ๊ธฐ๊ธ ์๋น์ค๋ก ์ด๋ป๊ฒ ์ ๋ฌ ๊ฐ๋ฅํ๊ฐ?
- ์ธ๊ธฐ๊ธ ์๋น์ค๋ ์์ ์ ๋ฆฌ์์ค์ ์๋ง๊ฒ ์ผ๊ธฐ๊ธ ์ ์ ์์ ์ ์ ์ฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ด์ผ ํ๋ค.
- ์ด๋ฌํ ์ด๋ฒคํธ ์ ๋ฌ ๋ฐ ์ฒ๋ฆฌ ๊ณผ์ ์ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ๋ํด์ ์์ ํ๊ณ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ ๊ฒ์ด๋ค.
- API vs Message Broker ๋ ๊ฐ์ง ๋ฐฉ์์ ๋ํด์ ์์๋ณด์
API

- ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ์๊ธฐ๋ฉด, ์ธ๊ธฐ๊ธ ์๋น์ค๋ก API๋ฅผ ์ด์ฉํ ์ด๋ฒคํธ ์ ์ก
- ๊ฐ๋จํ๊ฒ ๊ตฌํ
- ํ ์๋น์ค์ ์ง์ ์ ์์กด, ์์คํ ๊ฐ ๊ฒฐํฉ๋ ์ฆ๊ฐ
- ์๋ฒ ๋ถํ ์ ํ
- ์ธ๊ธฐ๊ธ : ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก push ๋ฐ์
- ๊ฒ์๊ธ/์ข์์/์กฐํ์/๋๊ธ :๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก push
- ์ฅ์ ์ ํ, ์ ์ค๋ฑ์ ์ํ ๋์
Message Broker (โ ์ฑํ)

- ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ์๊ธฐ๋ฉด, ๋ฉ์์ง ๋ธ๋ก์ปค๋ ์ด๋ฒคํธ ์ ์ก, ์ธ๊ธฐ๊ธ ์๋น์ค์์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์์ ์ฒ๋ฆฌ
- ๋ณต์กํ ๊ตฌํ : ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์์คํ ์ด ํ์ํ ์ ์์
- ํ ์๋น์ค์ ๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ์ด์ฉํ ๊ฐ์ ์ ์์กด์ฑ, ์์คํ ๊ฐ ๊ฒฐํฉ๋ ๊ฐ์
- ์๋ฒ ๋ถํ ์ ํ
- ์ธ๊ธฐ๊ธ : ๋ฉ์์ง ๋ธ๋ก์ปค์์ ์ ์ ํ๊ฒ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ๋ฅ
- ๊ฒ์๊ธ/์ข์์/์กฐํ์/๋๊ธ: ๋ฉ์์ง ๋ธ๋ก์ปค๋ก ์ด๋ฒคํธ ์ ์ก๋ง ํ๋ฉด ๋จ
- ์ฅ์ ์ ํ, ์ ์ค ๋ฑ์ ์ํ ๋ฎ์
- ๊ตฌํ์ ๋ณต์กํ๋, ๋๊ท๋ชจ ์์คํ ์์ ๋ง์ ์ฅ์ ์ ๊ฐ์ง
- ํ๋ฒ ๊ตฌ์ถํด ๋๋ฉด, ๋์ ํ์ฉ๋
- Consumer Group๋ง ๋ฌ๋ฆฌํ์ฌ ๊ฐ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ๊ฒ์๊ธ ์กฐํ ์ต์ ํ์๋ ์ฌ์ฉํ ์์

Kafka๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ ์ ์ก์ ์ค๊ฐ
- ๊ฒ์๊ธ/๋๊ธ/์ข์์/์กฐํ์ ์๋น์ค :
Producer
- ์ธ๊ธฐ๊ธ ์๋น์ค :
Consumer
์ด๋ ๊ฒ ์ด๋ฒคํธ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ์ ํต์ ํ๋ ์ํคํ
์ฒ๋ฅผ Event Driven Architecture
๋ผ๊ณ ํ๋ค.


์ธ๊ธฐ๊ธ ์๋น์ค๊ฐ ์ธ๊ธฐ๊ธ ๋ฐ์ดํฐ ์์ฑ ๊ณผ์
- ์ค๋ ๋ ์ง 2025๋
10์ 1์ผ
- 10์ 1์ผ์ ์์ฑ๋ ๊ฒ์๊ธ์, 2์ผ ์ค์ 1์๋ถํฐ ์ ๊ณตํด์ผ ํ ์ธ๊ธฐ๊ธ์ด ๋๋ค.
- 1์ผ 00์ 00๋ถ ~ 2์ผ 00์ 00๋ถ ์ฌ์ด์ ์์ฑ๋ ๊ฒ์๊ธ์ ๋ํ ์ด๋ฒคํธ๋ ๊ฐ ๊ฒ์๊ธ์ ์ ์๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ณ์ฐํ์ฌ Redis(key=20251001)์ ์ฝ์
- key=20251001์ Sorted Set(zset) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ฐ ๊ฒ์๊ธ์ ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ ฌ๋ ์ํ๋ฅผ ๊ฐ์ง๋ ๊ฒ(data = ๊ฒ์๊ธ ID, score=๊ฒ์๊ธ ์ ์)
- ์ด๋ฅผ ์ด์ฉํ์ฌ Sorted Set์ ์์ 10๊ฑด์ ๋ฐ์ดํฐ๋ง ์ ์ง
- ์ค๋ ๋ ์ง 2025๋
10์ 2์ผ
- ์ด์ ๋ถํฐ ์์ฑ๋๋ ๊ฒ์๊ธ์ key=20251002์ Sorted Set์ ์ฝ์ ๋๋ค.
- key=20251001์ ์์ฑ, ๋์ด์ ๊ฑด๋ค์ผ ํ์ ์์
- ์ค์ 1์๊ฐ ๋๋ฉด, ์ธ๊ธฐ๊ธ ์ ๊ณตํ๋ค. ์ด์ ๋ฏธ๋ฆฌ ์ค์๊ฐ์ผ๋ก ๋ง๋ค๊ณ ์์๊ธฐ์ ๋ฐฐ์น ์์ ์ ๋ถํ์, Client๊ฐ ์กฐํํด์ผํ๋ ๋ฐ์ดํฐ๋ง ์ง์
- ๋ง์ฝ ์ ์ ๊ณ์ฐ์ ๋๊ธ์ ์ ๋ํฌ ์์ฑ์ ์๊ฐ ํ์ํ๋ค๋ฉด?
- ์ด๋ฌํ ๋ฐ์ดํฐ๋ ๋๊ธ ์๋น์ค์์ ์ ๊ณตํ์ง๊ณ ๋ณด์ ํ๊ณ ์์ง๋ ์์
- ๋๊ธ ์๋น์ค๊ฐ ์ธ๊ธฐ๊ธ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฐํ๊ณ ๊ด๋ฆฌํ ์ฑ ์์ ์์, ์ฆ ์ด๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์์ฐํ๊ณ ๊ด๋ฆฌํ ์ฑ ์์ ์ธ๊ธฐ๊ธ
- ์ธ๊ธฐ๊ธ ์๋น์ค๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฒต์ ์ผ๋ก ๋ณด๊ดํ๋ค๋ฉด?
- ์ด๋ฒคํธ๋ก ์ ๋ฌ๋ฐ์ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ์์ฒด์ ์ผ๋ก ๊ฐ๊ณต ๋ฐ ์์ฐ ๊ฐ๋ฅ
- ๋ค๋ฅธ ์๋น์ค์ ์์กดํ์ง ์๊ณ , ๋ ๋ฆฝ์ ์ผ๋ก ๊ธฐ๋ฅ ์ ๊ณต ๊ฐ๋ฅ
- ๋ฐ๋ผ์ ์ ์ ๊ณ์ฐ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ฐ ์๋น์ค์ ๋ค์ ์์ฒญํ์ง ์๊ณ , ์์ฒด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋๋ก ํ๋ค.
- ์ด๋ฌํ ๋ฐ์ดํฐ๋ ํ๋ฃจ๋ง ๋ณด๊ดํ๋ฉด ๋์ง๋ง, ์ฉ๋์ด ํฌ์ง ์์ผ๋ฏ๋ก ์ ๊ทผ์ด ๋น ๋ฅด๊ณ ํ๋ฐ์ฑ์ ๊ฐ์ง๋ Redis๋ฅผ ์ฌ์ฉ

Producer
- ๊ฒ์๊ธ/๋๊ธ/์ข์์/์กฐํ์ ์๋น์ค๋ Kafka๋ก ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ producer ์ญํ
- Producer๋ ์ ์๋ ์ด๋ฒคํธ๋ฅผ Kafka๋ก ์ ์ ๋ฌํ๋ฉด ๋จ
Transactional Messaging
- ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ, ์์์ฑ ๊ด๋ฆฌ๋ฅผ ์ํด ํธ๋์ญ์
๊ด๋ฆฌ๋ ์ค์(
๋ชจ๋ ์คํ๋๊ฑฐ๋, ์คํด๋์ง ์๊ฑฐ๋
)

- Producer๋ ๋น์ง๋์ค ๋ก์ง ์ํ
- Kafka๋ก ์ด๋ฒคํธ ๋ฐ์ดํฐ ์ ์ก
- Consumer๋ Kafka์์ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ฒ๋ฆฌ
- Producer์์ ์ ์กํ ์ด๋ฒคํธ๊ฐ Consumer์์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์๋, ๋คํธ์ํฌ๋ฅผ ํตํ ๋ณต์กํ ์ ์ก ๊ณผ์ ์ด ํ์ํ๋ค.
- ๋คํธ์ํฌ๋ ์ธ์ ๋ ์๋จ๋ ์ ์๊ณ , Producer/Consumer/Kafka์์๋ ์ฅ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ์ด๋ฌํ ๊ณผ์ ์์ ๋ฐ์ดํฐ๋ ์ ์ค ์์ด ์ฒ๋ฆฌ๋ ๊น?
Kafka์ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ์ ๋ฌ๋์๋ค๋ฉด, ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ณต๊ตฌ ๊ฐ๋ฅํ๋ค.
Consumer๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ ์์ ์ผ๋ก ๋ชจ๋ ์๋ฃํ ์ดํ์๋ offset์ commitํ๋ฉด, ๋ฐ์ดํฐ ์ ์ค์์ด ์ฒ๋ฆฌ ๊ฐ๋ฅ

Producer๊ฐ Kafka์ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ๊ณผ์ ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด?
- Producer๋ Kafka๋ก์ ๋ฐ์ดํฐ ์ ์ก๊ณผ ๋ฌด๊ดํ๊ฒ ์ ์ ๋์ํด์ผํจ
- ๋ฐ์ดํฐ ์ ์ก์ด ์คํจํ๋คํด์, Producer์ ์ฅ์ ๊ฐ ์ ํ๋๋ฉด ์๋จ
- ๊ฒ์๊ธ์ ์ ์ ์์ฑ๋์ด๋, ์ด๋ฒคํธ๋ฅผ Kafka์ ์ ๋ฌํ ์ ์๋ ์ํฉ
- ์ ๋ขฐํ ์ ์๋ ์์คํ (Kafka)๋ก ์์ง ๋ฐ์ดํฐ๊ฐ ์ ์ก๋์ง ๋ชปํ๊ธฐ ๋๋ฌธ์, ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ ์ ์ค
- ์ด๋ก์ธํด ๊ฐ ์๋น์ค๋ง๋ค ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๊นจ์ง
- Producer์์ ๊ฒ์๊ธ์ด ์์ฑ๋์์ง๋ง, Consumer๋ ์ด ์ฌ์ค์ ์ ๋ฌ๋ฐ์ง ๋ชปํ๊ฒ
- ๊ทธ๋์, ๋น์ฆ๋์ค ๋ก์ง ์ํ๊ณผ ์ด๋ฒคํธ ์ ์ก์ด ํ๋์ ํธ๋์ญ์
์ผ๋ก ์ฒ๋ฆฌ๋์ด์ผํจ
โ ๏ธ๋น์ฆ๋์ค ๋ก์ง ์ํ๊ณผ ์ด๋ฒคํธ ์ ์ก์ด ๋ชจ๋ ์ผ์ด๋๊ฑฐ๋, ๋ชจ๋ ์ผ์ด๋์ง ์๊ฑฐ๋
- ์ด๋ฌํ ๋ณด์ฅ์ ๊ผญ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋ ํ์๋ ์์
- ๋น์ฆ๋์ค ๋ก์ง์ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋๋ผ๋, ์ด๋ฒคํธ ์ ์ก์ ์ฅ์ ๊ฐ ํด์๋ ์ดํ ๋ค๋ฆ๊ฒ ์ฒ๋ฆฌ๋์ด๋ ์ถฉ๋ถํ ์ ์์
- ์ต์ข ์ ์ผ๋ก ์ผ๊ด์ฑ์ด ์ ์ง๋ ์๋ ์๋ ๊ฒ(Eventually Consistency)
- Transaction start
- ๋น์ฆ๋์ค ๋ก์ง ์ํ
- commit or rollback
- ์ด๋ฌํ ํธ๋์ญ์ ์ ์คํ๋ง์ @Transactional์ ์ด์ฉํ๋ฉด ์์ฝ๊ฒ ์ ์ฉ ๊ฐ๋ฅ
- ์ฌ๊ธฐ์ ๋จ์ํ๊ฒ ์ด๋ฒคํธ ์ ์ก ์ฝ๋๋ฅผ ํฌํจํ๋ฉฐ?
- Transaction start
- ๋น์ฆ๋์ค ๋ก์ง ์ํ
- publishEvent()
- commit or rollback
- ์ง๊ธ๊น์ง ์ฌ์ฉํ๋ ํธ๋์ญ์ ์ MySQL์ ๋จ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค(1๊ฐ ์ค๋)์ ๋ํ ํธ๋์ญ์
- MySQL์ ์ํ ๋ณ๊ฒฝ๊ณผ Kafka๋ก์ ๋ฐ์ดํฐ ์ ์ก์, MySQL์ ํธ๋์ญ์ ๊ธฐ๋ฅ์ ์ด์ฉํด์ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ ์ ์์
- ์๋ก ๋ค๋ฅธ ์์คํ ์ด๊ธฐ์
- ๋ง์ฝ ์ด๋ฒคํธ ์ ์ก์์
์ด Kafka ์ฅ์ ๋ก ์ธํด ๋ธ๋กํน ๋๋ค๋ฉด??
- Kafka์ ์ฅ์ ๊ฐ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ MySQL๋ก ์ ํ๋ ์ ์์
- ๋๋, ํธ๋์ญ์ commit์ด ์คํจํ๋๋ฐ, ์ด๋ฒคํธ ์ ์ก์ ์ด๋ฏธ ์๋ฃ๋์์ ์ ๋...
- Transaction start
- ๋น์ฆ๋์ค ๋ก์ง ์ํ
- publishEventAsync()
- commit or rollback
- ๋ง์ฝ 3๋ฒ์ด ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋๋ค๋ฉด?
- ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋ ์ด๋ฒคํธ ์ ์ก์ด ์คํจํ๋คํด์, MySQL์ ํธ๋์ญ์ ์ด ์๋์ผ๋ก ๋กค๋ฐฑ๋์ง ์๋๋ค.
- ๋กค๋ฐฑ์ ์ํ ๋ณด์ ํธ๋์ญ์ ์ ์ง์ ์ํํ ์ ์์ง๋ง, ๋๋ฝ๋ ์ ๋ ์๋ค.
- 2๊ฐ์ ๋ค๋ฅธ ์์คํ
์ ์ด๋ป๊ฒ ๋จ์ผํ ํธ๋์ญ์
์ผ๋ก ๋ฌถ์ ์ ์์๊น?
- ๋ถ์ฐ ์์คํ ๊ฐ์ ํธ๋์ญ์ ๊ด๋ฆฌ๊ฐ ํ์
- Distributed Transaction : ๋ถ์ฐ ์์คํ ์์ํธ๋์ญ์ ์ ๋ณด์ฅํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- Transactional Messaging : ๋ฉ์์ง ์ ์ก๊ณผ ํ ์์คํ ์์ ๊ฐ์ ๋ถ์ฐ ํธ๋์ญ์ ์ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ
Transactional Messaging
1. Two Phase Commit

- ๋ถ์ฐ ์์คํ
์์ ๋ชจ๋ ์์คํ
์ด ํ๋์ ํธ๋์ญ์
์ ์ํํ ๋,
- ๋ชจ๋ ์์คํ ์ด ์ฑ๊ณต : ํธ๋์ญ์ commit
- ํ๋๋ผ๋ ์คํจ : ํธ๋์ญ์ rollback
- ๋ ๋จ๊ณ๋ก ๋๋์ด ์ํ๋จ
Prepare phase(์ค๋น ๋จ๊ณ)
Commit phase(์ปค๋ฐ ๋จ๊ณ)
1-1. Prepare Phase
- Coordinator๋ ๊ฐ ์ฐธ์ฌ์์๊ฒ ํธ๋์ญ์ ์ ์ปค๋ฐํ ์ค๋น๊ฐ ๋์๋์ง ํ์ธ
- ๊ฐ ์ฐธ์ฌ์๋ ์๋ต
1-2. Commit Phase
- ๋ชจ๋ ์ฐธ์ฌ์๊ฐ ์ค๋น ์๋ฃ ์๋ต์ ๋ณด๋ด๋ฉด, Coordinator๋ ๋ชจ๋ ์ฐธ์ฌ์์๊ฒ ํธ๋์ญ์ ์ปค๋ฐ ์์ฒญ
- ๋ชจ๋ ์ฐธ์ฌ์๋ ํธ๋์ญ์ ์ ์ปค๋ฐํจ
- ๋ชจ๋ ์ฐธ์ฌ์์ ์๋ต์ ๊ธฐ๋ค๋ ค์ผ ํ๋ฏ๋ก, ์ง์ฐ์ด ๊ธธ์ด์ง ์ ์๋ค.
- Coordinator ๋๋ ์ฐธ์ฌ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด,
- ์ฐธ์ฌ์๋ค์ ํ์ฌ ์ํ๋ฅผ ๋ชจ๋ฅธ์ฑ ๋๊ธฐํด์ผํจ
- ํธ๋์ญ์ ๋ณต๊ตฌ ์ฒ๋ฆฌ๊ฐ ๋ณต์กํด์ง ์ ์์
Transactional Outbox
- ์ด๋ฒคํธ ์ ์ก์์ ์ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ ํฌํจ์ํฌ ์ ์๋ค.
- ํ์ง๋ง ์ด๋ฒคํธ ์ ์ก ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
์ ํฌํจํ์ฌ ๊ธฐ๋ก ๊ฐ๋ฅ
- ํธ๋์ญ์ ์ ์ง์ํ๋ DB์ Outbox ํ ์ด๋ธ์ ์์ฑํ๊ณ , ์๋น์ค ๋ก์ง ์ํ๊ณผ Outbox ํ ์ด๋ธ ์ด๋ฒคํธ ๋ฉ์์ง ๊ธฐ๋ก์ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ๋๋ค.
- ๋น์ฆ๋์ค ๋ก์ง ์ํ ๋ฐ Outbox ํ
์ด๋ธ ์ด๋ฒคํธ ๊ธฐ๋ก
- Transaction start
- ๋น์ฆ๋์ค ๋ก์ง ์ํ
- Outbox ํ ์ด๋ธ์ ์ ์กํ ์ด๋ฒคํธ ๋ฐ์ดํฐ ๊ธฐ๋ก
- commit or rollback
- Outbox ํ
์ด๋ธ์ ์ด์ฉํ ์ด๋ฒคํธ ์ ์ก ์ฒ๋ฆฌ
- Outbox ํ ์ด๋ธ ๋ฏธ์ ์ก ์ด๋ฒคํธ ์กฐํ
- ์ด๋ฒคํธ ์ ์ก
- Outbox ํ ์ด๋ธ ์ ์ก ์๋ฃ ์ฒ๋ฆฌ

- Client๋ ๋ฐ์ดํฐ ์์ฑ/์์ /์ญ์ ๋ฑ์ ์์ฒญ์ ๋ฐ์
- Client ์์ฒญ์ ์ํด, ๋จ์ผ ํธ๋์ญ์ ๋ด์์ Data Table์ ์ํ ๋ณ๊ฒฝ๊ณผ Outbox Table ์ ์ด๋ฒคํธ ์ฝ์ ์ด ์ฒ๋ฆฌ
- Message Relay๋ Outbox Table์์ ๋ฏธ์ ์ก ์ด๋ฒคํธ๋ฅผ ์กฐํ
Message Relay : Message Broker๋ก ์ด๋ฒคํธ๋ฅผ ์ ์กํ๋ ์ญํ
4. Message Relay๋ ์ด๋ฒคํธ๋ฅผ Message Broker๋ก ์ ์ก
5. Message Relay๋ ์ด๋ฒคํธ ์ ์ก์ด ์ ์์ ์ผ๋ก ์๋ฃ๋์์ผ๋ฉด, Outbox Table์ ์ด๋ฒคํธ๋ฅผ ์๋ฃ ์ํ๋ก ๋ณ๊ฒฝ
Transaction Log Tailing Pattern
- Message Broker๋ก ์ ์กํ๋ ์์ ์ ์ํด ํ์ฉ
- DB์ ํธ๋์ญ์
๋ก๊ทธ๋ฅผ ์ถ์ ๋ฐ ๋ถ์ํ๋ ๋ฐฉ๋ฒ
- DB๋ ๊ฐ ํธ๋์ญ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ก๊ทธ๋ก ๊ธฐ๋ก
- MySQL binlog, PostgreSQL WAL, SQL Server Transaction Log ๋ฑ
- ์ด๋ฌํ ๋ก๊ทธ๋ฅผ ์ฝ์ด์ ์ด๋ฒคํธ๋ฅผ ์ ์กํด๋ณผ์ ์๋ค.
- CDC(Change Data Capture) ๊ธฐ์ ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ค๋ฅธ ์์คํ ์ ์ ์ก
- CDC :
๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๋ ๊ธฐ์

- DB์ ์ํด์ ํธ๋์ญ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ก๊ทธ๋ก ๊ธฐ๋ก
- Transaction Log Miner๋ Transaction Log ์กฐํ
- Transaction Log Miner๋ Message Broker๋ก ์ด๋ฒคํธ ์ ์ก
- Data Table์ ๋ณ๊ฒฝ ์ฌํญ๋ง ์ถ์ ํด๋ ์ถฉ๋ถํ๋ค๋ฉด, Outbox Table์ ์ญ์ ๊ฐ๋ฅ
Transactional Outbox ์ค๊ณ

- Shard_key์ ์กด์ฌ?
- ์ค๋ฉ์ด ๊ณ ๋ ค๋ ๋ถ์ฐ DB ์ฌ์ฉ์ค
- ํธ๋์ญ์ ์ ๊ฐ ์ฌ๋์์ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ๋น ๋ฅด๊ณ ์์ ํ๊ฒ ์ํ๋ ์ ์์
- ์ฌ๋ฌ Shard ๊ฐ์ ๋ถ์ฐ ํธ๋์ญ์ ์ ์ง์ํ๋ DB๋ ์์ผ๋, ์ฑ๋ฅ์ด ๋ค์ ๋จ์ด์ง
- Outbox Table์ ์ด๋ฒคํธ ๋ฐ์ดํฐ ๊ธฐ๋ก๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ์ํ ์ํ ๋ณ๊ฒฝ์ด ๋์ผํ Shard์์ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์๋๋ก ํจ

- ๊ฒ์๊ธ ์๋น์ค๋ก ๊ฒ์๊ธ ์์ฑ/์์ /์ญ์ API๊ฐ ํธ์ถ
- ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ฉด์, Article Table ์ํ ๋ณ๊ฒฝ๊ณผ Outbox Table ์ด๋ฒคํธ ๊ธฐ๋ก์ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌ
- Message Relay๋ Outbox Table์์ ๋ฏธ์ ์ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก polling ํ์ฌ ์กฐํํ๊ณ , Kafka๋ก ์ ์ก
๊ฐ๊ฒฉ์ด ๋๋ฌด ์งง์ผ๋ฉด DB ๋ถํโฌ๏ธ, ๊ฐ๊ฒฉ์ด ๋๋ฌด ๊ธธ๋ฉด ์ด๋ฒคํธ ์ ์ก์ ์ง์ฐ ๋ฐ์
10์ด ๊ฐ๊ฒฉ์ผ๋ก polling ํ๋๋ผ๋, ์ฌ์ ํ ์ง์ฐ์ด ํผ
๊ฒ์๊ธ ์๋น์ค์์ ํธ๋์ญ์ ์ด commit๋๋ฉด, Message Relay๋ก ์ด๋ฒคํธ๋ฅผ ์ฆ์ ์ ๋ฌ. Message Relay๋ ์ ๋ฌ๋ฐ์ ์ด๋ฒคํธ๋ฅผ ๋น๋๊ธฐ๋ก Kafka ์ ์ก ๊ฐ๋ฅ - Message Relay๋ ์ ์ก์ด ์คํจํ ์ด๋ฒคํธ์ ๋ํด์๋ง Outbox Table์์ polling. ๊ทธ๋ ์ง ์์ผ๋ฉด, Message Relay๋ก์ ์ด๋ฒคํธ ์ ๋ฌ๋ ์ ์๋ ์ง์ ์ด 2๊ฐ์ด๋ฏ๋ก ์ค๋ณต ์ฒ๋ฆฌ ๋ ์ ์๋ค.
- ์คํจํ ์ด๋ฒคํธ๋ ์ฅ์ ์ํฉ์์๋ง ๋ฐ์ํ ๊ฒ์ด๊ณ , ์ ์ ์ํฉ์์๋ 10์ด ์ ๋๋ฉด ์ด๋ฒคํธ ์ ์กํ ์๊ฐ์ผ๋ก ์ถฉ๋ถํ์ ๊ฒ
- ์์ฑ๋์ง 10์ด๊ฐ ์ง๋ ์ด๋ฒคํธ๋ง polling
- ๋ฌผ๋ก , ์ฌ์ ํ ์ด๋ฒคํธ๋ ์ค๋ณต ์ฒ๋ฆฌ๋ ์ ์์ผ๋ฏ๋ก Consumer ์ธก์์ ๋ฉฑ๋ฑ์ฑ์ ๊ณ ๋ คํ ๊ฐ๋ฐ์ ํ์
- ์ ์ก์๋ฃ๋์๋ค๋ฉด, Outbox Table์์ ์ญ์
- ์ด๋ฒคํธ๋ ๋น์ฆ๋์ค ๊ด์ ์์ ์ ์๋ฏธํ ์ ์๊ณ , ์ดํ์๋ ์ถ์ ๋๋ ๋ฆฌํ๋ ์ด๊ฐ ํ์ํ ์ํฉ๋ ์์(Event Sourcing)
- ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์๋ ์ด๋ฒคํธ ์ ์ก ์ฉ๋๋ก๋ง ์ฌ์ฉํ๋ฏ๋ก ์ญ์
- ๊ฒ์๊ธ ์๋น์ค๊ฐ ์ฌ๋ฌ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋์์ ์ฒ๋ฆฌ๋ ์๋ ์๊ณ , DB ์ค๋ฉ์ด ๊ณ ๋ ค๋ ๋ถ์ฐ ์์คํ
์ด๋ค. Message Relay๊ฐ Outbox Table์ ๋ฏธ์ ์ก ์ด๋ฒคํธ๋ฅผ polling ํ๋ ์์
์ ์ด๋ป๊ฒ?
- ๋ฏธ์ ์ก ์ด๋ฒคํธ๋ฅผ polling ํ๋ ๊ฒ์ ํน์ ํ ์ค๋ ํค๊ฐ ์์ผ๋ฏ๋ก, ๋ชจ๋ ์ค๋์์ ์ง์ polling
- ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋์์ polling ํ๋ฉด, ์ค๋ณต ์ฒ๋ฆฌ๋ ์ฒ๋ฆฌ์ ์ง์ฐ์ด ๋ฐ์ํ ์ ์๋ค.
- ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฒ๋ฆฌํ ์ค๋๋ฅผ ์ค๋ณต ์์ด ์ ์ ํ ๋ถ์ฐํด์ผํจ
- ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋์ ์ผ๋ถ๋ง ํ ๋น๋ฐ์์ ์ฒ๋ฆฌํ๋๋ก ํด๋ณด์. ์ด๋ฌํ ํ ๋น์ Message Relay๋ด์ Coordinator๊ฐ ์ฒ๋ฆฌ
- Coordinator๋ ์์ ์ ์คํํ ์ ํ๋ฆฌ์ผ์์ ์ ์๋ณ์์ ํ์ฌ ์๊ฐ์ผ๋ก, ์ค์ ์ ์ฅ์์ 3์ด ๊ฐ๊ฒฉ์ผ๋ก ping. ์ด๋ฅผ ํตํด Coordinator๋ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ๋ชฉ๋ก์ ํ์ ํ๊ณ , ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋๋ฅผ ์ ์ ํ ๋ถ์ฐ
- ์ค์ ์ ์ฅ์๋ ๋ง์ง๋ง ping์ ๋ฐ์์ง 9์ด๊ฐ ์ง๋ซ์ผ๋ฉด, ์ ํ๋ฆฌ์ผ์ด์
์ด ์ข
๋ฃ๋์๋ค๊ณ ํ๋จํ๊ณ ๋ชฉ๋ก์์ ์ ๊ณ
- ์ค์ ์ ์ฅ์๋ Redis์ Sorted Set์ ์ด์ฉ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ณ์์ ๋ง์ง๋ง ping ์๊ฐ์ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ฅ ๊ฐ๋ฅ
'์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Redis ZSet(Sorted Set) (0) | 2025.03.16 |
---|---|
Kafka ? ์นดํ์นด๊ฐ ๋ญ๋ฐ.... (0) | 2025.03.15 |
์คํ๋ง ๋๊ท๋ชจ์์คํ ์ค๊ณ (2) (0) | 2025.01.11 |
์คํ๋ง ๋๊ท๋ชจ์์คํ ์ค๊ณ ๊ฐ์ (1) (0) | 2025.01.11 |
SimpleJdbcInsert ์ฌ์ฉ ์, ์๋ ์ปฌ๋ผ ๋ฌธ์ ๋ฐ์ (0) | 2024.04.11 |