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