๊ฐ์ํ๋ ํ๋ก์ธ์ค์ ์์ญ ๊ฐ์ ์ํธ ์ฐ๊ฒฐ๋ ์๋น์ค๋ฅผ ๊ฐ์ถ Lamoda์ ๊ฐ์ ๋๊ธฐ์ ์ด ์ ๊ทผ ๋ฐฉ์์ ํฌ๊ฒ ๋ฐ๊พธ๋๋ก ๊ฐ์ํ ์ ์๋ ์ด์ ๋ ๋ฌด์์ผ๊น์? ๋๊ธฐ ๋ถ์ฌ๋ ์ ๋ฒ์์๋ถํฐ ๋ชจ๋ ํ๋ก๊ทธ๋๋จธ์๊ฒ ๋ด์ฌ๋ ์คํ ์๊ตฌ์ ์ด๋ฅด๊ธฐ๊น์ง ์์ ํ ๋ค๋ฅผ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์ถ๊ฐ ํํ์ ๊ธฐ๋ํ ์ ์๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. Sergey Zaika๋ Kafka์์ ์ด๋ฒคํธ ์ค์ฌ API๋ฅผ ๊ตฌํํ๋ฉด ์ ํํ ๋ฌด์์ ์ป์ ์ ์๋์ง ์๋ ค์ค ๊ฒ์
๋๋ค(
๊ณ ์ง ์ฌํญ: ์ด ๊ธฐ์ฌ๋ Sergey๊ฐ 2018๋
XNUMX์ HighLoad++์์ ๊ฐ์ตํ ๋ชจ์์ ์๋ฃ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. Kafka์ ํจ๊ป ์์
ํ Lamoda์ ๋ผ์ด๋ธ ๊ฒฝํ์ ์ผ์ ์ ๋ํ ๋ค๋ฅธ ๋ณด๊ณ ์๋งํผ์ด๋ ์ฒญ์ทจ์๋ฅผ ๋งค๋ฃ์์ผฐ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ๊ฐ์ ์๊ฐ์ ๊ฐ์ง ์ฌ๋๋ค์ ํญ์ ์ฐพ์ ์ ์๊ณ ์ฐพ์์ผ ํ๋ค๋ ์ฌ์ค์ ๋ณด์ฌ์ฃผ๋ ํ๋ฅญํ ์๋ผ๊ณ ์๊ฐํ๋ฉฐ HighLoad++์ ์ฃผ์ต์๋ ์ด์ ๋์์ด ๋๋ ๋ถ์๊ธฐ๋ฅผ ์กฐ์ฑํ๊ธฐ ์ํด ๊ณ์ ๋
ธ๋ ฅํ ๊ฒ์
๋๋ค.
๊ณผ์ ์ ๋ํด
Lamoda๋ ์์ฒด ์ฐ๋ฝ ์ผํฐ, ๋ฐฐ์ก ์๋น์ค(๋ฐ ๋ง์ ๊ณ์ด์ฌ), ์ฌ์ง ์คํ๋์ค, ๋๊ท๋ชจ ์ฐฝ๊ณ ๋ฅผ ๊ฐ์ถ๊ณ ์์ผ๋ฉฐ ์ด ๋ชจ๋ ๊ฒ์ด ์์ฒด ์ํํธ์จ์ด์์ ์คํ๋๋ ๋๊ท๋ชจ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ์ ๋๋ค. ์ด๋ฌํ ์๋น์ค ์ค ์ผ๋ถ ๋๋ ์ ๋ถ๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ์ ํ์ ๋ํ ์ต์ ์ ๋ณด๋ฅผ ์๊ณ ์ถ์ดํ๋ ์์ญ ๊ฐ์ง ๊ฒฐ์ ๋ฐฉ๋ฒ, b2b ํํธ๋๊ฐ ์์ต๋๋ค. ๋ํ Lamoda๋ ๋ฌ์์ ์ฐ๋ฐฉ ์ธ์ XNUMX๊ฐ๊ตญ์์ ์ด์๋๊ณ ์์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ด ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค. ์ ์ฒด์ ์ผ๋ก ์๋ก์ด ์ฃผ๋ฌธ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์๋ง๋ XNUMX๊ฐ์ง๊ฐ ๋์ ๊ฒ์ด๋ฉฐ, ์ด๋ฅผ ์์ฒด ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ๋๋๋ก ๋ช ํํ์ง ์์ ๋ฐฉ์์ผ๋ก ํต์ ํ๋ ์์ญ ๊ฐ์ง ์๋น์ค์ ๋์์ผ๋ก ์๋ํฉ๋๋ค. ์ฃผ๋ฌธ ์ํ๋ฅผ ์ฃผ์ ์ฑ ์์ผ๋ก ํ๋ ์ค์ ์์คํ ๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ ๋ฅผ BOB๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ ๋ ๊ทธ๋ ์ ํจ๊ป ์ผํฉ๋๋ค.
์ด๋ฒคํธ ๊ธฐ๋ฐ API๋ฅผ ๊ฐ์ถ ํ๋ถ ๋๊ตฌ
์ด๋ฒคํธ ์ค์ฌ์ด๋ผ๋ ๋จ์ด๋ ์๋นํ ํ๋ํ ํํ์ ๋๋ค. ์กฐ๊ธ ๋ ๋์๊ฐ ์ด๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ๋ ์์ธํ ์ ์ํ๊ฒ ์ต๋๋ค. Kafka์์ ์ด๋ฒคํธ ์ค์ฌ API ์ ๊ทผ ๋ฐฉ์์ ์๋ํ๊ธฐ๋ก ๊ฒฐ์ ํ ์ํฉ๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค.
์ด๋ ๋งค์ฅ์ด๋ ๊ณ ๊ฐ์ด ๊ฒฐ์ ํ ์ฃผ๋ฌธ ์ธ์๋ ์ํ์ด ๊ณ ๊ฐ์๊ฒ ๋ง์ง ์์ ๋งค์ฅ์์ ํ๋ถ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ ์๋์ ์ผ๋ก ์งง์ ๊ณผ์ ์
๋๋ค. ํ์ํ ๊ฒฝ์ฐ ์ ๋ณด๋ฅผ ๋ช
ํํ ํ๊ณ ์๊ธ์ ์ด์ฒดํฉ๋๋ค.
ํ์ง๋ง ๋ฒ๋ฅ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋ฐํ์ด ๋์ฑ ๋ณต์กํด์ก๊ณ ์ด๋ฅผ ์ํด ๋ณ๋์ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๊ตฌํํด์ผ ํ์ต๋๋ค.
์ฐ๋ฆฌ์ ๋๊ธฐ:
- ๋ฒ FZ-54 - ๊ฐ๋จํ ๋งํด์, ๋ฒ์ ๋ฐ๋ผ ๋ฐํ์ด๋ ์์์ฆ์ด๋ ๋ชจ๋ ๊ธ์ ๊ฑฐ๋์ ๋ํด ๋ช ๋ถ์ด๋ผ๋ ๋งค์ฐ ์งง์ SLA ๋ด์ ์ธ๋ฌด์์ ๋ณด๊ณ ํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ ์์๊ฑฐ๋ ํ์ฌ๋ก์ ๊ฝค ๋ง์ ์ ๋ฌด๋ฅผ ์ํํ๊ณ ์์ต๋๋ค. ๊ธฐ์ ์ ์ผ๋ก ์ด๋ ์๋ก์ด ์ฑ ์(๋ฐ๋ผ์ ์๋ก์ด ์๋น์ค)๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์์คํ ์ ๊ฐ์ ์ ์๋ฏธํฉ๋๋ค.
- ๋ฐฅ ๋ถํ BOB์ ๋นํต์ฌ ์ฑ ์์ ์ํํ๊ณ ์ ๋ฐ์ ์ธ ๋ณต์ก์ฑ์ ์ค์ด๊ธฐ ์ํ ํ์ฌ ๋ด๋ถ ํ๋ก์ ํธ์ ๋๋ค.
์ด ๋ค์ด์ด๊ทธ๋จ์ ์ฃผ์ Lamoda ์์คํ
์ ๋ณด์ฌ์ค๋๋ค. ์ด์ ๋ ๋๋ถ๋ถ์ด ๋ ๋ง์์ก์ต๋๋ค. ์ถ์๋๋ ๋ชจ๋๋ฆฌ์ค ์ฃผ๋ณ์ 5~10๊ฐ ๋ง์ดํฌ๋ก์๋น์ค ์งํฉ. ์ฒ์ฒํ ์ฑ์ฅํ๊ณ ์์ง๋ง ์ค์์์ ์ ํํ ์กฐ๊ฐ์ ๋ฐฐํฌํ๋ ๊ฒ์ด ๋ฌด์ญ๊ธฐ ๋๋ฌธ์ ๋ ์๊ฒ ๋ง๋ค๋ ค๊ณ ๋
ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์กฐ๊ฐ์ด ๋จ์ด์ง๋ ๊ฒ์ ํ์ฉํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ตํ(ํ์ดํ)์ ์์ฝํด์ผ ํ๋ฉฐ ๊ทธ ์ค ํ๋๋ผ๋ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ์ ์๋ค๋ ์ฌ์ค์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
BOB์๋ ๊ฒฐ์ ์์คํ , ๋ฐฐ์ก ์์คํ , ์๋ฆผ ์์คํ ๋ฑ ๋ง์ ๊ฑฐ๋์๊ฐ ์์ต๋๋ค.
๊ธฐ์ ์ ์ผ๋ก BOB๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ~150๊ฐ์ ์ฝ๋ ๋ผ์ธ + ~100๊ฐ์ ํ ์คํธ ๋ผ์ธ;
- php7.2 + Zend 1 ๋ฐ Symfony ๊ตฌ์ฑ ์์ 3;
- 100๊ฐ ์ด์์ API ๋ฐ ~50๊ฐ์ ์์๋ฐ์ด๋ ํตํฉ
- 4๊ฐ๊ตญ์ ๊ฐ์์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
BOB๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ๊ณ ํต์ค๋ฝ์ต๋๋ค. BOB๋ฅผ ํตํด ํด๊ฒฐ๋๋ ์ฝ๋์ ๋ฌธ์ ์ ์์ ๋๊ตฌ๋ ๋จธ๋ฆฌ ์์ ์ง์ด๋ฃ์ ์ ์์ ์ ๋์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฅผ ๋จ์ํํ๋ ๋ฐ์๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค.
๋ฐํ ์ ์ฐจ
์ฒ์์๋ BOB์ ๊ฒฐ์ ๋ผ๋ ๋ ๊ฐ์ง ์์คํ ์ด ํ๋ก์ธ์ค์ ์ฐธ์ฌํฉ๋๋ค. ์ด์ ๋ ๊ฐ์ง๊ฐ ๋ ๋ํ๋ฉ๋๋ค.
- ์ฌ์ ํ ์๋น์ค(Fiscalization Service)๋ ์ฌ์ ํ ๋ฐ ์ธ๋ถ ์๋น์ค์์ ์์ฌ์ํต ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
- BOB๋ฅผ ๋ถํ๋ฆฌ์ง ์๋๋ก ์๋ก์ด ๊ตํ์ ํฌํจํ๋ ํ๋ถ ๋๊ตฌ์ ๋๋ค.
์ด์ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- BOB๊ฐ ํ๋ถ ์์ฒญ์ ๋ฐ์์ต๋๋ค.
- BOB๊ฐ ์ด ํ๋ถ ๋๊ตฌ์ ๋ํด ์ด์ผ๊ธฐํฉ๋๋ค.
- ํ๋ถ ๋๊ตฌ๋ ๊ฒฐ์ ์๋จ์ "๊ธ์ก์ ๋ฐํํ์ธ์"๋ผ๊ณ ์๋ ค์ค๋๋ค.
- ์ง๋ถ์ ๋์ ๋ฐํํฉ๋๋ค.
- ํ๋ถ ๋๊ตฌ์ BOB๋ ํ์ฌ ๋ ๋ค ํ์ํ๊ธฐ ๋๋ฌธ์ ์ํ๋ฅผ ์๋ก ๋๊ธฐํํฉ๋๋ค. BOB์๋ UI, ํ๊ณ ๋ณด๊ณ ์ ๋ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๊ฒ ์ ์กํ ์ ์๋ ๋ง์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฏ๋ก ํ๋ถ ๋๊ตฌ๋ก ์์ ํ ์ ํํ ์ค๋น๊ฐ ๋์ง ์์์ต๋๋ค. ์์ XNUMX๊ฐ์ ์์์ผ ํฉ๋๋ค.
- ์ฌ์ ํ ์์ฒญ์ด ์ฌ๋ผ์ง๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ฒ์ด ์์๋ ์ด๋ฒคํธ ๋ฒ์ค์ธ Kafka์์ ์ผ์ข ์ ์ด๋ฒคํธ ๋ฒ์ค๋ฅผ ๋ง๋ค์์ต๋๋ค. ๋ง์ธ, ์ด์ ๋จ์ผ ์คํจ ์ง์ (ํ์)์ด ์๊ฒผ์ต๋๋ค.
์ฅ์ ๊ณผ ๋จ์ ์ ๊ฝค ๋ถ๋ช
ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฒ์ค๋ฅผ ๋ง๋ค์๊ณ ์ด๋ ์ด์ ๋ชจ๋ ์๋น์ค๊ฐ ๋ฒ์ค์ ์์กดํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ์ค๊ณ๋ฅผ ๋จ์ํํ์ง๋ง ์์คํ
์ ๋จ์ผ ์คํจ ์ง์ ์ ๋์
ํฉ๋๋ค. Kafka๊ฐ ์ถฉ๋ํ๊ณ ํ๋ก์ธ์ค๊ฐ ์ค์ง๋ฉ๋๋ค.
์ด๋ฒคํธ ์ค์ฌ API๋?
์ด ์ง๋ฌธ์ ๋ํ ์ข์ ๋๋ต์ Martin Fowler์ ๋ณด๊ณ ์(GOTO 2017)์ ์์ต๋๋ค.
๊ฐ๋ตํ๊ฒ ์ฐ๋ฆฌ๊ฐ ํ ์ผ:
- ๋ค์์ ํตํด ๋ชจ๋ ๋น๋๊ธฐ ๊ตํ์ ๋ง๋ฌด๋ฆฌํฉ๋๋ค. ์ด๋ฒคํธ ์ ์ฅ. ๊ด์ฌ ์๋ ๋ชจ๋ ์๋น์์๊ฒ ๋คํธ์ํฌ๋ฅผ ํตํด ์ํ ๋ณ๊ฒฝ์ ๋ํด ์๋ฆฌ๋ ๋์ ์ค์ ์ ์ฅ์์ ์ํ ๋ณ๊ฒฝ์ ๋ํ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๊ณ ํด๋น ์ฃผ์ ์ ๊ด์ฌ์ด ์๋ ์๋น์๋ ๊ฑฐ๊ธฐ์ ๋ํ๋๋ ๋ชจ๋ ๋ด์ฉ์ ์ฝ์ต๋๋ค.
- ์ด ๊ฒฝ์ฐ ์ด๋ฒคํธ๋ ์๋ฆผ(์๋ฆผ) ์ด๋๊ฐ์ ๋ญ๊ฐ๊ฐ ๋ฐ๋์๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ฃผ๋ฌธ ์ํ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. ์๋ฆผ์ ํฌํจ๋์ง ์์ ์ํ ๋ณ๊ฒฝ์ ์๋ฐ๋๋ ์ผ๋ถ ๋ฐ์ดํฐ์ ๊ด์ฌ์ด ์๋ ์๋น์๋ ์ํ๋ฅผ ์ง์ ํ์ธํ ์ ์์ต๋๋ค.
- ์ต๋ ์ต์ ์ ๋ณธ๊ฒฉ์ ์ธ ์ด๋ฒคํธ ์์ฑ์ด๋ฉฐ, ๊ตญ๊ฐ ์ด์ , ์ฌ๊ธฐ์๋ ์ฒ๋ฆฌ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ฆ, ์ด๋์ ์๋์ง, ์ด๋ค ์ํ๋ก ์ด๋ํ๋์ง, ๋ฐ์ดํฐ๊ฐ ์ ํํ ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋์๋์ง ๋ฑ์ด ์์ต๋๋ค. ์ ์ผํ ์ง๋ฌธ์ ์คํ ๊ฐ๋ฅ์ฑ๊ณผ ์ ์ฅํ ์ ์๋ ์ ๋ณด์ ์์ ๋๋ค.
ํ๋ถ ๋๊ตฌ ์ถ์์ ์ผํ์ผ๋ก ์ฐ๋ฆฌ๋ ์ธ ๋ฒ์งธ ์ต์ ์ ์ฌ์ฉํ์ต๋๋ค. ์์ธํ ์ ๋ณด๋ฅผ ์ถ์ถํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ฐ ๋จ์ํ๋์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์๋ก์ด ์ด๋ฒคํธ๊ฐ ์๋น์๋ก๋ถํฐ ๋ช ํํ ๊ฐ์ ธ์ค๊ธฐ ์์ฒญ์ ๋๋์ผ๋ก ์์ฑํ๋ ์๋๋ฆฌ์ค๋ ์ ๊ฑฐ๋์์ต๋๋ค.
ํ๋ถ ๋๊ตฌ ์๋น์ค ๋ก๋๋์ง ์์, ๊ทธ๋์ Kafka์๋ ํ์์ฑ๋ณด๋ค ํ์ ๋ง์ด ๋ ๋ง์ต๋๋ค. ํ๋ถ ์๋น์ค๊ฐ ๊ณ ๋ถํ ํ๋ก์ ํธ๊ฐ ๋๋ค๋ฉด ์ฌ์ ์ด ๊ธฐ๋ปํ ๊ฒ ๊ฐ์ง๋ ์์ต๋๋ค.
์๋ ๊ทธ๋๋ก ๋น๋๊ธฐ ๊ตํ
๋น๋๊ธฐ ๊ตํ์ ๊ฒฝ์ฐ PHP ๋ถ์์์๋ ์ผ๋ฐ์ ์ผ๋ก RabbitMQ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์์ฒญ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ฌ ๋๊ธฐ์ด์ ๋ฃ์๊ณ , ๋์ผํ ์๋น์ค์ ์๋น์๋ ์ด๋ฅผ ์ฝ๊ณ ๋ณด๋์ต๋๋ค(๋๋ ๋ณด๋ด์ง ์์์ต๋๋ค). API ์์ฒด์ ๊ฒฝ์ฐ Lamoda๋ Swagger๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ฐ๋ฆฌ๋ API๋ฅผ ์ค๊ณํ๊ณ ์ด๋ฅผ Swagger๋ก ์ค๋ช ํ๋ฉฐ ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ๋ํ ์ฝ๊ฐ ํฅ์๋ JSON RPC 2.0์ ์ฌ์ฉํฉ๋๋ค.
์ผ๋ถ ์ฅ์์์๋ ESB ๋ฒ์ค๊ฐ ์ฌ์ฉ๋๊ณ ์ผ๋ถ๋ activeMQ์์ ์คํ๋์ง๋ง ์ผ๋ฐ์ ์ผ๋ก RabbitMQ - ํ์ค.
๋น๋๊ธฐ ๊ตํ ์์
์ด๋ฒคํธ ๋ฒ์ค๋ฅผ ํตํ ๊ตํ์ ์ค๊ณํ ๋ ๋น์ ๋ฅผ ์ถ์ ํ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ฒคํธ ๊ตฌ์กฐ ์ค๋ช ์ ํตํด ํฅํ ๋ฐ์ดํฐ ๊ตํ์ ์ค๋ช ํฉ๋๋ค. yaml ํ์์์๋ ์ฝ๋ ์์ฑ์ ์ง์ ์ํํด์ผ ํ์ผ๋ฉฐ ์์ฑ๊ธฐ๋ ์ฌ์์ ๋ฐ๋ผ DTO๋ฅผ ์์ฑํ๊ณ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ด๋ฅผ ์ฌ์ฉํ๋๋ก ๊ฐ๋ฅด์นฉ๋๋ค. ์ธ๋๋ ๋ ๊ฐ์ง ์ธ์ด๋ก ์งํ๋ฉ๋๋ค - ๊ณจ๋๊ณผ PHP. ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์์ฑ๊ธฐ๋ golang์ผ๋ก ์์ฑ๋์์ผ๋ฏ๋ก gogi๋ผ๋ ์ด๋ฆ์ด ๋ถ์์ต๋๋ค.
Kafka์ ์ด๋ฒคํธ ์์ฑ์ ์ผ๋ฐ์ ์ธ ๊ฒ์
๋๋ค. Kafka Confluent์ ์ฃผ์ ์ํฐํ๋ผ์ด์ฆ ๋ฒ์ ์๋ ์๋ฃจ์
์ด ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ณตํ ๊ฒฝ์ฐ์๋ ๋๋ต ๋น์ทํ ์ฌ์ ์ด ์๋๋ฐ, ๋๋ต ๋น์ทํ ์๋ฃจ์ ์ ๋ง๋ Zalando๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ์ง ๋ชปํ๋ค๋ ๊ฒ์ด ์์ด๋ฌ๋ํฉ๋๋ค.
์ถ์ ์ ์ํคํ ์ฒ ํจํด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Kafka์์ ์ง์ ์ฝ์ง๋ง ์ด๋ฒคํธ ๋ฒ์ค๋ฅผ ํตํด์๋ง ์๋๋ค. Kafka์๋ ๋ธ๋ก์ปค, ๋ฐธ๋ฐ์ ๋ฑ ์ฝ์ ์ค๋น๊ฐ ๋ง์ด ๋์ด ์์ผ๋ฉฐ ์ํ ํ์ฅ์ ์ํ ์ค๋น๊ฐ ์ด๋ ์ ๋ ์ค๋น๋์ด ์์ผ๋ฏ๋ก ์ด๋ฅผ ์ ์งํ๊ณ ์ถ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ๋์ ๊ฒ์ดํธ์จ์ด(์ด๋ฒคํธ ๋ฒ์ค)๋ฅผ ํตํด ๋ น์์ ์๋ฃํ๊ณ ์ถ์๊ณ ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๋ฒคํธ ๋ฒ์ค
์๋๋ฉด ์ด๋ฒคํธ ๋ฒ์ค. ์ด๊ฒ์ ๋ช ๊ฐ์ง ์ค์ํ ์ญํ ์ ์ํํ๋ ์ํ ๋น์ ์ฅ http ๊ฒ์ดํธ์จ์ด์ ๋๋ค.
- ๊ฒ์ฆ ์์ฑ โ ์ด๋ฒคํธ๊ฐ ์ฐ๋ฆฌ์ ์ฌ์์ ์ถฉ์กฑํ๋์ง ํ์ธํฉ๋๋ค.
- ์ด๋ฒคํธ ๋ง์คํฐ ์์คํ ์ฆ, ์ด๊ฒ์ ์ด๋ค ๊ตฌ์กฐ๊ฐ ์ ํจํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋์ง์ ๋ํ ์ง๋ฌธ์ ๋ตํ๋ ํ์ฌ์ ์ฃผ์์ด์ ์ ์ผํ ์์คํ ์ ๋๋ค. ์ ํจ์ฑ ๊ฒ์ฌ์๋ ๋จ์ํ ์ฝํ ์ธ ๋ฅผ ์๊ฒฉํ๊ฒ ์ง์ ํ๊ธฐ ์ํ ๋ฐ์ดํฐ ์ ํ๊ณผ ์ด๊ฑฐํ์ด ํฌํจ๋ฉ๋๋ค.
- ํด์ ํจ์ ์ค๋ฉ์ ๊ฒฝ์ฐ - Kafka ๋ฉ์์ง ๊ตฌ์กฐ๋ ํค-๊ฐ์ด๋ฉฐ ํค ํด์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋์ ๋ฃ์์ง ๊ณ์ฐ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ ๊ฐ์ํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ถ ๋๊ธฐ์ ์์ ์ผํ๊ณ ์์ต๋๋ค. ์ ๋ญ๊ฐ๋ฅผ ๋ฐ๊พธ๋์? ์ด๊ฒ์ ์คํ์ด๋ค, ์ฐ๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ป์ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค.
1:n+1 ๊ตํ(์ผ๋๋ค)
Kafka๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ก์ด ์๋น์๋ฅผ API์ ๋งค์ฐ ์ฝ๊ฒ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
์ฌ๋ฌ ์์คํ (๋ฐ ์ผ๋ถ ์๋ก์ด ์์คํ )์์ ๋์์ ์ต์ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ ๋๋ ํ ๋ฆฌ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด์ ์๋ set-API๋ฅผ ๊ตฌํํ๋ ๋ฒ๋ค์ ๊ฐ๋ฐํ์ผ๋ฉฐ ๋ง์คํฐ ์์คํ ์ ์๋น์ ์ฃผ์๊ฐ ํต๋ณด๋์์ต๋๋ค. ์ด์ ๋ง์คํฐ ์์คํ ์ ์ฃผ์ ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ณด๋ด๊ณ ๊ด์ฌ ์๋ ๋ชจ๋ ์ฌ๋์ด ์ด๋ฅผ ์ฝ์ต๋๋ค. ์๋ก์ด ์์คํ ์ด ๋ํ๋ฌ์ต๋๋ค. ์ฃผ์ ์ ๋ฑ๋กํ์ต๋๋ค. ์, ๋ฒ๋ค๋ ์์ง๋ง ๋ ๊ฐ๋จํฉ๋๋ค.
BOB์ ์ผ๋ถ์ธ ํ๋ถ ๋๊ตฌ์ ๊ฒฝ์ฐ Kafka๋ฅผ ํตํด ๋๊ธฐํ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค. ์ง๋ถ์๋ ๋์ด ๋ฐํ๋์๋ค๊ณ ํ์๋ฉ๋๋ค. BOB, RT๊ฐ ์ด๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ผ๋ฉฐ Fiscalization Service๊ฐ ์ด๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์ํ๋ฅผ ๋ฐํํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ณ ๊ฐ์๊ฒ ์ฃผ๋ฌธ/๋ฐํ์ ๊ดํ ์์์ ์๋ฆฌ๋ ํตํฉ ์๋ฆผ ์๋น์ค๋ฅผ ๋ง๋ค ๊ณํ์ด ์์ต๋๋ค. ์ด์ ์ด ์ฑ
์์ ์์คํ
๊ฐ์ ๋ถ์ฐ๋ฉ๋๋ค. Kafka์์ ๊ด๋ จ ์ ๋ณด๋ฅผ ํฌ์ฐฉํ๊ณ ์ด์ ์๋ตํ๋๋ก ์๋ฆผ ์๋น์ค๋ฅผ ๊ต์กํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํฉ๋๋ค(๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์์คํ
์์๋ ์ด๋ฌํ ์๋ฆผ์ ๋นํ์ฑํํฉ๋๋ค). ์๋ก์ด ์ง์ ๊ตํ์ ํ์ํ์ง ์์ต๋๋ค.
๋ฐ์ดํฐ ์ค์ฌ
์์คํ ๊ฐ ์ ๋ณด๋ ํฌ๋ช ํด์ง๋๋ค. ์ด๋ค "ํผ๋ฌป์ ๊ธฐ์ "์ ๊ฐ๊ณ ์๋ , ๋ฐฑ๋ก๊ทธ๊ฐ ์ผ๋ง๋ ๋ง๋ ์๊ด์์ต๋๋ค. Lamoda์๋ ์์คํ ์์ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ฌ ๋น์ฆ๋์ค ๋ฐ ์ง๋ฅํ ์์คํ ๋ชจ๋์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํ์์ผ๋ก ๋ณํํ๋ ๋ฐ์ดํฐ ๋ถ์ ๋ถ์๊ฐ ์์ต๋๋ค. Kafka๋ฅผ ์ฌ์ฉํ๋ฉด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ฒ ์ ๊ณตํ๊ณ ํด๋น ์ ๋ณด ํ๋ฆ์ ์ต์ ์ํ๋ก ์ ์งํ ์ ์์ต๋๋ค.
๋ณต์ ๋ก๊ทธ
RabbitMQ์ฒ๋ผ ๋ฉ์์ง๋ฅผ ์ฝ์ ํ์๋ ๋ฉ์์ง๊ฐ ์ฌ๋ผ์ง์ง ์์ต๋๋ค. ์ด๋ฒคํธ์ ์ฒ๋ฆฌํ๊ธฐ์ ์ถฉ๋ถํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ๊ฐ์ฒด์ ๋ํ ์ต๊ทผ ๋ณ๊ฒฝ ๋ด์ญ์ด ์์ผ๋ฉฐ, ์ํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ์ ์์ต๋๋ค.
๋ณต์ ๋ก๊ทธ์ ์ ์ฅ ๊ธฐ๊ฐ์ ์ด ์ฃผ์ ์ ๋ํ ์ฐ๊ธฐ ๊ฐ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฉฐ Kafka๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฅ ์๊ฐ ๋ฐ ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ ๋ํ ์ ํ์ ์ ์ฐํ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค. ์ง์ค์ ์ธ ์ฃผ์ ์ ๊ฒฝ์ฐ, ๋จ๊ธฐ์ ์ผ๋ก ์๋ํ์ง ์๋ ๊ฒฝ์ฐ์๋ ์ ๋ณด๊ฐ ์ฌ๋ผ์ง๊ธฐ ์ ์ ๋ชจ๋ ์๋น์๊ฐ ํด๋น ์ ๋ณด๋ฅผ ์ฝ์ ์๊ฐ์ ๊ฐ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ์ผ ๋จ์, ์ง์ํ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค.
๋ค์์ผ๋ก, Kafka์ ์ต์ํ์ง ์์ ์ฌ๋๋ค์ ์ํด ๋ฌธ์์ ๋ํด ์กฐ๊ธ ๋ค์ ์ค๋ช
ํฉ๋๋ค. (๊ทธ๋ฆผ๋ ๋ฌธ์์์ ๊ฐ์ ธ์จ ๊ฒ์
๋๋ค.)
AMQP์๋ ๋๊ธฐ์ด์ด ์์ต๋๋ค. ์๋น์๋ฅผ ์ํด ๋๊ธฐ์ด์ ๋ฉ์์ง๋ฅผ ์๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ๋์ ๋๊ธฐ์ด์ ๋์ผํ ๋น์ฆ๋์ค ๋ ผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋์ ์์คํ ์์ ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ฌ๋ฌ ์์คํ ์ ์๋ ค์ผ ํ๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋๊ธฐ์ด์ ์ฐ๋๋ก ์ง์ํ๊ฑฐ๋ ๋๊ธฐ์ด ์์ฒด๋ฅผ ๋ณต์ ํ๋ ํฌ์์ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ๊ตํ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
Kafka๋ ๋น์ทํ ์ถ์ํ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํ์ , ๋ฉ์์ง๋ฅผ ์์ฑํ์ง๋ง ์ฝ์ ํ์๋ ์ฌ๋ผ์ง์ง ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Kafka์ ์ฐ๊ฒฐํ๋ฉด ๋ชจ๋ ๋ฉ์์ง๋ฅผ ์์ ํ๊ณ ์ค๋จํ ๋ถ๋ถ์ ์ ์ฅํ ์ ์๋ ์ต์ ์ด ์ ๊ณต๋ฉ๋๋ค. ์ฆ, ์์ฐจ์ ์ผ๋ก ์ฝ์ผ๋ฉด ๋ฉ์์ง๋ฅผ ์ฝ์ ๊ฒ์ผ๋ก ํ์ํ์ง ์๊ณ ๊ณ์ ์ฝ์ ์ ์๋ ID๋ฅผ ์ ์ฅํฉ๋๋ค. ์ค์ ํ ID๋ฅผ ์คํ์ ์ด๋ผ๊ณ ํ๋ฉฐ ๋ฉ์ปค๋์ฆ์ ์ปค๋ฐ ์คํ์ ์ ๋๋ค.
๋ฐ๋ผ์, ๋ค๋ฅธ ๋ก์ง์ด ๊ตฌํ๋ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ํ ๊ตญ๊ฐ์ ๋ํด 4๊ฐ์ ์ธ์คํด์ค์ BOB๊ฐ ์์ต๋๋ค. Lamoda๋ ๋ฌ์์, ์นด์ํ์คํ, ์ฐํฌ๋ผ์ด๋, ๋ฒจ๋ก๋ฃจ์์ ์์ต๋๋ค. ๋ณ๋๋ก ๋ฐฐํฌ๋๋ฏ๋ก ๊ตฌ์ฑ๊ณผ ์์ฒด ๋น์ฆ๋์ค ๋ก์ง์ด ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ์ด๋ ๊ตญ๊ฐ๋ฅผ ๊ฐ๋ฆฌํค๋์ง ๋ฉ์์ง์ ํ์ํฉ๋๋ค. ๊ฐ ๊ตญ๊ฐ์ ๊ฐ BOB ์๋น์๋ ์๋ก ๋ค๋ฅธ groupId๋ก ์ฝ๊ณ ๋ฉ์์ง๊ฐ ์ ์ฉ๋์ง ์์ผ๋ฉด ๊ฑด๋๋๋๋ค. ์ฆ์ ์คํ์ +1์ ์ปค๋ฐํฉ๋๋ค. ๋์ผํ ์ฃผ์ ๋ฅผ ๊ฒฐ์ ์๋น์ค์์ ์ฝ๋ ๊ฒฝ์ฐ ๋ณ๋์ ๊ทธ๋ฃน์ผ๋ก ์ฝ์ผ๋ฏ๋ก ์คํ์ ์ด ๊ต์ฐจํ์ง ์์ต๋๋ค.
์ด๋ฒคํธ ์๊ตฌ์ฌํญ:
- ๋ฐ์ดํฐ ์์ ์ฑ. ์ด๋ฒคํธ๊ฐ ์ฒ๋ฆฌ๋ ์ ์์ ๋งํผ ์ถฉ๋ถํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์ถ์ต๋๋ค.
- ๋ฌด๊ฒฐ์ฑ ์ฐ๋ฆฌ๋ ์ด๋ฒคํธ๊ฐ ์ผ๊ด์ฑ์ด ์๊ณ ์ฒ๋ฆฌํ ์ ์๋์ง ํ์ธํ๋ ์์ ์ Events-bus์ ์์ํฉ๋๋ค.
- ์์๊ฐ ์ค์ํฉ๋๋ค. ๋ฐํ์ ๊ฒฝ์ฐ ์ญ์ฌ๋ฅผ ๊ฐ์ง๊ณ ์์ ์ ํด์ผ ํฉ๋๋ค. ์๋ฆผ์ ๊ฒฝ์ฐ ์์๋ ์ค์ํ์ง ์์ต๋๋ค. ๋์ข ์๋ฆผ์ธ ๊ฒฝ์ฐ ์ด๋ค ์์๊ฐ ๋จผ์ ๋์ฐฉํ๋์ง์ ๊ด๊ณ์์ด ์ด๋ฉ์ผ์ ๋์ผํฉ๋๋ค. ํ๋ถ์ ๊ฒฝ์ฐ ๋ช ํํ ์ ์ฐจ๊ฐ ์์ต๋๋ค. ์ฃผ๋ฌธ์ ๋ณ๊ฒฝํ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๊ณ ํ๋ถ์ด ์์ฑ๋๊ฑฐ๋ ์ฒ๋ฆฌ๋์ง ์์ผ๋ฉฐ ๊ฒฐ๊ตญ ๋ค๋ฅธ ์ํ๊ฐ ๋ฉ๋๋ค.
- ์ผ๊ด์ฑ. ์์ ์ด ์๊ณ ์ด์ API ๋์ ์ด๋ฒคํธ๋ฅผ ๋ง๋ญ๋๋ค. ์๋ก์ด ์ด๋ฒคํธ์ ๊ธฐ์กด ์ด๋ฒคํธ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ ๋ณด๋ฅผ ๋น ๋ฅด๊ณ ์ ๋ ดํ๊ฒ ์๋น์ค์ ์ ๋ฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. ์ด๋ ๋ณ๋์ Git ์ ์ฅ์ ๋ฐ ์ฝ๋ ์์ฑ๊ธฐ์ ๊ณตํต ์ฌ์์ ํตํด ๋ฌ์ฑ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์๋ก ๋ค๋ฅธ ์๋น์ค์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์กฐ์ ๋ฉ๋๋ค.
๋ผ๋ชจ๋ค์ ์นดํ์นด
์ธ ๊ฐ์ง Kafka ์ค์น๊ฐ ์์ต๋๋ค.
- ๋ก๊ทธ;
- ์ฐ๊ตฌ๊ฐ๋ฐ
- ์ด๋ฒคํธ ๋ฒ์ค.
์ค๋ ์ฐ๋ฆฌ๋ ๋ง์ง๋ง ์์ ์ ๋ํด์๋ง ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ์ด๋ฒคํธ ๋ฒ์ค์๋ 3๊ฐ์ ๋ธ๋ก์ปค(์๋ฒ)์ 27๊ฐ์ ํ ํฝ๋ง ์ค์น๋์ด ์์ด ๋๊ท๋ชจ ์ค์น๊ฐ ์์ต๋๋ค. ์์น์ ์ผ๋ก ํ๋์ ์ฃผ์ ๋ ํ๋์ ํ๋ก์ธ์ค์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ฏธ๋ฌํ ์ ์ด๋ฏ๋ก ์ง๊ธ๋ถํฐ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
์๋ rps ๊ทธ๋ํ์
๋๋ค. ํ๋ถ ํ๋ก์ธ์ค๋ ์ฒญ๋ก์ ์ (์, X์ถ)์ผ๋ก ํ์๋์ด ์์ผ๋ฉฐ, ๋ถํ์ ์ ์ ์ฝํ
์ธ ์
๋ฐ์ดํธ ํ๋ก์ธ์ค์
๋๋ค.
Lamoda ์นดํ๋ก๊ทธ์๋ ์๋ฐฑ๋ง ๊ฐ์ ์ ํ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ๋ฐ์ดํฐ๋ ํญ์ ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ์ผ๋ถ ์ปฌ๋ ์ ์ ์ ํ์ ๋ค๋จ์ด์ง๊ณ , ์ด๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ์๋ก์ด ์ปฌ๋ ์ ์ด ์ถ์๋๋ฉฐ, ์๋ก์ด ๋ชจ๋ธ์ด ์นดํ๋ก๊ทธ์ ์ง์์ ์ผ๋ก ๋ฑ์ฅํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ด์ผ ๊ณ ๊ฐ์๊ฒ ๋ฌด์์ด ํฅ๋ฏธ๋ก์ธ์ง ์์ธกํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ฏ๋ก ๋์์์ด ์๋ก์ด ๊ฒ์ ๊ตฌ์ ํ๊ณ ์ฌ์ง์ ์ฐ๊ณ ์ง์ด์ฅ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
๋ถํ์ ํผํฌ๋ ์ ํ ์ ๋ฐ์ดํธ, ์ฆ ์ ํ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋ค. ๋จ์๋ค์ด ์ฌ์ง์ ์ฐ๊ณ , ์ฌ์ง์ ์ฐ๊ณ , ๋ ์ฐ๋ ๋ชจ์ต์ด ๋ณด์ด๋ค์! โ ์ด๋ฒคํธ ํฉ์ ๋ก๋ํ์ต๋๋ค.
Lamoda ์ด๋ฒคํธ ์ฌ์ฉ ์ฌ๋ก
์ฐ๋ฆฌ๋ ๋ค์ ์์ ์ ์ํด ๊ตฌ์ฑ๋ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐํ ์ํ ์ถ์ : ๋ชจ๋ ๊ด๋ จ ์์คํ ์ ํด๋ฆญ ์ ๋ ๋ฌธ๊ตฌ ๋ฐ ์ํ ์ถ์ . ๊ฒฐ์ , ์ํ, ์ฌ์ ํ, ์๋ฆผ. ์ฌ๊ธฐ์์ ์ฐ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ ํ ์คํธํ๊ณ , ๋๊ตฌ๋ฅผ ๋ง๋ค๊ณ , ๋ชจ๋ ๋ฒ๊ทธ๋ฅผ ์์งํ๊ณ , ๋ฌธ์๋ฅผ ์์ฑํ๊ณ , ๋๋ฃ๋ค์๊ฒ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ์์ต๋๋ค.
- ์ ํ ์นด๋ ์ ๋ฐ์ดํธ ์ค: ๊ตฌ์ฑ, ๋ฉํ๋ฐ์ดํฐ, ํน์ฑ. ํ ์์คํ ์ ์ฝ๊ณ (ํ์๋จ) ์ฌ๋ฌ ์์คํ ์ ์๋๋ค.
- ์ด๋ฉ์ผ, ํธ์ ๋ฐ SMS: ์ฃผ๋ฌธ์ด ์ ์๋์์ต๋๋ค, ์ฃผ๋ฌธ์ด ๋์ฐฉํ์ต๋๋ค, ๋ฐํ์ด ์ ์๋์์ต๋๋ค ๋ฑ, ๊ทธ ์๊ฐ ๋ง์ต๋๋ค.
- ์ฌ๊ณ , ์ฐฝ๊ณ ๋ฆฌ๋ด์ผ โ ํ๋ชฉ์ ์ ๋์ ์ ๋ฐ์ดํธ, ์ซ์๋ง ํฌํจ: ์ฐฝ๊ณ ๋์ฐฉ, ๋ฐํ. ์ํ ์์ฝ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์์คํ ์ ์ต์ ๋ฐ์ดํฐ๋ก ์๋ํด์ผ ํฉ๋๋ค. ํ์ฌ ์ฌ๊ณ ์ ๋ฐ์ดํธ ์์คํ ์ ๋งค์ฐ ๋ณต์กํ๋ฏ๋ก Kafka์์๋ ์ด๋ฅผ ๋จ์ํํ ์์ ์ ๋๋ค.
- ๋ฐ์ดํฐ ๋ถ์ (R&D ๋ถ์), ML ๋๊ตฌ, ๋ถ์, ํต๊ณ. ์ฐ๋ฆฌ๋ ์ ๋ณด๊ฐ ํฌ๋ช ํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. Kafka๋ ์ด์ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
์ด์ ์ง๋ XNUMX๊ฐ์ ๋์ ๋ฐ์ํ ํฐ ๋ณํ์ ํฅ๋ฏธ๋ก์ด ๋ฐ๊ฒฌ์ ๋ํ ๋ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ ๋๋ค.
๋์์ธ ๋ฌธ์
์๋ฅผ ๋ค์ด ์ ์ฒด ์ ๋ฌ ํ๋ก์ธ์ค๋ฅผ Kafka๋ก ์ ์กํ๋ ๋ฑ ์๋ก์ด ์์ ์ ์ํํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด์ ํ๋ก์ธ์ค์ ์ผ๋ถ๊ฐ BOB์ ์ฃผ๋ฌธ ์ฒ๋ฆฌ์์ ๊ตฌํ๋ฉ๋๋ค. ์ฃผ๋ฌธ์ ๋ฐฐ์ก ์๋น์ค๋ก ์ด์ ํ๊ณ ์ค๊ฐ ์ฐฝ๊ณ ๋ก ์ด๋ํ๋ ๋ฑ์ ์ด๋ฉด์๋ ์ํ ๋ชจ๋ธ์ด ์์ต๋๋ค. ์ ์ฒด ๋จ์ผ์ฒด(์ฌ์ง์ด XNUMX๊ฐ ํฌํจ)์ ์ ๋ฌ ์ ์ฉ API๊ฐ ๋ง์ด ์์ต๋๋ค. ๊ทธ๋ค์ ๋ฐฐ๋ฌ์ ๋ํด ํจ์ฌ ๋ ๋ง์ด ์๊ณ ์์ต๋๋ค.
๋น์ทํ ์์ญ์ธ ๊ฒ ๊ฐ์ง๋ง BOB์ ์ฃผ๋ฌธ ์ฒ๋ฆฌ์ ๋ฐฐ์ก ์์คํ ์ ์ํ๋ ๋ค๋ฆ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ถ ํ๋ฐฐ ์๋น์ค๋ ์ค๊ฐ ์ํ๋ฅผ ๋ณด๋ด์ง ์๊ณ ์ต์ข ์ํ์ธ "๋ฐฐ๋ฌ๋จ" ๋๋ "๋ถ์ค"๋ง ๋ณด๋ ๋๋ค. ๋ฐ๋๋ก ๋ค๋ฅธ ์ฌ๋๋ค์ ์ํ ์ด๋์ ๋ํด ๋งค์ฐ ์์ธํ ๋ณด๊ณ ํฉ๋๋ค. ๋ชจ๋ ์ฌ๋์ ์์ ๋ง์ ํ์ธ ๊ท์น์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ์ด๋ฉ์ผ์ด ์ ํจํ๋ฏ๋ก ์ฒ๋ฆฌ๋๋ค๋ ์๋ฏธ์ ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ๋ ์ ํจํ์ง ์์ง๋ง ์ฐ๋ฝ ๊ฐ๋ฅํ ์ ํ ๋ฒํธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฃผ๋ฌธ์ ๊ณ์ ์ฒ๋ฆฌ๋๋ฉฐ ๋๊ตฐ๊ฐ๋ ๊ทธ๋ฌํ ์ฃผ๋ฌธ์ด ์ ํ ์ฒ๋ฆฌ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ๋งํ ๊ฒ์ ๋๋ค.
๋ฐ์ดํฐ ์คํธ๋ฆผ
Kafka์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ตฌ์ฑํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ์์ ์๋ ์ฌ๋ฌ ๊ฐ์ง ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ต์ ์ ํํ๋ ์์ ์ด ํฌํจ๋๋ฉฐ, ์ด๋ฅผ ๋ชจ๋ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํ ์ฃผ์ ์์์, ์๋๋ฉด ๋ค๋ฅธ ์ฃผ์ ์์์?
์ด๋ฒคํธ ์ฌ์์ด ์์ต๋๋ค. BOB์์๋ ์ด๋ฌํ ์ฃผ๋ฌธ์ด ๋ฐฐ์ก๋์ด์ผ ํจ์ ๊ธฐ๋กํ๊ณ ์ฃผ๋ฌธ ๋ฒํธ, ๊ตฌ์ฑ, ์ผ๋ถ SKU ๋ฐ ๋ฐ์ฝ๋ ๋ฑ์ ํ์ํฉ๋๋ค. ์ํ์ด ์ฐฝ๊ณ ์ ๋์ฐฉํ๋ฉด ๋ฐฐ์ก ์ํ, ํ์์คํฌํ ๋ฐ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ BOB์์ ์ด ๋ฐ์ดํฐ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ๊ณ ์ถ์ต๋๋ค. ๋ฐฐ์ก์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ์ญ๊ณผ์ ์ด ์์ต๋๋ค. ์ด๊ฒ๋ ๊ฐ์ ์ด๋ฒคํธ์ธ๊ฐ์? ์๋๋ฉด ์์ฒด ์ฃผ์ ์ ๋ง๋ ๋ณ๋์ ๊ตํ์ ๋๊น?
์๋ง๋ ๊ทธ๋ค์ ๋งค์ฐ ์ ์ฌํ ๊ฒ์ด๋ฉฐ ํ๋์ ์ฃผ์ ๋ฅผ ๋ง๋ค๋ ค๋ ์ ํน์ ๊ทผ๊ฑฐ๊ฐ ์์ต๋๋ค. ์๋ํ๋ฉด ๋ณ๋์ ์ฃผ์ ๋ ๋ณ๋์ ์๋น์, ๋ณ๋์ ๊ตฌ์ฑ, ์ด ๋ชจ๋ ๊ฒ์ ๋ํ ๋ณ๋์ ์์ฑ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ค์ ์๋๋๋ค.
์๋ก์ด ๋ถ์ผ ๋๋ ์๋ก์ด ์ด๋ฒคํธ?
ํ์ง๋ง ๋์ผํ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ชจ๋ ์ ๋ฌ ์์คํ ์ด BOB๊ฐ ์์ฑํ ์ ์๋ ์ข ๋ฅ์ DTO๋ฅผ ์์ฑํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ค์๊ฒ ID๋ฅผ ๋ณด๋์ง๋ง ๊ทธ๋ค์ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฅํ์ง ์์๊ณ , ์ด๋ฒคํธ ๋ฒ์ค ํ๋ก์ธ์ค๋ฅผ ์์ํ๋ค๋ ๊ด์ ์์ ์ด ํ๋๋ ํ์์ ๋๋ค.
์ด ํ๋๊ฐ ํ์๋ผ๋ ์ด๋ฒคํธ ๋ฒ์ค ๊ท์น์ ๋์ ํ๋ฉด BOB ๋๋ ์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ ์ถ๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ ๊ท์น์ ์ค์ ํด์ผ ํฉ๋๋ค. ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์๋น์ค ์ ๋ฐ์ ๊ฑธ์ณ ํ์ฐ๋๊ธฐ ์์ํฉ๋๋ค. ์ด๋ ๊ทธ๋ฆฌ ํธ๋ฆฌํ์ง ์์ต๋๋ค.
๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ์ ์ง์ ์ธ ๊ฐ๋ฐ์ ๋ํ ์ ํน์ ๋๋ค. ์ด๋ฒคํธ์ ๋ญ๊ฐ๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค๊ณ ํ๋๋ฐ, ์๊ฐํด๋ณด๋ฉด ๋ณ๋์ ์ด๋ฒคํธ์์ด์ผ ํ์์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ ๊ณํ์์๋ ๋ณ๋์ ์ด๋ฒคํธ๊ฐ ๋ณ๋์ ์ฃผ์ ์ ๋๋ค. ๋ณ๋์ ์ฃผ์ ๋ ์์์ ์ค๋ช ํ ์ ์ฒด ํ๋ก์ธ์ค์ ๋๋ค. ๊ฐ๋ฐ์๋ JSON ์คํค๋ง์ ๋ค๋ฅธ ํ๋๋ฅผ ์ถ๊ฐํ๊ณ ๋ค์ ์์ฑํ๊ณ ์ถ์ ์ ํน์ ๋ฐ์ต๋๋ค.
ํ๋ถ์ ๊ฒฝ์ฐ ๋ฐ๋ ๋ง์ ์ด๋ฒคํธ ํ์ฌ์ ๋์ฐฉํ์ต๋๋ค. ํ๋ถ ์ ๋ฐ์ดํธ๋ผ๋ ๋ฉํ ์ด๋ฒคํธ๊ฐ ํ๋ ์์๋๋ฐ, ์ฌ๊ธฐ์๋ ์ด ์ ๋ฐ์ดํธ๊ฐ ์ค์ ๋ก ๋ฌด์์ธ์ง ์ค๋ช ํ๋ ์ ํ ํ๋๊ฐ ์์์ต๋๋ค. ์ด๋ก ์ธํด ์ฐ๋ฆฌ๋ ์ด ์ ํ์ผ๋ก ์ด ์ด๋ฒคํธ๋ฅผ ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๋ ๊ฒ์ฆ์๊ฐ ์๋ "ํ๋ฅญํ" ์ค์์น๋ฅผ ๊ฐ๊ฒ ๋์์ต๋๋ค.
์ด๋ฒคํธ ๋ฒ์ ๊ด๋ฆฌ
Kafka์์ ๋ฉ์์ง์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํํฐ์ ์ฝ๊ธฐ ์์ ๋ณด์ฅ
Kafka ๋ด๋ถ์ ์ฃผ์ ๋ ํํฐ์ ์ผ๋ก ๋๋ฉ๋๋ค. ์ด๋ ์ํฐํฐ์ ๊ฑฐ๋์๋ฅผ ์ค๊ณํ๋ ๋์์๋ ๊ทธ๋ค์ง ์ค์ํ์ง ์์ง๋ง ์ด๋ฅผ ์๋นํ๊ณ ํ์ฅํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ ๋๋ ์ค์ํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์๋ Kafka์์ ํ๋์ ์ฃผ์ ๋ฅผ ์์ฑํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ ํํฐ์ ์ด ์ฌ์ฉ๋๋ฉฐ ์ด ์ฃผ์ ์ ๋ชจ๋ ๋ฉ์์ง๊ฐ ํด๋น ํํฐ์ ์ผ๋ก ์ด๋๋ฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์๋น์๋ ์ด๋ฌํ ๋ฉ์์ง๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฝ์ต๋๋ค. ์ด์ ์๋ก ๋ค๋ฅธ ๋ ์๋น์๊ฐ ๋ฉ์์ง๋ฅผ ์ฝ์ ์ ์๋๋ก ์์คํ ์ ํ์ฅํด์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์๋ฅผ ๋ค์ด SMS๋ฅผ ๋ณด๋ด๋ ๊ฒฝ์ฐ Kafka์ ์ถ๊ฐ ํํฐ์ ์ ๋ง๋ค๋๋ก ์ง์ํ๋ฉด Kafka๋ ๋ฉ์์ง๋ฅผ ๋ ๋ถ๋ถ(์ฌ๊ธฐ์ ์ ๋ฐ, ์ฌ๊ธฐ์์ ์ ๋ฐ)์ผ๋ก ๋ถํ ํ๊ธฐ ์์ํฉ๋๋ค.
์นดํ์นด๋ ๊ทธ๊ฒ๋ค์ ์ด๋ป๊ฒ ๋๋๋์? ๊ฐ ๋ฉ์์ง์๋ ๋ณธ๋ฌธ(JSON์ด ์ ์ฅ๋จ)๊ณผ ํค๊ฐ ์์ต๋๋ค. ์ด ํค์ ํด์ ํจ์๋ฅผ ์ฒจ๋ถํ๋ฉด ๋ฉ์์ง๊ฐ ์ด๋ ํํฐ์ ์ ๋ค์ด๊ฐ์ง ๊ฒฐ์ ๋ฉ๋๋ค.
ํ๋ถ์ ๊ฒฝ์ฐ ์ด๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ ๊ฐ์ ํํฐ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ณ๋ ฌ ์๋น์๊ฐ ์ฒซ ๋ฒ์งธ ์ด๋ฒคํธ๋ณด๋ค ๋ ๋ฒ์งธ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ๊ฐ๋ฅ์ฑ์ด ์์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ํด์ ํจ์๋ ๋์ผํ ํค๋ฅผ ๊ฐ์ง ๋ฉ์์ง๊ฐ ๋์ผํ ํํฐ์ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ด๋ฒคํธ์ ๋ช ๋ น
์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ง๋ฉดํ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ๋๋ค. ์ด๋ฒคํธ๋ ํน์ ์ด๋ฒคํธ์ ๋๋ค. ์๋ฅผ ๋ค์ด ํญ๋ชฉ์ด ์ทจ์๋์๊ฑฐ๋ ํ๋ถ์ด ๋ฐ์ํ ๋ฑ ์ด๋๊ฐ์์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋ค๊ณ ๋งํฉ๋๋ค(something_happened). ๋๊ตฐ๊ฐ ์ด๋ฌํ ์ด๋ฒคํธ๋ฅผ ๋ฃ๋ ๊ฒฝ์ฐ "item cancelled"์ ๋ฐ๋ผ ํ๋ถ ์ํฐํฐ๊ฐ ์์ฑ๋๊ณ "refund failed"๊ฐ ์ค์ ์ด๋๊ฐ์ ๊ธฐ๋ก๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๋์์ธํ ๋ ์ด๋ฒคํธ๋ฅผ ํ๋์ด ์์ฑํ๊ณ ์ถ์ง๋ ์์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ด๋ฒคํธ๋ฅผ ์ฝ์ ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ์์กดํฉ๋๋ค. Something_happened(item_canceled, Refund_refunded)๊ฐ ์๋, Something_should_be_done์ ์ฐ๊ณ ์ถ์ ์ ํน์ด ํฝ๋๋ค. ์๋ฅผ ๋ค์ด, ์ํ์ ๋ฐํํ ์ค๋น๊ฐ ๋์์ต๋๋ค.
ํํธ์ผ๋ก๋ ์ด๋ฒคํธ๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ๊ฒ์ธ์ง ์ ์ํฉ๋๋ค. ๋ฐ๋ฉด์ ์ผ๋ฐ์ ์ธ ์ด๋ฒคํธ ์ด๋ฆ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ์ฌ๊ธฐ์์ do_something ๋ช ๋ น๊น์ง ๋ฉ์ง ์์ต๋๋ค. ํ์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ์ด ์ด๋ฒคํธ๋ฅผ ์ฝ์๋ค๋ ๋ณด์ฅ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ๋น์ ์ด ๊ทธ๊ฒ์ ์ฝ์ผ๋ฉด, ๋น์ ์ ๊ทธ๊ฒ์ ์ฑ๊ณต์ ์ผ๋ก ์ฝ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ๋น์ ์ด ๊ทธ๊ฒ์ ์ฑ๊ณต์ ์ผ๋ก ์ฝ์๋ค๋ฉด ๋น์ ์ ๋ญ๊ฐ๋ฅผ ํ๋ค๋ ๊ฒ์ด๊ณ , ๊ทธ ๋ญ๊ฐ๋ ์ฑ๊ณตํ ๊ฒ์ ๋๋ค. ์ด๋ฒคํธ๊ฐ do_something์ด ๋๋ ์๊ฐ ํผ๋๋ฐฑ์ด ํ์ํ๊ฒ ๋๋๋ฐ ๊ทธ๊ฒ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
RabbitMQ์ ๋น๋๊ธฐ ๊ตํ์์ ๋ฉ์์ง๋ฅผ ์ฝ์ ๋ http๋ก ์ด๋ํ๋ฉด ์ต์ํ ๋ฉ์์ง๊ฐ ์์ ๋์๋ค๋ ์๋ต์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์นดํ์นด์ ๊ธ์ ์ฐ๋ค ๋ณด๋ฉด ์นดํ์นด์ ์ด ๋ฉ์์ง๊ฐ ์๋๋ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์ง ์ ํ ์ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ์๋ต ์ด๋ฒคํธ๋ฅผ ๋์ ํ๊ณ ๋ชจ๋ํฐ๋ง์ ์ค์ ํ์ฌ ๋๋ฌด ๋ง์ ์ด๋ฒคํธ๊ฐ ์ ์ก๋๋ฉด ์ด ์๊ฐ์ด ์ง๋๋ฉด ๋์ผํ ์์ ์๋ต ์ด๋ฒคํธ๊ฐ ๋์ฐฉํด์ผ ํ์ต๋๋ค. ์ด๊ฒ์ด ์ผ์ด๋์ง ์์ผ๋ฉด ๋ญ๊ฐ ์๋ชป๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด, "item_ready_to_refund" ์ด๋ฒคํธ๋ฅผ ์ ์กํ๋ฉด ํ๋ถ์ด ์์ฑ๋๊ณ ๊ธ์ก์ด ํด๋ผ์ด์ธํธ์ ๋ฐํ๋๋ฉฐ "money_refunded" ์ด๋ฒคํธ๊ฐ ์ฐ๋ฆฌ์๊ฒ ์ ์ก๋ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ํ์ง๋ง ์ด๋ ํ์คํ์ง ์์ ๋ชจ๋ํฐ๋ง์ด ํ์ํ๋ค.
๋์์ค
์๋นํ ๋ช ๋ฐฑํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฃผ์ ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฝ์๋๋ฐ ์๋ชป๋ ๋ฉ์์ง๊ฐ ์์ผ๋ฉด ์๋น์๊ฐ ์ถ๋ฝํ๊ณ ๋ ์ด์ ์งํ๋์ง ์์ต๋๋ค. ๋น์ ์ ํ์ ๋ชจ๋ ์๋น์๋ฅผ ์ค์ง, ์ฝ๊ธฐ๋ฅผ ๊ณ์ํ๋ ค๋ฉด ์คํ์ ์ ๋ ์ปค๋ฐํ์ธ์.
์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ํด ์๊ณ ์์๊ณ , ๊ทธ๊ฒ์ ๋ฏฟ์์ง๋ง, ๊ทธ๋ฐ ์ผ์ด ์ผ์ด๋ฌ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ์ด๋ฒคํธ ๋ฒ์ค์ ๊ด์ ์์๋ ์ด๋ฒคํธ๊ฐ ์ ํจํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ์ ๊ด์ ์์๋ ์ด๋ฒคํธ๊ฐ ์ ํจํ์ง๋ง PostgreSQL์ ๊ด์ ์์๋ ์ ํจํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ์ต๋๋ค. UNSIGNED INT๊ฐ ์๋ MySQL, ์๋ก ์์ฑ๋ ์์คํ ์๋ INT๋ง ์๋ PostgreSQL์ด ์์์ต๋๋ค. ๊ทธ์ ์ฌ์ด์ฆ๋ ์กฐ๊ธ ์์์ ์ด๋๋ ๋ง์ง ์์๋ค. Symfony๋ ์์ธ์ ์ผ๋ก ์ฌ๋งํ์ต๋๋ค. ๋ฌผ๋ก ์ฐ๋ฆฌ๋ ์์ธ์ ์์กดํ๊ณ ์ด ์คํ์ ์ ์ปค๋ฐํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ์์ธ๋ฅผ ํฌ์ฐฉํ์ง๋ง ๊ทธ ์ ์๋ ๋ฉ์์ง๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์นด์ดํฐ๋ฅผ ๋๋ฆฌ๊ณ ์ถ์์ต๋๋ค. ์ด ํ๋ก์ ํธ์ ์นด์ดํฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ผ๋ฉฐ Symfony๋ ์ด๋ฏธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํต์ ์ ์ข ๋ฃํ์ผ๋ฉฐ ๋ ๋ฒ์งธ ์์ธ๋ก ์ธํด ์คํ์ ์ ์ปค๋ฐํ ๊ธฐํ๋ ์์ด ์ ์ฒด ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋์์ต๋๋ค.
์๋น์ค๋ ํ๋์ ์ค๋จ๋์์ต๋๋ค. ๋คํ์ค๋ฝ๊ฒ๋ Kafka๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ์์ง๊ฐ ๋จ์ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ๋์์ง ์์ต๋๋ค. ์์ ์ด ๋ณต์๋๋ฉด ์ฝ๊ธฐ๋ฅผ ์๋ฃํ ์ ์์ต๋๋ค. ํธ์ํด์.
Kafka์๋ ๋๊ตฌ๋ฅผ ํตํด ์์์ ์คํ์ ์ ์ค์ ํ ์ ์๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ํ๋ ค๋ฉด ๋ชจ๋ ์๋น์๋ฅผ ์ค์งํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์๋น์, ์ฌ๋ฐฐํฌ๊ฐ ์๋ ๋ณ๋์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ค๋นํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ Kafka์์ ๋๊ตฌ๋ฅผ ํตํด ์คํ์ ์ ์ด๋ํ ์ ์์ผ๋ฉฐ ๋ฉ์์ง๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
๋ ๋ค๋ฅธ ๋์์ค - ๋ณต์ ๋ก๊ทธ ๋ rdkafka.so - ์ฐ๋ฆฌ ํ๋ก์ ํธ์ ์ธ๋ถ ์ฌํญ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ PHP๋ฅผ ์ฌ์ฉํ๋ฉฐ PHP์์๋ ์์น์ ์ผ๋ก ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ rdkafka.so ์ ์ฅ์๋ฅผ ํตํด Kafka์ ํต์ ํ๋ฉฐ ์ผ์ข ์ ๋ํผ๊ฐ ์์ต๋๋ค. ์ด์ฉ๋ฉด ์ด๊ฒ์ ์ฐ๋ฆฌ ๊ฐ์ธ์ ์ธ ์ด๋ ค์์ผ์ง๋ ๋ชจ๋ฅด์ง๋ง, ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ฝ์ ๋ถ๋ถ์ ๋จ์ํ ๋ค์ ์ฝ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ฌ์ด ์ผ์ด ์๋๋ผ๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ํํธ์จ์ด ๋ฌธ์ ๊ฐ์์์ต๋๋ค.
ํํฐ์ ์์ ์ ์ธ๋ถ ์ฌํญ์ผ๋ก ๋์๊ฐ์ ๋ฌธ์์ ๋ฐ๋ก ๊ธฐ๋ก๋์ด ์์ต๋๋ค. ์๋น์ >= ์ฃผ์ ํํฐ์ . ๊ทธ๋ฌ๋ ๋๋ ๋ด๊ฐ ์ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ฆ๊ฒ ์ด๊ฒ์ ๋ํด ์๊ฒ๋์์ต๋๋ค. ํ์ฅํ๊ณ ์๋น์๊ฐ ๋ ๋ช ์ธ ๊ฒฝ์ฐ ์ต์ํ ๋ ๊ฐ์ ํํฐ์ ์ด ํ์ํฉ๋๋ค. ์ฆ, 20๋ง ๊ฐ์ ๋ฉ์์ง๊ฐ ๋์ ๋ ํ๋์ ํํฐ์ ์ด ์๊ณ ์๋ก ๋ง๋ ๊ฒฝ์ฐ ๋ฉ์์ง ์๊ฐ ๊ณง ๊ท ๋ฑํด์ง์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ ๊ฐ์ ๋ณ๋ ฌ ์๋น์๋ฅผ ๊ฐ์ง๋ ค๋ฉด ํํฐ์ ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
๋ชจ๋ํฐ๋ง
์ฐ๋ฆฌ๊ฐ ๋ชจ๋ํฐ๋งํ๋ ๋ฐฉ์์ ๋ณด๋ฉด ๊ธฐ์กด ์ ๊ทผ ๋ฐฉ์์ ์ด๋ค ๋ฌธ์ ๊ฐ ์๋์ง ๋์ฑ ๋ช ํํด์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ต๊ทผ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ ํ ์๋ฅผ ๊ณ์ฐํ๊ณ ์ด์ ๋ฐ๋ผ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฒคํธ๊ฐ ๋ฐ์ํด์ผ ํ๋ฉฐ ์ด ์ซ์๋ฅผ ๋ชจ๋ํฐ๋ง ์์คํ ์ ๋ณด๋ ๋๋ค. ๊ทธ๋ฐ ๋ค์ Kafka์์ ์ค์ ๋ก ๊ธฐ๋ก๋ ์ด๋ฒคํธ ์์ธ ๋ ๋ฒ์งธ ์ซ์๋ฅผ ์ป์ต๋๋ค. ๋ถ๋ช ํ, ์ด ๋ ์ซ์์ ์ฐจ์ด๋ ํญ์ XNUMX์ด์ด์ผ ํฉ๋๋ค.
๋ํ ์์ฐ์์ ์ํ, ์ด๋ฒคํธ ๋ฒ์ค๊ฐ ๋ฉ์์ง๋ฅผ ์์ ํ๋์ง ์ฌ๋ถ, ์๋น์์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ ์ฐจํธ์์ ํ๋ถ ๋๊ตฌ๋ ์ ์๋ํ์ง๋ง BOB์๋ ๋ถ๋ช
ํ ๋ช ๊ฐ์ง ๋ฌธ์ (ํ๋์ ์ ์ )๊ฐ ์์ต๋๋ค.
๋๋ ์ด๋ฏธ ์๋น์ ๊ทธ๋ฃน ์ง์ฐ์ ๋ํด ์ธ๊ธํ์ต๋๋ค. ๋๋ต์ ์ผ๋ก ๋งํ๋ฉด ์ฝ์ง ์์ ๋ฉ์์ง ์์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ ์๋น์๋ ๋น ๋ฅด๊ฒ ์ผํ๋ฏ๋ก ์ง์ฐ์ ๋๊ฐ 0์ด์ง๋ง ๋๋ก๋ ๋จ๊ธฐ์ ์ธ ํผํฌ๊ฐ ์์ ์ ์์ต๋๋ค. Kafka๋ ์ด ์์
์ ์ฆ์ ์ํํ ์ ์์ง๋ง ํน์ ๊ฐ๊ฒฉ์ ์ค์ ํด์ผ ํฉ๋๋ค.
ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค
API ์๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ค์์ bob-live-fifa ๊ทธ๋ฃน, return.update.v1 ํํฐ์
, ์ํ OK, ์ง์ฐ 0 - ๋ง์ง๋ง ์ต์ข
์คํ์
๋ฑ์
๋๋ค.
๋ชจ๋ํฐ๋ง ์
๋ฐ์ดํธ_at SLA(์ค๋จ) ๋๋ ์ด๋ฏธ ์ธ๊ธํ๋ค. ์๋ฅผ ๋ค์ด, ์ํ์ด ๋ฐํ ์ค๋น ์ํ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ Cron์ ์ค์นํฉ๋๋ค. ์ด๋ 5๋ถ ๋ด์ ์ด ๊ฐ์ฒด๊ฐ ํ๋ถ๋์ง ์์ผ๋ฉด(์ฐ๋ฆฌ๋ ๊ฒฐ์ ์์คํ
์ ํตํด ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋์ ๋ฐํํจ) ํ์คํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ฉฐ ์ด๋ ํ์คํ ์ง์์ด ํ์ํ ๊ฒฝ์ฐ์
๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๊ทธ๋ฌํ ๋ด์ฉ์ ์ฝ๋ Cron์ ์ฌ์ฉํ๊ณ 0๋ณด๋ค ํฌ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋
๋๋ค.
์์ฝํ์๋ฉด, ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ํธ๋ฆฌํฉ๋๋ค.:
- ์ฌ๋ฌ ์์คํ ์์ ์ ๋ณด๊ฐ ํ์ํฉ๋๋ค.
- ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ ์ค์ํ์ง ์์ต๋๋ค.
- ํ์ฌ๋ ์์ ํ์ฌ๊ฐ ๊ฑฐ์ ์์ต๋๋ค.
๊ธฐ์ฌ์๋ Kafka์ ๋น๋๊ธฐ API๋ผ๋ ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ์ฃผ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ง๋ง ์ด์ ๊ด๋ จํ์ฌ ํ ๋ฒ์ ๋ง์ ๊ฒ์ ์ถ์ฒํ๊ณ ์ถ์ต๋๋ค.
์ฒซ์งธ, ๋ค์HighLoad ++ XNUMX์๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. XNUMX์์๋ ์ํธํํ ๋ฅด๋ถ๋ฅดํฌ ๋ฒ์ ์ด ๋์ฌ ์์ ์ด๋ฉฐ, XNUMX์์๋ ๋ ธ๋ณด์๋น๋ฅด์คํฌ์ ๋์ ๋ถํ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
๋์งธ, ๋ณด๊ณ ์ ์์ฑ์์ธ Sergei Zaika๋ ์ง์ ๊ด๋ฆฌ์ ๊ดํ ์๋ก์ด ์ปจํผ๋ฐ์ค์ ํ๋ก๊ทธ๋จ ์์ํ ํ์์ ๋๋ค.์ง์์ปจํผ๋ฐ์ค . ์ด ์ปจํผ๋ฐ์ค๋ 26์ XNUMX์ผ ํ๋ฃจ ๋์ ์งํ๋์ง๋ง ํ๋ก๊ทธ๋จ์ ๋งค์ฐ ๊ฐ๋ ฌํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ XNUMX์์ด๊ฒ ์งPHP ๋ฌ์์ ะธRIT++ (DevOpsConf ํฌํจ) - ๊ฑฐ๊ธฐ์์ ์ฃผ์ ๋ฅผ ์ ์ํ๊ณ , ๊ฒฝํ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ , ์ฑ์์ง ์๋ฟ์ ๋ํด ๋ถํํ ์๋ ์์ต๋๋ค.
์ถ์ฒ : habr.com