๋ชจ๋๋ฆฌ์ ๊ธฐ๋ฐ์ ๋ ๊ฑฐ์ ์์คํ ์ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ก ์ ํํ๋ ๊ฒ์ ์ฌ๋ฌ ๊ธฐ์ ์ด ์ฑ์ฅํ๋ฉด์ ์๋ก์ด ๋น์ฆ๋์ค ์๊ฑด์ ์ถฉ์กฑํด์ผ ํ๊ฑฐ๋ ๊ท๋ชจ๋ฅผ ๋๋ฆด ๋ ๋ง์ด ๊ฑฐ์ณ๊ฐ๋ ๋จ๊ณ์ด๋ค.
์ค๋์ ์ด ๊ณผ์ ์์ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๋ ํ์ํ "๋ฐ์ดํฐ ํด๋ฐฉ"์ ๋ํด ์๊ธฐํด๋ณด๋ ค๊ณ ํ๋ค.
0. ๋ฐ์ดํฐ ํด๋ฐฉ์ด๋?
๋ฐ์ดํฐํด๋ฐฉ(data liberation)์ ๊ต์ฐจ ๋๋ฉ์ธ ๋ฐ์ดํฐ ์ธํธ(cross-domain data set)๋ฅผ ์๋ณํ์ฌ ๊ฐ ์ด๋ฒคํธ ์คํธ๋ฆผ์ ๋ฐํํ๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต์ด๋ค.
๋๋ 'ํด๋ฐฉ'์ ์๋ฏธ๋ฅผ '๋์์ฃผ๋ค'๋ก ํด์ํ๋๋ฐ, ๊ธฐ์กด(๋ ๊ฑฐ์) ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ๋ฌถ์ฌ์๋ ๋ฐ์ดํฐ๋ค์ ๋ค๋ฅธ ์๋น์ค๊ฐ ์๋น(์ด๋ฒคํธ ๋ฑ)ํ ์ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ด๋ผ๊ณ ํด์ํ๋ค.
๋ฐ์ดํฐ๋ฅผ ํด๋ฐฉํ๋ฉด ๋จ์ผ ์ง์ค ๊ณต๊ธ์(factor)์ ์ ๊ณตํ๊ณ , ์์คํ ๊ฐ ์ง์ ๊ฒฐํฉ์ ๋ฐฉ์งํ ์ ์๋ค.
๋น์ฐํ ์๊ธฐ์ง๋ง, ๋ ๊ฑฐ์ ์์คํ ์ ๋ฐ์ดํฐ ์ธํธ์ ์ด๋ฒคํธ ์คํธ๋ฆผ์ ์์ ํ ๋๊ธฐํ ๋์ด์ผ ํ๋ค.
์ด๋ฒคํธ ๋ฐํ ์ค ์ฐฐ๋์ ์๊ฐ์๋ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅผ ์ ์์ง๋ง, ์ต์ข ์ผ๊ด์ฑ(eventual consistency)์ผ๋ก ๊ฒฐ๊ตญ ๋๊ธฐํ๊ฐ ๋ ๊ฒ์ด๋ค.
๊ฐ์ฅ ์ฐ์ ์ ์ผ๋ก ํด๋ฐฉ์์ผ์ผ ํ ๋ฐ์ดํฐ๋ ๊ฐ์ฅ ์ฐ๊ด์ฑ์ด ๋ง๊ณ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ์ด๋ค.
1. ๋ฐ์ดํฐ ํด๋ฐฉ ํจํด
๋ฐ์ดํฐ๋ฅผ ํด๋ฐฉํ๋ค๋ ๊ฒ์ ๊ฒฐ๊ตญ ์๋ก์ด ๋จ์ผ ์ง์ค ๊ณต๊ธ์์ ๋ง๋ ๋ค๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ DB์ ์ ์ฒด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ด์์ผ ํ๊ณ , ์ดํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์์ , ์ญ์ ํ๋ฉด์ ์ต์ ์ํ๋ก ์ ์งํด์ผ ํ๋ค.
์ฟผ๋ฆฌ ๊ธฐ๋ฐ(query-based)
ํ๋ถ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ฟผ๋ฆฌํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค.
DB์ ์ข ๋ฅ์ ์๊ด์์ด ์์ ์ด ๊ฐ๋ฅํ๋ค.
๋ก๊ทธ ๊ธฐ๋ฐ(log-based)
ํ๋ถ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๊ธฐ๋กํ ๋ก๊ทธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค.
๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ์ง์ํ๋ DB๋ง ๊ฐ๋ฅํ๋ค.
ํ ์ด๋ธ ๊ธฐ๋ฐ(table-based)
์ถ๋ ฅ ํ๋ก ์ฌ์ฉํ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ํธ์ํ๊ณ , ๋ค๋ฅธ ์ค๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ํ ์ด๋ธ์ ์ฟผ๋ฆฌํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ด๋ฒคํธ๋ก ๋ฐํํ๋ค.
DB๊ฐ ํธ๋์ญ์ ๋ฐ ์ถ๋ ฅ ํ ๋ฉ์ปค๋์ฆ์ ๋ชจ๋ ์ง์ํ๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํ๋ค.
์ธ ๊ฐ์ง ํจํด์ ๋ชจ๋ ์ต๊ทผ ์ ๋ฐ์ดํธ ์๊ฐ(created_at) ์ปฌ๋ผ์ ์ด์ฉํ์ฌ ์์๋๋ก ์์ฐํ๋ค๋ ๊ณตํต์ ์ด ์๋ค.
2. ๋ฐ์ดํฐ ํด๋ฐฉ ํ๋ ์์ํฌ
๋ฐ์ดํฐ ํด๋ฐฉ์ ์ํ ์ฌ๋ฌ ํ๋ ์์ํฌ๋ ์๋์ ๊ฐ๋ค.
- ์นดํ์นด ์ปค๋ฅํธ (Kafka Connect)
- ์ํ์น ๊ณ ๋ธ๋ฆฐ (Apache Gobblin)
- ์ํ์น ๋์ดํ์ด (Apache NiFi)
๋ฐ๋์ ์ ์ฉ ํ๋ ์์ํฌ๊ฐ ์์ด์ผ ๋ฐ์ดํฐ ํด๋ฐฉ ํ๋ก์ธ์ค๊ฐ ๊ฐ๋ฅํ ๊ฒ์ ์๋๊ณ , ์ง์ ์์ฐํ๋ ๊ฒ์ด ์ ํฉํ ์์คํ ๋ ๋ง๋ค.
์ค์ ๋ก ํ๋ ์์ํฌ๋ ์ํฐ ํจํด์ ์กฐ์ฅํ ์๋ ์๊ณ , ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ ธ์ถ์์ผ ๊ฒฐํฉ๋๋ฅผ ์ฆ๊ฐ์ํค๋ ๊ฒฝ์ฐ๋ ์๋ค.
๋ฐ๋ผ์ ์ฌ๋งํ๋ฉด ํ์์ ์ง์ ๋ฐ์ดํฐ ํด๋ฐฉ ํ๋ก์ธ์ค๋ฅผ ์ง์ ๊ตฌํํ๋๊ฒ ๋ซ๋ค.
3. ์ฟผ๋ฆฌ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ํด๋ฐฉ
DB ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฒคํธ๋ก ๋ฐํํ๋ ํจํด์ด๋ค.
ํด๋ผ์ด์ธํธ๊ฐ API, SQL ์ธ์ด ๋ฑ์ ์ด์ฉํ์ฌ ์ํ๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์์ฒญํ๋ฉด, ๋ฐ์ดํฐ ์ธํธ๋ ์ต์ด 1ํ ๋ฒํฌ ์ฟผ๋ฆฌํ ํ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธ ํ์ฌ ์ถ๋ ฅ ์ด๋ฒคํธ ์คํธ๋ฆผ์ ์์ฐํ๋ค.
3-1. ๋ฒํฌ ๋ก๋ฉ
๋ฒํฌ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก ํด๋งํ๋ฉฐ ์ ์ฒด ํ ์ด๋ธ์ ๋ก๋ํ๋ ๋ฐฉ์์ด๋ค.
๋ฒํฌ ๋ก๋๋ ์ ์ฒด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
3-2. ์ฆ๋ถ ํ์์คํฌํ ๋ก๋ฉ
์ด์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ์ต์ข ํ์์คํฌํ(updated_at)์ ๊ธฐ์ค์ผ๋ก ํ์ํ ๋ฐ์ดํฐ๋ง ์ฟผ๋ฆฌํ์ฌ ์ ์ฌํ๋ ๋ฐฉ์์ด๋ค.
3-3. ์๋ ์ฆ๊ฐ ID ๋ก๋ฉ
ํ์์คํฌํ ๋ก๋ฉ๊ณผ ๋น์ทํ๊ฒ, ์๋ ์ฆ๊ฐ ID (AutoIncreament ID)๋ฅผ ์ด์ฉํ์ฌ ๋ง์ง๋ง์ผ๋ก ์ฟผ๋ฆฌ๋ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์๋์ฆ๊ฐ ์ ์ ๋๋ Long ํ์ ํ๋๊ฐ ํ์ํ๋ค.
๋ถ๋ณ ๋ ์ฝ๋๊ฐ ์๋ ํ ์ด๋ธ์ ์ฟผ๋ฆฌํ ๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๐ก ์ฆ๋ถ ์ ๋ฐ์ดํธ์ ๊ฒฝ์ฐ, ํด๋ง ๋น๋์ ์ ๋ฐ์ดํธ ์ง์ฐ ์๊ฐ์ ์ ์ ํด์ผ ํ๋ค.
์ ๋ฐ์ดํธ๋ฅผ ์์ฃผํ๋ฉด ์ ๋ฐ์ดํธ ์ง์ฐ์ด ์ค์ด๋ค์ง๋ง ์ ์ฅ์์ ๊ฑธ๋ฆฌ๋ ๋ถํ๋์ด ๋์ด๋๊ณ ,
ํด๋ง ๋น๋๊ฐ ๋์์ง๋ฉด ์ ์ฟผ๋ฆฌ ๋ก๋ ์ค ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉฐ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฎ์ด์ฐ๋ race condition์ด ๋ฐ์ํ๋ค.
3-4. ๋ง์ถค ์ฟผ๋ฆฌ
ํด๋ผ์ด์ธํธ ์ฟผ๋ฆฌ ์ธ์ด๋ก ์ ํํ์ฌ ๋์ฉ๋ ๋ฐ์ดํฐ ์ค ์ผ๋ถ๋ง ํ์ํ๊ฑฐ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ ธ์ถ์ ๋ง์๋ ์ฌ๋ฌ ํ ์ด๋ธ์ ์กฐ์ธํ๊ณ ๋ฐ์ ๊ทํ ํ ๋ ์ฌ์ฉํ๋ค.
๊ฐ ์ ํด์ฌ๋ณ ํ์ํ ๋ฐ์ดํฐ๋ง ํํฐ๋งํด์ ๋ณด๋ด๋ ๊ฒฝ์ฐ ์๋ง๋ ๋ฐฉ์์ด๋ค.
์ฟผ๋ฆฌ ๊ธฐ๋ฐ ์ ๋ฐ์ดํธ์ ์ฅ์
- ๋ง์ถค์ฑ
- ๋ชจ๋ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ฟผ๋ฆฌํ ์ ์๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ๋ง์๊ป ์ฟผ๋ฆฌ ์ต์ ์ ์ง์ ํ ์ ์์.
- ๋
๋ฆฝ์ ํด๋ง ์ฃผ๊ธฐ
- SLA๊ฐ ์๊ฒฉํ ์ฟผ๋ฆฌ๋ ์คํ ๋น๋๋ฅผ ๋์ด๊ณ , ๊ทธ ์ธ๋ ๋ฎ์ถ๋ ์์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์ ๋ต์ ์ผ๋ก ์ ์ฝํ ์ ์์.
- ๋ด๋ถ ๋ฐ์ดํฐ ๋ชจ๋ธ ๊ฒฉ๋ฆฌ
- RDB๋ด ๋ทฐ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ๋ด๋ถ ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ ๋ถ๋ฆฌํ ์ ์์. ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ ธ์ถ์ ๋ง์ ์ ์์.
SLA(Service Level Agreement)
์๋น์ค ์์ค ๊ณ์ฝ(SLA) : ์๋น์ค ์ ๊ณต์ ์ฒด์ ๊ณ ๊ฐ ๊ฐ์ ๊ณ์ฝ์ผ๋ก, ์ ๊ณต๋ ์๋น์ค์ ์์๋๋ ์ฑ๋ฅ ์์ค์ ๋ปํ๋ค.
SLA๊ฐ ์๊ฒฉํ๋ค๋ ๊ฒ์ ๋น ๋ฅธ ์๋ต๊ณผ ๊ฐ๋ฅํ ์ต์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ผ ํจ์ ๋ปํ๋ค๊ณ ํ ์ ์๊ฒ ๋ค.
์ฟผ๋ฆฌ๊ธฐ๋ฐ ์ ๋ฐ์ดํธ์ ๋จ์
- ํ์์คํฌํ ํ์
- ํ ์ด๋ธ์ ๋ฐ๋์ ํ์์คํฌํ๊ฐ ์์ด์ผ ํจ.
- ํ๋ ์ญ์ ์ถ์ ๋ถ๊ฐ
- ํ๋ ์ญ์ (hard delete)๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ค์ด๋์ง ์์. ํ๋๊ทธ ๊ธฐ๋ฐ์ soft delete๋ง ์ถ์ ๊ฐ๋ฅํจ.
- ๋ฐ์ดํฐ ์ธํธ ์คํค๋ง - ์ด๋ฒคํธ๊ฐ ์ทจ์ฝํ ์์กด ๊ด๊ณ
- ์ด๋ฒคํธ์ ์คํค๋ง๊ฐ ํธํ๋์ง ์๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ์คํค๋ง๊ฐ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํจ.
- ๊ฐํ์ ์บก์ณ
- ์ผ์ ์ฃผ๊ธฐ๋ก ํด๋ง๋๊ธฐ ๋๋ฌธ์ ๋์ผํ ๋ ์ฝ๋์ ๋ํ ์ผ๋ จ์ ๋ณ๊ฒฝ๋ค์ ๊ฐ์ ๊ฐ๋ณ์ ์ด๋ฒคํธ๋ก๋ง ๋ณด์.
- ์์ฐ ๋ฆฌ์์ค ๋ญ๋น
- ์ฟผ๋ฆฌ ์ฌ์ฉ์ ์์คํ ๋ฆฌ์์ค ์ฌ์ฉํ๋ฏ๋ก ์ง์ฐ์๊ฐ์ด ์ปค์ง ์ ์์.
- ์ฝ๊ธฐ ์ ์ฉ replica๋ก ํด์ํ ์ ์์ง๋ง ์ถ๊ฐ ๋น์ฉ๊ณผ ๋ณต์ก๋๊ฐ ์ฆ๊ฐ
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์ํ ์ฟผ๋ฆฌ ์ฑ๋ฅ ๊ฐ๋ณ์ฑ
- ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ฐ์ดํฐ๊ฐ ์ผ์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ ์ฑ๋ฅ๋ ์ผ์ ํ์ง ์์
- ํด๋ง ์ฃผ๊ธฐ์ ์ํด ์ด์ ์ฟผ๋ฆฌ ์๋ฃ ์ ๋ค์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉด์ race condition์ด ๋ฐ์ํ ์ ์์.
4. ๋ก๊ทธ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ํด๋ฐฉ - CDC
ํด๋น ๋ด์ฉ์ ์ด๋ฏธ ๋ช ๋ฒ ๋ค๋ค๋ ๋ด์ฉ์ด๋ค.
DB์ ๋ด์ฅ๋ CDC ๋ก๊ทธ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
DB๋ด์์ ๋ฐ์ํ๋ ๋ชจ๋ ์ผ์ด ์ ์ฉ ๋ก๊ทธ ํํ๋ก ๋จ๊ฒจ์ง๋ฉด, ํด๋น ๊ธฐ๋ก์ ์ด์ฉํ์ฌ ์ด๋ฒคํธ๋ก ๋ฐํํ๋ ๊ฒ์ด๋ค.
๋ชจ๋ DB๊ฐ ์ง์ํ๋ ๊ธฐ๋ฅ์ ์๋์ง๋ง, MySQL(binlog), PostgreSQL(write-ahead log) ๋ฑ ๋ช๋ช ๋ง์ด ์ฐ๋ RDB์์๋ ์ง์ํ๋ค.
๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ณผ์ ์์๋, ์ฒ์๋ถํฐ ๋ฐ์ํ ๋ณ๊ฒฝ ๊ธฐ๋ก์ ๋ชจ๋ ํฌํจํ๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ์์ ์ ๊ธฐ์กด ๋ฐ์ดํฐ์ ์ค๋ ์ต์ ์ฐ์ด์ผ ํ๋ค.
์ด ๊ณผ์ ์ ๋ถํธ์คํธ๋ํ(bootstrapping)์ด๋ผ๊ณ ํ๋ค.
์ฒด์ธ์ง ๋ก๊ทธ(change log)๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ํด๋ก๋ Debezium์ด ์ ๋ช ํ๋ค.
๋ฐ์ดํฐ ์ ์ฅ์ ๋ก๊ทธ์ ์ฅ์
- ์ญ์ ์ถ์
- ์ฟผ๋ฆฌ ๊ธฐ๋ฐ๊ณผ ๋ฌ๋ฆฌ ๋ก๊ทธ์ ๋ ์ฝ๋ ์ญ์ ๊ฐ ํฌํจ๋๊ธฐ ๋๋ฌธ์ ์ญ์ ์ด๋ฒคํธ๋ ๋ณํํ ์ ์๋ค.
- DB์ํฅ ์ต์ํ
- ์ ํ ๊ธฐ์ ๋ก๊ทธ, ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๋ DB ์ฑ๋ฅ์ ๋ณ ์ํฅ ์์ด ์ํํ ์ ์๋ค.
- ์ ์ง์ฐ ์
๋ฐ์ดํธ (low-latency updates)
- ๋ก๊ทธ์ ๊ธฐ๋ก๋๋ฉด ๋ฐ๋ก ์ ๋ฐ์ดํธ๋ฅผ ์ ํํ๋ค. ๋ค๋ฅธ ๋ฐ์ดํฐ ํด๋ฐฉ ํจํด๋ณด๋ค ์ง์ฐ์๊ฐ์ด ์์ฃผ ์งง๋ค.
๋ฐ์ดํฐ ์ ์ฅ์ ๋ก๊ทธ์ ๋จ์
- ๋ด๋ถ ๋ฐ์ดํฐ ๋ชจ๋ธ ๋
ธ์ถ
- ๋ด๋ถ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ์ฒด์ธ์ง ๋ก๊ทธ์ ์ํด ์์ ํ ๋ ธ์ถ๋๋ค.
- DB ์ธ๋ถ์์์ ๋ฐ์ ๊ทํ
- ๋๋ถ๋ถ DB ์ธ๋ถ์์ ๋ฐ์ ๊ทํ๊ฐ ์ผ์ด๋๋ค. ๋ฐ๋ผ์ ์ ๊ทํํ ์ด๋ฒคํธ๋ฅผ ์์ฑํด์ผ ํ ์ ์๋๋ฐ, ๊ทธ๋ฅผ ์ํด ์ธ๋ํค ์กฐ์ธ ๋ฐ ๋ฐ์ ๊ทํ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ค.
- ๋ฐ์ดํฐ ์คํค๋ง - ์ถ๋ ฅ ์ด๋ฒคํธ ์คํค๋ง ๊ฐ ์ทจ์ฝํ ์์กด ๊ด๊ณ
- ๋ณดํต ๋ฐ์ดํฐ ํด๋ฐฉ ํ๋ก์ธ์ค๊ฐ ์ ์ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ธ๋ถ์ ์กด์ฌํ๋ฏ๋ก ๋ฐ์ดํฐ ์คํค๋ง ๋ณ๊ฒฝ ์ ์ด๋ฒคํธ ์คํค๋ง์ ํธํ๋์ง ์์ ์ ์๋ค.
5. ํ ์ด๋ธ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ํด๋ฐฉ - ์์๋ฐ์ค ํ ์ด๋ธ
์์๋ฐ์ค ํ ์ด๋ธ์ DB ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๊ฐ ๋ก์ฐ ๋จ์๋ก ์ฝ์ ๋๊ณ , ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ง๋ค ์๋ก ๋ฐํ๋๋ ๋ฐฉ์.
๋ด๋ถ ํ ์ด๋ธ ์ ๋ฐ์ดํธ์ ์์๋ฐ์ค ํ ์ด๋ธ ์ ๋ฐ์ดํธ๋ฅผ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด ์ด๋ฒคํธ์ DB ํธ๋์ญ์ ์ ์ ํฉ์ฑ์ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ฒคํธ์ ์ ์ด๋ ํ ๋ฒ ์ ๋ฌ (at-least-once)๋ฅผ ๋ณด์ฅํ ์ ์๋ค.
ํด๋น ํจํด์ ์งง์ ์๊ฐ๋์ ๊ฐ์ ๋ ์ฝ๋๊ฐ ์ฌ๋ฌ๋ฒ ์ ๋ฐ์ดํธ ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ PK๊ฐ ๋ช ํํด์ผ ํ๋ค.
๋ํ, ์๋ ์ฆ๊ฐ ID๋ฅผ ํ์ฉํ์ฌ ๋ฐํ ์์๋ฅผ ๋ณด์ฅํ ์๋ ์๋ค.
Outbox vs CDC
์์๋ฐ์ค ํจํด์ ์๋ก์ด ์ํฐํฐ๋ฅผ ์ ์ํ๊ณ , ์ด๋ฒคํธ ์ ์ฅ/๋ฐํ ๋ชจ๋ DB์ ๋ถํ๋ฅผ ์ค๋ค.
๋ฐ์ดํฐ ์์ด ์ ์ผ๋ฉด ์ ํฉ์ฑ์ ๋ณด์ฅํ๋ ์ข์ ๋ฐฉ๋ฒ์ด์ง๋ง, ๋ฐ์ดํฐ ์์ด ๋ง๋ค๋ฉด CDC ๋ก๊ทธ ํ์ฑ ์ ๋ต์ ๊ณ ๋ คํ๋ ๋ฑ ํ๋ก์ ํธ๋ง๋ค ๋น์ฉ์ ๋ฐ๋ผ ์ ํํ๋ ๊ฒ์ด ์ค์ํ ๊ฒ์ด๋ค.
์คํค๋ง ํธํ์ฑ ๋ณด์ฅ
์์๋ฐ์ค ํ ์ด๋ธ์ ์คํค๋ง๋ฅผ ๋ณด์ฅํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ์์๋ฐ์ค ํ ์ด๋ธ ํธ๋์ญ์ ์ ์ง๋ ฌํ๋ฅผ ํ๋ ๊ฒ์ด๋ค.
์ง๋ ฌํ๊ฐ ์คํจํ๋ฉด ๊ฒฐ๊ตญ ํธ๋์ญ์ ๋ ์คํจํ๋ ๋ด๋ถ ํ ์ด๋ธ์ ๋ชจ๋ ๋กค๋ฐฑ์์ผ ์์๋ฐ์ค ํ ์ด๋ธ๊ณผ ๋ด๋ถ ํ ์ด๋ธ์ ๋๊ธฐํํ ์ ์๋ค.
์ด๋ฅผ ํตํด ๋ด๋ถ ์ํ์ ์ด๋ฒคํธ ๊ฐ์ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ์ ๋ง์ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์ ์๋ค.
์์๋ฐ์ค ํ ์ด๋ธ์ ์ฅ์
- ๋ค์ ์ธ์ด ์ง์
- ์ฌ์ ์คํค๋ง ๊ฐํ
- ์์๋ฐ์ค ํ ์ด๋ธ ์ฝ์ ์ ์ง๋ ฌํ๋ก ์คํค๋ง ํธํ ํ์ธ ๊ฐ๋ฅ
- ๋ด๋ถ ๋ฐ์ดํฐ ๋ชจ๋ธ ๊ฒฉ๋ฆฌ
- ์์๋ฐ์ค ํ ์ด๋ธ ํ๋์ ์ํ๋ ํ๋๋ง ๋ฃ์์ผ๋ก์จ ๋ฐํํ ๋ฐ์ดํฐ๋ฅผ ๊ณ ๋ฅผ ์ ์์
- ๋ฐ์ ๊ทํ
- ์์๋ฐ์ค ํ ์ด๋ธ ์ ์ฅ ์ ํ์ํ ๋งํผ ๋ฐ์ ๊ทํ ๊ฐ๋ฅ
์์๋ฐ์ค ํ ์ด๋ธ์ ๋จ์
- ์ฝ๋ ๋ณ๊ฒฝ ํ์
- ์ ํ๋ฆฌ์ผ์ด์ ๋ด ์ฝ๋๋ฅผ ํ์์ ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํจ
- ๋น์ฆ๋์ค ํ๋ก์ธ์ค ์ฑ๋ฅ์ ์ํฅ
- ํนํ ์ง๋ ฌํ๋ฅผ ํตํ ์คํค๋ง ์ ํจ์ฑ ๊ฒ์ฆ ๊ณผ์ ์์ ๋น์ฆ๋์ค ํ๋ก์ธ์ค์ ์ํฅ์ ์ค ์ ์์.
- ๋๋ ํธ๋์ญ์ ์คํจ ์ ๋น์ฆ๋์ค ์์ ์ค๋จ๋จ
- DB ์ฑ๋ฅ ์ํฅ
6. ๋ฒ์ธ - ํธ๋ฆฌ๊ฑฐ
DB๋ด์์ ํธ๋ฆฌ๊ฑฐ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์์๋ฐ์ค ํ ์ด๋ธ์ ์ ์ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
ํธ๋ฆฌ๊ฑฐ๋ ์ค๋ ์ ๋ถํฐ ์ฌ์ฉํด์๋ ๊ธฐ์ ๋ก, ๊ตฌํ RDB๋ ๋๋ถ๋ถ ๊ฐ์ฌ ํ ์ด๋ธ ์์ฑ ์๋จ์ผ๋ก ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ค.
์ ํด์ง ์กฐ๊ฑด์์ ์๋ ์คํ๋๋๋ก ์ค์ ํ๋ฉฐ, ์คํจ ์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ผ์ผํจ ์ปค๋งจ๋๋ ์คํจํ์ฌ ์์์ ์ ๋ฐ์ดํธ๊ฐ ๋ณด์ฅ๋๋ค.
ํธ๋ฆฌ๊ฑฐ๋ DB ๋ด๋ถ์์ ์คํ๋๋ฏ๋ก ์ง์ํ์ง ์๊ฑฐ๋ ์ ํ๋ ์ธ์ด๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋ํ ๊ฐ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ๋ฉฐ ๋ฐ์ดํฐ, ์คํค๋ง, ๊ฒ์ฆ ๋ก์ง์ ๋ด์๋๋ ์ค๋ฒํค๋๊ฐ ํฌ๊ณ ๋ก๋ํ๋ ๋น์ฉ๋ ํฌ๋ค.
๋ณดํต ์ค๋๋ ๊ธฐ์ ์ด ์ ์ฉ๋ ๋ ๊ฑฐ์ ์์คํ ์์ ์ ์๋ํ๋ฉฐ, CDC ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ๊ธฐ ์๋ง์ ๊ธฐ์ ์ด๋ค.
MySQL 5.0.2๋ถํฐ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ง์ํ๋ค.
ํธ๋ฆฌ๊ฑฐ์ ์ฅ์
- ๋๋ถ๋ถ์ DB๊ฐ ์ง์
- ๋ฐ์ดํฐ ๊ท๋ชจ๊ฐ ์์ ๊ฒฝ์ฐ ์ค๋ฒํค๋๊ฐ ์์
- ๋ง์ถค ๋ก์ง ๊ฐ๋ฅ
ํธ๋ฆฌ๊ฑฐ์ ๋จ์
- ํฐ ์ฑ๋ฅ ์ค๋ฒํค๋
- ๋ณต์กํ ๋ณ๊ฒฝ ๊ด๋ฆฌ
- ๋ฎ์ ํ์ฅ์ฑ
- ์ฌํ ์คํค๋ง ๊ฐํ
- ๋ฐํํ ์ ์๋ ์ด๋ฒคํธ๊ฐ ์์๋ฐ์ค ํ ์ด๋ธ์ ์์ผ ์ ์์.
์ฑ๊ณต์ ์ธ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ก ์ ํฅํ๊ธฐ ์ํด์๋ ํธ๋ ์ด๋ ์คํ๋ฅผ ๊ณ ๋ คํ์ฌ ํ๋ก์ ํธ์ ๋ง๋ ์ ๋ต์ ์ ์ ํํ๊ณ , ์ค์ํ ๋ฐ์ดํฐ๊ฐ ๊นจ๋ํ๊ณ ์ผ๊ด๋๊ฒ ๋ด๊ธธ ์ ์๋๋ก ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์ค์ ๋ก ์คํค๋ง์ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ปจ์๋จธ๊ฐ ์ค๋ฅ๋ฅผ ์ผ์ผํค๋ ์ผ์ด ๋ง์์ผ๋ก ๋ณ๊ฒฝ์ ์ต์ํํ๊ณ , ์ฌ๋งํ๋ฉด ์ค์ํ๋ ํ๋ ์์ํฌ์ ์์กดํ์ง ์๊ณ ํ ์ค์ค๋ก CDC๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค.
์ฐธ๊ณ
Building Event-Driven Microservices: Leveraging Organizational Data at Scale, ์ ๋ค ๋ฒจ๋ฉ์ด
'BackEnd > Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๊พธ ์ง๊ฐํ๋ ์ด๋ฒคํธ๋ ์ด๋ป๊ฒ ํด์ผํ ๊น (0) | 2025.01.14 |
---|---|
MSA๊ตฌ์กฐ ๋ด์์ JPA ์ฐ๊ด๊ด๊ณ (0) | 2024.01.30 |
Apache JMeter๋ก NGNIX์ ๋ก๋๋ฐธ๋ฐ์ฑ ์ฑ๋ฅ ํ ์คํธ (0) | 2023.09.02 |
[NGNIX] ์๋ฒ SSL ์ค์ (0) | 2023.09.02 |
[SLASH23] ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ (0) | 2023.09.02 |