Community

๐Ÿงฉ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์„ค๊ณ„ ํŒจํ„ด

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์„ค๊ณ„ ํŒจํ„ด์€ ์ž‘๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ์›์น™์ž…๋‹ˆ๋‹ค. MSA ๊ฐ€ ์œ ํ–‰์ด ๋˜๊ณ  ์—ฌ๋Ÿฌ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ช‡๊ฐ€์ง€ ์œ ์šฉํ•œ ์„ค๊ณ„ ํŒจํ„ด๋“ค์ด ์ƒ๊ธฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ์š”, ์˜ค๋Š˜ ์†Œ๊ฐœํ•ด๋“œ๋ฆด ์•„ํ‹ฐํด์€ ์ด๋Ÿฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์„ค๊ณ„ ํŒจํ„ด ์ค‘ ๋Œ€ํ‘œ์ ์ธ ํŒจํ„ด 5๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ API Gateway API Gateway ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ํ”„๋ŸฐํŠธ์—”๋“œ ์—ญํ• ์„ ํ•˜๋Š” ์„œ๋น„์Šค๋กœ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์•„ ์ ์ ˆํ•œ ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ Circuit Breaker Circuit Breaker ๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์‹คํŒจ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๊ณ„๋‹จ์‹ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํšŒ๋กœ๋ฅผ ์ฐจ๋‹จํ•˜์—ฌ ์ „๊ธฐ ์žฅ๋น„์˜ ์†์ƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์ „๊ธฐ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ์ฒ˜๋Ÿผ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ์‹œ์Šคํ…œ์œผ๋กœ์˜ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ CQRS (Command Query Responsibility Segregation) CQRS ํŒจํ„ด์€ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์ž‘์—…์„ ๋ช…๋ น ๋ชจ๋ธ๊ณผ ์ฟผ๋ฆฌ ๋ชจ๋ธ ๋‘ ๊ฐ€์ง€๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น ๋ชจ๋ธ์€ ์“ฐ๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ณ , ์ฟผ๋ฆฌ ๋ชจ๋ธ์€ ์ฝ๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•˜๋Š” ์‹œ์Šคํ…œ์ด ๋ณต์žกํ•ด์ง€๊ณ  ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ๋„ ํ™•์žฅ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์ˆ˜์›”ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ Event Sourcing Event Sourcing ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ๋ฅผ ์ผ๋ จ์˜ ์ด๋ฒคํŠธ๋กœ ๋ชจ๋ธ๋งํ•˜์—ฌ ์ €์žฅ ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๋Œ€์‹  ์‹œ์Šคํ…œ์€ ์ผ๋ จ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ €์žฅํ•˜๊ณ  ํ•„์š”์‹œ ์ด๋ฅผ ์ฝ์–ด๋“ค์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ Saga Pattern Saga ๋””์ž์ธ ํŒจํ„ด์€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์—์„œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์—์„œ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ณต์œ ๋“œ๋ฆฐ ์•„ํ‹ฐํด์— 5๊ฐ€์ง€ ํŒจํ„ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์ด ์ •๋ฆฌ๋˜์–ด์žˆ์œผ๋‹ˆ ๊ด€์‹ฌ์žˆ์œผ์‹  ๋ถ„๋“ค์€ ํ•œ๋ฒˆ ๋ณด์‹œ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. https://medium.com/javarevisited/5-important-microservices-design-patterns-c4d636b0051

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค