μ΄λ²ˆμ— κ³΅λΆ€ν•œ μ£Όμ œλŠ” μ™ΈλΆ€ μ„œλΉ„μŠ€(API) μž₯μ• κ°€ 전체 μ‹œμŠ€ν…œμ— λ―ΈμΉ˜λŠ” 영ν–₯κ³Ό 이λ₯Ό 막기 μœ„ν•œ **μ„Έ κ°€μ§€ 핡심 μ „λž΅(Timeout, Bulkhead, Circuit Breaker)**이닀. λ‹¨μˆœνžˆ "μ—λŸ¬ 처리λ₯Ό μž˜ν•˜λ©΄ λœλ‹€"λŠ” λ§‰μ—°ν•œ λ‹΅λ³€μ—μ„œ λ²—μ–΄λ‚˜, μ™œ 이런 μž₯μ• κ°€ λ°œμƒν•˜κ³  μ–΄λ–€ λ°©λ²•μœΌλ‘œ λŒ€μ‘ν•  수 μžˆλŠ”μ§€λ₯Ό μ²΄κ³„μ μœΌλ‘œ μ΄ν•΄ν–ˆλ‹€.


1. 문제 제기

μ™ΈλΆ€ APIλ₯Ό ν˜ΈμΆœν•  λ•Œ, κ·Έ μ„œλΉ„μŠ€κ°€ μž₯μ• λ₯Ό μΌμœΌν‚€λ©΄ λ‹¨μˆœνžˆ 응닡이 λŠλ €μ§€λŠ” μˆ˜μ€€μ΄ μ•„λ‹ˆλΌ 우리 μ„œλ²„μ˜ μžμ›μ„ κ³ κ°ˆμ‹œν‚€κ³  전체 μ„œλΉ„μŠ€λ‘œ μž₯μ• κ°€ 확산될 수 μžˆλ‹€λŠ” 점을 μ•Œκ²Œ λ˜μ—ˆλ‹€.

예λ₯Ό λ“€μ–΄ 결제 APIκ°€ 10초 λ™μ•ˆ μ‘λ‹΅ν•˜μ§€ μ•ŠμœΌλ©΄, μ„œλ²„μ˜ 컀λ„₯μ…˜ ν’€κ³Ό μŠ€λ ˆλ“œκ°€ 점점 잠기게 되고, 같은 μžμ›μ„ κ³΅μœ ν•˜λŠ” λ‹€λ₯Έ κΈ°λŠ₯κΉŒμ§€ λŒ€κΈ°ν•˜κ²Œ λœλ‹€. 이처럼 μž‘μ€ μž₯μ• κ°€ β€œλ„λ―Έλ…Έ νš¨κ³Όβ€λ‘œ 번져 μ‚¬μš©μž κ²½ν—˜ μ „λ°˜μ„ ν•΄μΉ  수 μžˆλ‹€λŠ” 사싀을 λ°°μ› λ‹€.


2. λ°°κ²½ κ°œλ…

동기 vs 비동기

Block I/O vs Non-block I/O

πŸ‘‰ μ—¬κΈ°μ„œ μ€‘μš”ν•œ 점은 동기/비동기와 Block/Non-block은 동일 κ°œλ…μ΄ μ•„λ‹ˆλ©°, β€œνλ¦„ μ œμ–΄ 방식”과 β€œν˜ΈμΆœμžμ˜ λŒ€κΈ° μ—¬λΆ€β€λΌλŠ” μ„œλ‘œ λ‹€λ₯Έ κΈ°μ€€μ΄λΌλŠ” 것이닀.


3. 문제 상황 뢄석

μ™ΈλΆ€ API μž₯μ• κ°€ λ°œμƒν•˜λ©΄, μ„œλ²„ λ‚΄λΆ€μ—μ„œ λ‹€μŒκ³Ό 같은 λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

  1. 응닡 μ§€μ—° β†’ 컀λ„₯μ…˜ ν’€ 고갈
  2. 동일 풀을 κ³΅μœ ν•˜λŠ” λ‹€λ₯Έ μ„œλΉ„μŠ€κΉŒμ§€ λŒ€κΈ°
  3. κ²°κ΅­ 전체 μ„œλΉ„μŠ€ μ„±λŠ₯ μ €ν•˜