Web (back-end)/HTTP

์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๊ฐ€ Open ์ƒํƒœ์ผ ๋•Œ ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•œ ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€

9taetae9 2025. 2. 19. 16:27
728x90

1. HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ ํ๋ฆ„

a) ์ •์ƒ ์ƒํƒœ(Closed)

ํด๋ผ์ด์–ธํŠธ → ์ปจํŠธ๋กค๋Ÿฌ → ์„œ๋น„์Šค → ์™ธ๋ถ€ API ํ˜ธ์ถœ → ์‘๋‹ต ๋ฐ˜ํ™˜

  • ๋ชจ๋“  ์š”์ฒญ์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ๋กœ์ง๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

b) Open ์ƒํƒœ (Resilience4J)

ํด๋ผ์ด์–ธํŠธ → ์ปจํŠธ๋กค๋Ÿฌ → ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค(Open) → Fallback ์‘๋‹ต ์ฆ‰์‹œ ๋ฐ˜ํ™˜ (์™ธ๋ถ€ API ํ˜ธ์ถœ ๋ฏธ๋ฐœ์ƒ)

  • ์š”์ฒญ์€ ์ปจํŠธ๋กค๋Ÿฌ ์—”๋“œํฌ์ธํŠธ์— ๋„๋‹ฌํ•˜์ง€๋งŒ, ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๊ฐ€ ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰์„ ์ฐจ๋‹จํ•œ๋‹ค.
  • ์™ธ๋ถ€ API ํ˜ธ์ถœ ์—†์ด Fallback ๋ฉ”์„œ๋“œ์—์„œ ์ง์ ‘ ์‘๋‹ต ์ƒ์„ฑ (์˜ˆ: 503 ์—๋Ÿฌ)

2. ์ปจํŠธ๋กค๋Ÿฌ ๊ณ„์ธต ์˜ํ–ฅ ๋ถ„์„

๊ตฌ๋ถ„ ์š”์ฒญ ๋„๋‹ฌ ์—ฌ๋ถ€ ์™ธ๋ถ€ API ํ˜ธ์ถœ ์—ฌ๋ถ€
Closed โœ… โœ…
Open โœ… โŒ
Half-Open โœ… โš ๏ธ (์ œํ•œ์  ํ—ˆ์šฉ)
  • ์ปจํŠธ๋กค๋Ÿฌ ์ง„์ž… ๋กœ๊ทธ: ์š”์ฒญ์€ ํ•ญ์ƒ ๊ธฐ๋ก๋จ (HTTP ์š”์ฒญ ์ž์ฒด๋Š” ์ˆ˜์‹ )
  • ์‹ค์ œ ์ฒ˜๋ฆฌ ๋กœ์ง: Open ์ƒํƒœ์—์„œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Œ

3. ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ์‚ฌ๋ก€( Resilience4J + Spring Boot )

@CircuitBreaker(name = "api", fallbackMethod = "fallback")
@GetMapping("/data")
public ResponseEntity<?> getData() {
    // Open ์ƒํƒœ ์‹œ ํ•ด๋‹น ์ฝ”๋“œ ๋ธ”๋ก ์‹คํ–‰๋˜์ง€ ์•Š์Œ
    return externalApi.call();
}

public ResponseEntity<?> fallback(CallNotPermittedException ex) {
    return ResponseEntity.status(503).body("์„œ๋น„์Šค ์ค‘๋‹จ");
}
  • ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ ์ง„์ž…: โœ…
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰: โŒ

4. ๋ชจ๋‹ˆํ„ฐ๋ง ์ง€ํ‘œ

  • Open ์ƒํƒœ ์š”์ฒญ ํŠน์„ฑ:HTTP ์ƒํƒœ ์ฝ”๋“œ: 503 (Service Unavailable)
  • ์‘๋‹ต ์ƒ์„ฑ ์ฃผ์ฒด: ํด๋ผ์ด์–ธํŠธ ์ธก Fallback ๋ฉ”์„œ๋“œ
  • ์„œ๋น„์Šค ์ œ๊ณต์ž ๋กœ๊ทธ: ํ˜ธ์ถœ ๊ธฐ๋ก ์—†์Œ
  • ์ปจํŠธ๋กค๋Ÿฌ ์ ‘๊ทผ ํ™•์ธ ๋ฐฉ๋ฒ• : ์—‘์ธ„์—์ดํ„ฐ ์—”๋“œํฌ์ธํŠธ(/actuator/circuitbreakerevents)์—์„œ ๋ชจ๋“  ์„œํ‚ท๋ธŒ๋ ˆ์ด์ปค ์ด๋ฒคํŠธ ํ™•์ธ 

5. ๊ฒฐ๋ก 

์š”์ฒญ์€ ์ปจํŠธ๋กค๋Ÿฌ ์—”๋“œํฌ์ธํŠธ์— ๋„๋‹ฌํ•˜์ง€๋งŒ, Open ์ƒํƒœ์—์„œ๋Š” ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(์™ธ๋ถ€ API ํ˜ธ์ถœ)์ด ์ฐจ๋‹จ๋œ๋‹ค. ์ด๋Š” ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ ์‹คํ–‰์„ ์ค‘๊ฐ„์— ๊ฐ€๋กœ์ฑ„๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ์Šคํ…œ ๋ถ€ํ•˜ ์ธก๋ฉด์—์„œ HTTP ์š”์ฒญ ์ˆ˜์‹  ์ž์ฒด๋Š” ๋ฐœ์ƒํ•˜๋‚˜, ์‹ค์ œ ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ๋Š” Fallback ์‘๋‹ต ์ƒ์„ฑ ์ˆ˜์ค€์œผ๋กœ ์ œํ•œ๋œ๋‹ค.

728x90