did_story

[Spring Boot] ์™ธ๋ถ€ ์„œ๋น„์Šค ์žฅ์• ์— ๋Œ€๋น„ํ•˜๋Š” ๋™๊ธฐ ํ˜ธ์ถœ์˜ ์ƒ์กด ์ „๋žต - 2 ๋ณธ๋ฌธ

BackEnd๐Ÿƒ/Spring boot

[Spring Boot] ์™ธ๋ถ€ ์„œ๋น„์Šค ์žฅ์• ์— ๋Œ€๋น„ํ•˜๋Š” ๋™๊ธฐ ํ˜ธ์ถœ์˜ ์ƒ์กด ์ „๋žต - 2

์–ด์ œ์‹œ์ž‘ 2025. 7. 9. 00:06

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

1. ๋ฒŒํฌํ—ค๋“œ ํŒจํ„ด (Bulkhead Pattern) :  ํ”ผํ•ด๋ฅผ ๊ตญ์†Œ์ ์œผ๋กœ ์ œํ•œ

์„ ๋ฐ• ๋‚ด๋ถ€์— ์„ค์น˜ํ•˜๋Š” ๊ฒฉ๋ฒฝ(Bulkhead)์—์„œ ์œ ๋ž˜๋œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์„ ๋ฐ•์˜ ์—ฌ๋Ÿฌ ๊ตฌ์—ญ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด๋‘๋ฉด ํ•œ ๊ตฌ์—ญ์— ๋ฌผ์ด ์นจ์ˆ˜๋˜๋”๋ผ๋„ ๋‚˜๋จธ์ง€ ๊ตฌ์—ญ๊นŒ์ง€ ์นจ์ˆ˜๊ฐ€ ํผ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์„ ๋ฐ• ์ „์ฒด๊ฐ€ ๊ฐ€๋ผ์•‰๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ , ํ”ผํ•ด๋ฅผ ๊ตญ์†Œ์ ์œผ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

1) ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ ์šฉ

์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์—์„œ๋„ ์ด์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋‚˜ ๋ชจ๋“ˆ์ด ๊ณผ๋ถ€ํ•˜๋‚˜ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ „์ฒด ์‹œ์Šคํ…œ์„ ๋งˆ๋น„์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฆ‰ ์žฅ์•  ๊ฒฉ๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ ์„œ๋น„์Šค์˜ ์•ˆ์ „์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค

https://www.geeksforgeeks.org/system-design/bulkhead-pattern/#what-is-bulkhead-pattern

2) ํ•ต์‹ฌ ์•„์ด๋””์–ด

์‹œ์Šคํ…œ์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ, ๊ฐ ๊ตฌ์—ญ์ด ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ๊ณผ๋ถ€ํ•˜์— ๋Œ€์‘ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋ฐฉ๋ฒ•:

  • ์š”์ฒญ ์ฒ˜๋ฆฌ ํ’€(Tread Pool, Connection)์„ ๊ธฐ๋Šฅ ๋ณ„๋กœ ๋ถ„๋ฆฌ๋ฅผ ํ•˜๊ฑฐ๋‚˜.
  • ๊ฐ ์„œ๋น„์Šค / ๋ชจ๋“ˆ๋ณ„๋กœ Resource๋ฅผ ๊ฒฉ๋ฆฌํ•œ๋‹ค. (์˜ˆ: API Gateway์—์„œ ๊ณ ๊ฐ ๊ทธ๋ฃน๋ณ„ ๋ฆฌ์†Œ์Šค ๊ฒฉ๋ฆฌ)
  • ์„ธ๋งˆํฌ์–ด(Semaphore)๋ฅผ ์ด์šฉํ•œ ๋™์‹œ ์š”์ฒญ ์ œ์–ด๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ํ’€์„ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๊ณ , ํŠน์ • ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋™์‹œ ์‹คํ–‰ ์ˆ˜๋ฅผ ์„ธ๋งˆํฌ์–ด๋ฅผ ํ†ตํ•ด ์ œํ•œํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ๊ณ ๊ฐˆ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ์„œ๋น„์Šค ๊ฐ„์˜ ํ˜ธ์ถœ์ˆ˜ ์ œํ•œ ๋ฐ ํƒ€์ž„์•„์›ƒ์„ ์„ค์ •ํ•œ๋‹ค.

2. ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ํŒจํ„ด (Circuit Breaker Pattern) : ์—ฐ์‡„ ์žฅ์• ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์•ˆ์ •์„ฑ ํŒจํ„ด

1) ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ํŒจํ„ด์ด๋ž€?

์žฅ์•  ๋ฐœ์ƒ ์‹œ ์™ธ๋ถ€ ํ˜ธ์ถœ์„ ์ฐจ๋‹จํ•˜์—ฌ, ์žฅ์•  ํ™•์‚ฐ์„ ๋ง‰๊ณ  ์‹œ์Šคํ…œ์„ ๋ณดํ˜ธํ•˜๋Š” ํŒจํ„ด์„ ์˜๋ฏธํ•œ๋‹ค.

2) ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ๋™์ž‘ ์ƒํƒœ

  1. Closed: ์ •์ƒ ์ƒํƒœ, ์š”์ฒญ์„ ์ •์ƒ์ ์œผ๋กœ ์™ธ๋ถ€ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ๋œ๋‹ค.
  2. Open: ์žฅ์•  ์ƒํƒœ, ์š”์ฒญ์„ ์™ธ๋ถ€ ์„œ๋น„์Šค์— ๋ณด๋‚ด์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ์‹คํŒจ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  3. Half-Open: ์ผ๋ถ€ ์š”์ฒญ๋งŒ ๋ณด๋‚ด์„œ ์™ธ๋ถ€ ์„œ๋น„์Šค๊ฐ€ ์ •์‚ฐ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

https://martinfowler.com/bliki/CircuitBreaker.html

3) ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋™์ž‘ ์›๋ฆฌ

์žฅ์•  ๋ฐœ์ƒ ์ „

  • ๋ชจ๋“  ์š”์ฒญ์ด ์™ธ๋ถ€ ์„œ๋น„์Šค๋กœ ์ •์ƒ์ ์œผ๋กœ ์ „์†ก๋œ๋‹ค.

์žฅ์•  ๋ฐœ์ƒ

  • ์™ธ๋ถ€ ์„œ๋น„์Šค๊ฐ€ ์žฅ์•  ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ์ผ์ • ํšŸ์ˆ˜ ์ด์ƒ์˜ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ 
  • ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๊ฐ€ Open ์ƒํƒœ๋กœ ์ „ํ™˜, ์™ธ๋ถ€ ์„œ๋น„์Šค ํ˜ธ์ถœ์„ ์ฐจ๋‹จํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ”๋กœ ์‹คํŒจ๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๊ณ , ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์—†์ด ๋‹ค๋ฅธ ์ž‘์—… ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ.

์žฅ์•  ๋ณต๊ตฌ ํ›„

  • ์ผ์ • ์‹œ๊ฐ„ ์ดํ›„ Half-Open ์ƒํƒœ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ผ๋ถ€ ์š”์ฒญ๋งŒ ์™ธ๋ถ€ ์„œ๋น„์Šค๋กœ ๋ณด๋ƒ„.
  • ์ •์ƒ ์‘๋‹ต์ด ํ™•์ธ๋˜๋ฉด ๋‹ค์‹œ Closed ์ƒํƒœ๋กœ ๋ณต๊ท€ํ•˜์—ฌ ์ „์ฒด ์š”์ฒญ ์žฌ๊ฐœ.

→ ๊ฒฐ๊ณผ์ ์œผ๋กœ, ์™ธ๋ถ€ ์„œ๋น„์Šค ์žฅ์• ๊ฐ€ ๋‚ด๋ถ€ ์„œ๋น„์Šค ์‹œ์Šคํ…œ์œผ๋กœ ํ™•์‚ฐ๋˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

Resilience4j, Hystrix(Netflix, ์œ ์ง€๋ณด์ˆ˜ ๋ชจ๋“œ), Spring Cloud Circuit Breaker ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ํŒจํ„ด๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ฒฐ๋ก 

์ด๋ ‡๊ฒŒ ์™ธ๋ถ€ ์„œ๋น„์Šค๊ฐ€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ์‹œ ์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค๋Š” ์ปค๋‹ค๋ž€ ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ด๋Ÿฌํ•œ ์žฅ์•  ๋Œ€์‘ ํŒจํ„ด์„ ๋ฐฐ์šฐ๋ฉด์„œ ๊ฐ์ž์˜ ํ”„๋กœ์ ํŠธ์— ๊ตฌํ˜„์„ ํ•œ๋‹ค๋ฉด, ์ข‹์€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋Š” ํ•œ๊ฑธ์Œ์ด ๋˜์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

 

 

์ด์ „๊ธ€์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด?

2025.07.02 - [BackEnd๐Ÿƒ/Spring boot] - [Spring Boot] ์™ธ๋ถ€ ์„œ๋น„์Šค ์žฅ์• ์— ๋Œ€๋น„ํ•˜๋Š” ๋™๊ธฐ ํ˜ธ์ถœ์˜ ์ƒ์กด ์ „๋žต - 1

 

[Spring Boot] ์™ธ๋ถ€ ์„œ๋น„์Šค ์žฅ์• ์— ๋Œ€๋น„ํ•˜๋Š” ๋™๊ธฐ ํ˜ธ์ถœ์˜ ์ƒ์กด ์ „๋žต - 1

๋ฐฑ์—”๋“œ ์ž‘์—…์„ ํ•˜๋‹ค๋ณด๋ฉด ์™ธ๋ถ€ API๋ฅผ ๋ถˆ๋Ÿฌ์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์ด ์ ์  ๋งŽ์•„์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ‘์ž๊ธฐ ์ด ์™ธ๋ถ€ ์„œ๋น„์Šค๋“ค์ด ๊ฐ‘์ž๊ธฐ ๋А๋ ค์ง€๋Š” ์žฅ์• ๊ฐ€ ๊ฑธ๋ฆฌ๋ฉด ์šฐ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?! ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ๋™๊ธฐ

didcheck.tistory.com