๐Ÿงฉ ์‹œ์Šคํ…œ ๊ฐ„ ๋น„๋™๊ธฐ ์—ฐ๋™ ๋ฐฉ์‹ ์ •๋ฆฌ (๋ฉ”์‹œ์ง• / DB / CDC)

์—…๋ฐ์ดํŠธ:
1 ๋ถ„ ์†Œ์š”

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ๋น„๋™๊ธฐ ์—ฐ๋™์„ ํ™œ์šฉํ•˜๋ฉด,

  • ์‹œ์Šคํ…œ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ 
  • ํ˜ธ์ถœ ์‘๋‹ต ๋Œ€๊ธฐ๋ฅผ ์ค„์ด๋ฉฐ
  • ํŠธ๋ž˜ํ”ฝ ํญ์ฆ ์‹œ์—๋„ ๊ฒฌ๊ณ ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ 3๊ฐ€์ง€ ๋ฐฉ์‹์ด ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค:

  1. ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ (Kafka, RabbitMQ ๋“ฑ)
  2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™œ์šฉ
  3. CDC (Change Data Capture)

1๏ธโƒฃ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜ ์—ฐ๋™

alt

โœ… ๊ฐœ๋…

  • A ์‹œ์Šคํ…œ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ธŒ๋กœ์ปค(Kafka ๋“ฑ) ์— ๋ณด๋‚ด๊ณ 
  • B ์‹œ์Šคํ…œ์ด ์ด๋ฅผ ๊ตฌ๋…ํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ

โœ… ์žฅ์ 

  • ๊ณ ์„ฑ๋Šฅ, ๊ณ ์ฒ˜๋ฆฌ๋Ÿ‰
  • ๋А์Šจํ•œ ๊ฒฐํ•ฉ
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

โš ๏ธ ๊ณ ๋ ค์‚ฌํ•ญ

  • ๋ฉ”์‹œ์ง€ ์œ ์‹ค ๋ฐฉ์ง€ โ†’ ack ์„ค์ • / ์žฌ์ „์†ก ์„ค๊ณ„ ํ•„์š”
  • ๋ฉ”์‹œ์ง€ ์ˆœ์„œ ๋ณด์žฅ ๋ฌธ์ œ
  • ํŠธ๋žœ์žญ์…˜ ์ผ๊ด€์„ฑ ๋ฌธ์ œ
    (์˜ˆ: DB insert๋Š” ์„ฑ๊ณตํ–ˆ๋Š”๋ฐ ๋ฉ”์‹œ์ง€๋Š” ์‹คํŒจ)

๐Ÿ’ก ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ ค

  • DB insert + ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ์›์ž์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ โ†’ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜ or Outbox ํŒจํ„ด ๊ณ ๋ ค

2๏ธโƒฃ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜ ์—ฐ๋™

alt

โœ… ๊ฐœ๋…

  • A ์‹œ์Šคํ…œ์ด DB์˜ ๋ฉ”์‹œ์ง€ ํ…Œ์ด๋ธ”์— ๊ธฐ๋ก
  • B ์‹œ์Šคํ…œ์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ํ…Œ์ด๋ธ” ์กฐํšŒ(polling) ํ›„ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†ก

โœ… ์žฅ์ 

  • DB ํŠธ๋žœ์žญ์…˜๊ณผ ์›์ž์„ฑ ๋ณด์žฅ
  • ๋ฉ”์‹œ์ง€ ์œ ์‹ค ์—†์Œ
  • ์ˆœ์„œ ๋ณด์žฅ ๊ฐ€๋Šฅ

โš ๏ธ ๊ณ ๋ ค์‚ฌํ•ญ

  • DB ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์— ์˜ํ–ฅ ๋ฐ›์Œ
  • ์ฝ๊ธฐ ์ฃผ๊ธฐ ๋ฐ ์‚ญ์ œ ์ •์ฑ… ํ•„์š”
  • ์‹ค์‹œ๊ฐ„์„ฑ์ด ๋‚ฎ์Œ (ํด๋ง ์ฃผ๊ธฐ ์˜์กด)

3๏ธโƒฃ CDC(Change Data Capture) ๊ธฐ๋ฐ˜ ์—ฐ๋™

alt

โœ… ๊ฐœ๋…

  • DB ๋ณ€๊ฒฝ ๋กœ๊ทธ(binlog)๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ
  • ์™ธ๋ถ€ ์‹œ์Šคํ…œ์— ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ž๋™ ์ „ํŒŒ

โœ… ์žฅ์ 

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์ตœ์†Œํ™”
  • ํŠธ๋žœ์žญ์…˜ ๋ณด์žฅ (DB ๊ธฐ์ค€)
  • ๋ณต์žกํ•œ ์—ฐ๋™ ๋กœ์ง ํ•„์š” ์—†์Œ

โš ๏ธ ๊ณ ๋ ค์‚ฌํ•ญ

  • ๋ณ€๊ฒฝ ์‚ฌ์œ /์˜๋„๋Š” ์•Œ ์ˆ˜ ์—†์Œ (๋ฐ์ดํ„ฐ๋งŒ ๊ฐ์ง€)
  • ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ง€์—ฐ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ๋ถ„์„ ํˆด ๋˜๋Š” CDC ํ”Œ๋žซํผ ํ•„์š” (Debezium ๋“ฑ)

๐Ÿ’ฅ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜์ด๋ž€?

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ๋Š” ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—
โ€œ์„ฑ๊ณตํ•œ ์ž‘์—…์„ ์ทจ์†Œํ•˜๋Š” ์ž‘์—…โ€์„ ๋ณ„๋„๋กœ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์ƒํ™ฉ:

  • ์ฃผ๋ฌธ ์ƒ์„ฑ ์‹œ์Šคํ…œ โ†’ ๊ฒฐ์ œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ โ†’ ์žฌ๊ณ  ์‹œ์Šคํ…œ ํ˜ธ์ถœ
  • ์žฌ๊ณ ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ๊ฒฐ์ œ ์ทจ์†Œ ํ•„์š”
    โ†’ ์ด๋•Œ ๊ฒฐ์ œ ์‹œ์Šคํ…œ์— ๋ณด์ƒ ์ž‘์—…(๊ฒฐ์ œ ์ทจ์†Œ) ์š”์ฒญ์„ ์ „์†ก

๋ณด์ƒ ํŠธ๋žœ์žญ์…˜ ํŠน์ง•

  • ํŠธ๋žœ์žญ์…˜ ์‹คํŒจ ์‹œ ๋กค๋ฐฑ์ด ์•„๋‹ˆ๋ผ ๋ฐ˜๋Œ€ ์ž‘์—… ์‹คํ–‰
  • Saga ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ (Local Saga, Choreography ๋ฐฉ์‹ ๋“ฑ)

โœ… ์ด์ •๋ฆฌ ๋น„๊ตํ‘œ

๋ฐฉ์‹ ์žฅ์  ๋‹จ์  ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ
๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ ๋น„๋™๊ธฐ, ํ™•์žฅ์„ฑ, ์œ ์—ฐ์„ฑ ์ˆœ์„œ/์œ ์‹ค/ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฏผ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜ ํ•„์š”
DB ๊ธฐ๋ฐ˜ ํŠธ๋žœ์žญ์…˜ ๋ณด์žฅ, ์œ ์‹ค ์—†์Œ ์‹ค์‹œ๊ฐ„์„ฑ ๋‚ฎ์Œ DB ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌ
CDC ์ฝ”๋“œ ์ตœ์†Œํ™”, ํŠธ๋žœ์žญ์…˜ ๋ณด์žฅ ๋ณ€๊ฒฝ ์‚ฌ์œ  ์—†์Œ DB ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋ฐ˜

๐Ÿ“Œ ๋งˆ๋ฌด๋ฆฌ

  • ๋น„๋™๊ธฐ ์—ฐ๋™ ๋ฐฉ์‹์€ ์œ ์—ฐ์„ฑ, ์„ฑ๋Šฅ, ํ™•์žฅ์„ฑ ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ํ•„์ˆ˜ ์„ค๊ณ„
  • ์–ด๋–ค ๋ฐฉ์‹์ด๋“  ์ผ๊ด€์„ฑ ๋ณด์žฅ๊ณผ ์‹คํŒจ ๋Œ€์‘์ด ํ•ต์‹ฌ
  • ๋ฉ”์‹œ์ง• ๊ธฐ๋ฐ˜์€ Outbox + ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜, CDC๋Š” ๋ฐ์ดํ„ฐ ์ถ”์  ์ฃผ์˜

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ