Architecture

์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ ์•„ํ‚คํ…์ฒ˜(EDA)

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2024. 11. 4.

์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ ์•„ํ‚คํ…์ฒ˜ ๋˜๋Š” ์ด๋ฒคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑ, ์ „๋‹ฌ, ์ฒ˜๋ฆฌ, ์†Œ๋น„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‹œ์Šคํ…œ์˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ„ ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง€๋Š” ํ˜„๋Œ€์ ์ธ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์ด๋‹ค. ์˜ค๋Š˜๋‚  ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์ด๋‚˜ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋งŽ์ด ์“ฐ์ธ๋‹ค.  MSA, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ํ™œ์šฉ๋œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค๋ฅผ ํ™œ์šฉํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉฐ, ๋†’์€ ๊ฐ€์šฉ์„ฑ์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‹œ์Šคํ…œ ๋‚ด์—์„œ ํŠน์ • ์ž‘์—…์ด๋‚˜ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ด๋ฅผ ์ด๋ฒคํŠธ๋กœ ํ‘œํ˜„ํ•˜๊ณ  ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ›„์† ์ž‘์—…์ด ์ง„ํ–‰๋œ๋‹ค.

์ถœ์ฒ˜: https://wikidocs.net/222571

 

์ด๋ฒคํŠธ

์‹œ์Šคํ…œ ๋‚ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ƒํƒœ ๋ณ€ํ™”๋‚˜ ํ–‰๋™์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์˜ˆ์‹œ: ์ฃผ๋ฌธ ์ƒ์„ฑ, ๊ฒฐ์ œ ์™„๋ฃŒ, ์‚ฌ์šฉ์ž ๊ฐ€์ž… ๋“ฑ

 

์ด๋ฒคํŠธ ํ”„๋กœ๋“€์„œ - Event Producer

์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐœํ–‰ํ•˜๋Š” ์ฃผ์ฒด

์†Œ๋น„์ž๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ์ง€๋Š” ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ์ด๋ฒคํŠธ ๋ฐœ์ƒ๋งŒ์„ ์‹ ๊ฒฝ์“ฐ๊ณ  ๋‹ด๋‹นํ•œ๋‹ค.

์˜ˆ์‹œ: ๊ฒฐ์ œ ์‹œ์Šคํ…œ์—์„œ "๊ฒฐ์ œ ์™„๋ฃŒ" ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰

 

์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค - Event Broker

์ด๋ฒคํŠธ ๋ผ์šฐํŒ… ๋ฐ ์ „๋‹ฌ์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋”์ด์ƒ ์ด๋ฒคํŠธ๋ฅผ ํด๋ง, ํ•„ํ„ฐ๋ง ๋ฐ ๋ผ์šฐํŒ…ํ•  ์ฝ”๋“œ ์ž‘์„ฑ ํ•„์š”๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค. ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค๋Š” ์ž๋™์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์†Œ๋น„์ž์—๊ฒŒ ํ‘ธ์‹œํ•œ๋‹ค. ๋˜ํ•œ ์ƒ์‚ฐ์ž ์„œ๋น„์Šค์™€ ์†Œ๋น„์ž ์„œ๋น„์Šค ๊ฐ„ ๊ณผ๋„ํ•œ ์กฐ์ •์˜ ํ•„์š”์„ฑ์„ ์—†์•  ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ์„ ๋†’์ธ๋‹ค.

์˜ˆ์‹œ: Kafka, RabbitMQ, AWS SNS/SQS,  Azure Event Hub

 

์ด๋ฒคํŠธ ์†Œ๋น„์ž - Event Consumer

๋ธŒ๋กœ์ปค๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๋Š” ์ฃผ์ฒด

๋ฐœ์ƒ๋œ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ , ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์‹คํ–‰ํ•œ๋‹ค.

์˜ˆ์‹œ: "๊ฒฐ์ œ ์™„๋ฃŒ" ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋™ํ•œ ์•Œ๋ฆผ ์‹œ์Šคํ…œ์—์„œ ์•Œ๋ฆผ ๋ฌธ์ž ๋ฐ ์ด๋ฉ”์ผ ๋ฐœ์†ก

 

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ - Event Handler

ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.

 

EDA ์˜ ํ•ต์‹ฌ ์ฃผ์š” ํŠน์ง•

1. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ๊ฐ๊ฐ ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ๊ฐ€ ๋…์ง‘์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

2. ๋А์Šจํ•œ ๊ฒฐ๊ณผ

ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ ๊ฐ„์˜ ์ง์ ‘์ ์ธ ์˜์กด์„ฑ์ด ์‚ฌ๋ผ์ง„๋‹ค. ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๊ฐ€ ์ „๋‹ฌ๋˜๋ฏ€๋กœ ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ, ๋ฐฐํฌ, ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

3. ํ™•์žฅ์„ฑ

๋คํ”„ ํŒŒ์ดํ”„์ธ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์˜ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค.

 

4. ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ

์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ž๋งˆ์ž ์†Œ๋น„์ž๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ ์นดํ”„์นด ๊ฐ™์€ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์Šคํ”„๋ฆฌ๋ฐ ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋”์šฑ ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.

 

EDA ์žฅ์ 

1. ๋‚ด๊ฒฐํ•จ์„ฑ 

์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค๊ฐ€ ๋ฉ”์‹œ์ง€ ์ €์žฅ ๋ฐ ์žฌ์ „์†ก์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ์‹œ์Šคํ…œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์†์‹ค์—†์ด ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

2. ์œ ์—ฐ์„ฑ, ํ™•์žฅ์„ฑ๊ณผ ๋…๋ฆฝ์„ฑ

๊ฐ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๋•๋ถ„์— ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

EDA ๋‹จ์ 

1. ๋ณต์žก์„ฑ ์ฆ๊ฐ€

๋น„๋™๊ธฐ ํ†ต์‹ ๊ณผ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์œผ๋กœ ์ธํ•ด ์‹œ์Šคํ…œ ์„ค๊ณ„์™€ ๋””๋ฒ„๊น…์ด ์–ด๋ ค์›Œ์ง„๋‹ค.

 

2. ๋ฉ”์‹œ์ง€ ์ค‘๋ณต ์ฒ˜๋ฆฌ

์ด๋ฒคํŠธ๋ฅผ ์ค‘๋ณต์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์œ„ํ—˜์ด ์žˆ์œผ๋ฏ€๋กœ ์•„์ดํ…œํฌํ„ด์‹œ( idempotency ) ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ฆ‰ ๋ฉฑ๋“ฑ์„ฑ์ด ๊ตฌํ˜„๋œ ๋ฉ”์‹œ์ง• ์†”๋ฃจ์…˜์„ ์‹ ๊ฒฝ์จ์•ผ ํ•œ๋‹ค.

 

3. ์ง€์—ฐ๋ฌธ์ œ

๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•œ ์ด๋ฒคํŠธ ์ „๋‹ฌ๋กœ ์ผ๋ถ€ ์ƒํ™ฉ์—์„œ๋Š” ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ ์ ˆํ•œ ๋ณต์‚ฌ๋ณธ๊ณผ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค.

 

 

 

๋Œ“๊ธ€