์ฑ„๋„ํ†ก ์•„์ด์ฝ˜

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋””์ž์ธ ํŒจํ„ด ์™„๋ฒฝ ๊ฐ€์ด๋“œ

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

(4.8) ์ˆ˜๊ฐ•ํ‰ 17๊ฐœ

์ˆ˜๊ฐ•์ƒ 431๋ช…

๋‚œ์ด๋„ ์ดˆ๊ธ‰

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค
๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค
์ด๋ก  ์‹ค์Šต ๋ชจ๋‘
์ด๋ก  ์‹ค์Šต ๋ชจ๋‘
๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค
๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค
์ด๋ก  ์‹ค์Šต ๋ชจ๋‘
์ด๋ก  ์‹ค์Šต ๋ชจ๋‘

์ƒˆ์†Œ์‹

1 ๊ฐœ

  • Dowon Lee๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€

    ์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๋„์›์ž…๋‹ˆ๋‹ค.

     

    ์ด๋ฒˆ์— ์ƒˆ๋กญ๊ฒŒ Microservice Architecture๋ฅผ ์œ„ํ•œ Design Pattern ๊ฐ•์˜๋ฅผ ์˜คํ”ˆํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    ์ •๋ง์ด์ง€ ๋„ˆ๋ฌด๋‚˜๋„ ํž˜๋“ค๊ณ  ๋ฐ”๋ปค๋˜ 2024๋…„์„ ๋’ค๋กœ ํ•˜๊ณ , ์ƒˆ๋กญ๊ฒŒ 2025๋…„๋„ ๋ฒŒ์จ 5์›”์ด ์ง€๋‚˜๊ฐ€๊ณ  ์žˆ๋„ค์š”.

    ํ”„๋กœ์ ํŠธ์— ์ง‘ํ•„์— ๊ฐ•์˜์— ๊ฐœ์ธ์‚ฌ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ผ๋“ค์ด ๋งŽ์•˜์ง€๋งŒ, ๊ทธ๋ž˜๋„ ์˜ค๋žฌ๋™์•ˆ ๋ฏธ๋ค„์™”๋˜ ๊ฐ•์˜๋ฅผ ํ•˜๋‚˜ ์˜คํ”ˆํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    • Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA)

    • Jenkins๋ฅผ ์ด์šฉํ•œ CI/CD Pipeline ๊ตฌ์ถ•

    • DevOps๋ฅผ ์œ„ํ•œ Docker ๊ฐ€์ƒํ™” ๊ธฐ์ˆ  (Private Harbor Registry)

    • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋””์ž์ธ ํŒจํ„ด์„ ์ ์šฉํ•œ MSA ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

    ๊ฐ•์˜์— ์ด์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์— ํ•„์š”ํ•œ ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•œ ๊ฐ•์˜๋ฅผ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์— "Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA) " ๊ฐ•์˜๋ฅผ ๊ธฐํšํ•  ๋•Œ, Cloud Native์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ฐ•์˜๋ฅผ ์™„๋ฃŒํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋””์ž์ธ ํŒจํ„ด๊ณผ ์‹ค๋ฌด์— ์ ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜๋“ค์„ ํ†ตํ•ด ์›น ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•ด ๋ณด๋Š” ๊ฐ•์˜๋ฅผ ๊ธฐํšํ–ˆ์—ˆ๋Š”๋ฐ, ์ƒ๊ฐ๋ณด๋‹ค ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŒจํ„ด์„ ๋ช‡๊ฐ€์ง€ ๊ทธ๋ฃน์œผ๋กœ ์ •๋ฆฌํ•ด์„œ ๊ฐ•์˜๋ฅผ ์˜คํ”ˆํ•˜๊ฒŒ ๋˜์—ˆ์œผ๋‹ˆ ๋งŽ์€ ๊ด€์‹ฌ ๋ฐ”๋ž๋‹ˆ๋‹ค.

     

    ์ด๋ฒˆ ๊ฐ•์˜์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒจํ„ด์„ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    • API ๊ฒŒ์ดํŠธ์›จ์ด (API Gateway): ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ๋‹จ์ผ ์ง„์ž…์ ์—์„œ ๋ฐ›์•„ ์ธ์ฆ, ๋กœ๊น…, ๋ผ์šฐํŒ… ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ (Service Discovery): ๋™์ ์œผ๋กœ ๋ณ€ํ™”ํ•˜๋Š” ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋“ค์˜ ์œ„์น˜๋ฅผ ์ค‘์•™ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋กํ•˜๊ณ  ์ฐพ๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์‹œ ์ฃผ์†Œ๋ฅผ ์ž๋™์œผ๋กœ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

    • ๋™๊ธฐ (Synchronous)& ๋น„๋™๊ธฐ (Asynchronous) ํ†ต์‹ : ๋™๊ธฐ ํ†ต์‹ ์€ ์š”์ฒญ์„ ๋ณด๋‚ธ ์„œ๋น„์Šค๊ฐ€ ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ, ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ธ”๋กœํ‚น ๋ฉ๋‹ˆ๋‹ค. REST / gRPC / GraphQL API ๋ฐฉ์‹์œผ๋กœ ๋™๊ธฐ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ํ†ต์‹ ์€ ์š”์ฒญ์„ ๋ณด๋‚ธ ์„œ๋น„์Šค๊ฐ€ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ๋‹ค์Œ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, Kafka์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ , ๊ตฌ๋…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    • ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค (Circuit Breaker): ํ•œ ์„œ๋น„์Šค์˜ ์žฅ์• ๊ฐ€ ์—ฐ์‡„์ ์œผ๋กœ ํผ์ง€๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ์„ ๋‹จ๋ฝ์‹œํ‚ค๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์„œ๋น„์Šค๊ฐ€ ๋ถˆ๋Šฅ์ผ ๋•Œ ์ผ์ • ์‹œ๊ฐ„ ํ˜ธ์ถœ์„ ์ค‘๋‹จํ•˜๊ณ  ๋น ๋ฅธ ์‹คํŒจ(Fail-fast)๋ฅผ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.

    • ํด๋ฐฑ (Fallback) ์ฒ˜๋ฆฌ: ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ๋“ฑ์ด ์ž‘๋™ํ–ˆ์„ ๋•Œ ๋Œ€๋น„์ฑ…์œผ๋กœ, ๋Œ€์ฒด ์‘๋‹ต์ด๋‚˜ ์žฌ์‹œ๋„ ๋กœ์ง์„ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋ถ€๋ถ„ ์žฅ์•  ์‹œ ์‹œ์Šคํ…œ์˜ ํƒ„๋ ฅ์„ฑ(resilience)์„ ๋†’์—ฌ ์ค๋‹ˆ๋‹ค.

    • ์‚ฌ๊ฐ€ ํŒจํ„ด (Saga): ๋ถ„์‚ฐ๋œ ์„œ๋น„์Šค๋“ค์—์„œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๊ฐ ์„œ๋น„์Šค์˜ ๋กœ์ปฌ ํŠธ๋žœ์žญ์…˜์„ ์ด๋ฒคํŠธ/๋ฉ”์‹œ์ง€๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ตœ์ข… ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

    • CQRS & ์ด๋ฒคํŠธ ์†Œ์‹ฑ:CQRS(Command Query Responsibility Segregation)๋Š” ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๋ชจ๋ธ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํ™•์žฅ์„ฑ์„ ๋†’์ด๋Š” ํŒจํ„ด์ด๊ณ , ์ด๋ฒคํŠธ ์†Œ์‹ฑ(Event Sourcing)์€ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ด๋ฒคํŠธ ๋กœ๊ทธ๋กœ ์ €์žฅํ•ด ์ด๋ ฅ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

    • EDA: Event Driven Architecture๋Š” ์ด๋ฒคํŠธ์˜ ์ƒ์„ฑ, ๊ฐ์ง€, ์†Œ๋น„ ๋ฐ ์‚ฌ์šฉ์„ ์ค‘์‹ฌ์œผ๋กœ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์˜ ๊ตฌ์„ฑ์š”์†Œ๋“ค์ด '์ด๋ฒคํŠธ'๋ฅผ ํ†ตํ•ด ์„œ๋กœ ํ†ต์‹ ํ•˜๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

    • BFF (Backend for Frontend): ์›น, ๋ชจ๋ฐ”์ผ ๋“ฑ ํ”Œ๋žซํผ๋ณ„ ํŠนํ™”๋œ ๋ฐฑ์—”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๊ฐ ํ”„๋ก ํŠธ์—”๋“œ์˜ ์š”๊ตฌ์— ๋งž๋Š” ์ „์šฉ API ๊ณ„์ธต์„ ๋งŒ๋“ค์–ด ํšจ์œจ์„ฑ๊ณผ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

    ์ด์ œ ๊ทธ๋™์•ˆ ๋ฏธ๋ค„์™”๋˜, "Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA) " ๊ฐ•์˜๋ฅผ ์‹œ์ž‘์œผ๋กœ, ๊ธฐ์กด ๊ฐ•์˜๋“ค์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ์˜คํ”ˆํ•œ์ง€๋„ ์‹œ๊ฐ„์ด ๊ฝค ํ˜๋ €๊ณ , ์ตœ์‹  ๋‚ด์šฉ์œผ๋กœ ๋‹ค์‹œ ๋งŒ๋“ค์ง€ ์•Š์œผ๋ฉด ์•ˆ๋˜๊ณ˜๋‹ค๋Š” ์ƒ๊ฐ์„ ๊ณ„์† ํ•ด ์™”์—ˆ๋Š”๋ฐ, ๋” ๋Šฆ์ง€ ์•Š๊ฒŒ ์—…๋ฐ์ดํŠธ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

    ๊ฐ•์˜์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ ์ฃผ์‹  ๋ถ„๋“ค๊ป˜ ๋‹ค์‹œํ•œ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ, ์งˆ๋ฌธ๊ณผ ํ”ผ๋“œ๋ฐฑ ๋“ฑ ๋‚จ๊ฒจ ์ฃผ์‹œ๋ฉด, ์ตœ์‹ ์„ ๋‹คํ•ด ๋น ๋ฅด๊ฒŒ ๋‹ต๋ณ€๋“œ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

    ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

     

     

    1

์›” โ‚ฉ21,780

5๊ฐœ์›” ํ• ๋ถ€ ์‹œ

โ‚ฉ108,900