μŠ€ν”„λ§

Spring Retry

KIMHYEYUN 2023. 3. 4. 01:40
λ°˜μ‘ν˜•

Retry와 Recover

λ„€νŠΈμ›Œν¬λ₯Ό ν†΅ν•œ API ν˜ΈμΆœμ€ μ–Έμ œ μ–΄λ–»κ²Œ μ‹€νŒ¨ν• μ§€ μ˜ˆμΈ‘ν•˜κΈ° μ–΄λ ΅κΈ° λ•Œλ¬Έμ— 이λ₯Ό κ°μ‹œν•  수 μžˆλŠ” λͺ¨λ‹ˆν„°λ§ 기술이 맀우 μ€‘μš”ν•˜κ²Œ 평가받고 μžˆλ‹€.

λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œ μ„œλ²„μ™€ μ„œλ²„κ°„ API 호좜 μ‹€νŒ¨μ— λŒ€ν•œ μž¬μ‹œλ„λŠ” 맀우 μ€‘μš”ν•œ ν–‰μœ„μ΄λ‹€. 1번의 λ„€νŠΈμ›Œν¬ 호좜 μ‹€νŒ¨λ‘œ μ„œλΉ„μŠ€μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λͺ¨λ‘ μ‹€νŒ¨ μ²˜λ¦¬ν•˜κ±°λ‚˜ fallback μ²˜λ¦¬ν•˜λŠ” 것은 λͺ‡ 번 λ‹€μ‹œ ν˜ΈμΆœν•˜λŠ” 것보닀 큰 λ¦¬μ†ŒμŠ€ λ‚­λΉ„κ°€ 될 수 있기 λ•Œλ¬Έμ΄λ‹€.


πŸ€” FallBack 처리???

μ–΄λ–€ κΈ°λŠ₯이 μ•½ν•΄μ§€κ±°λ‚˜ μ œλŒ€λ‘œ λ™μž‘ν•˜μ§€ μ•Šμ„ λ•Œ, 이에 λŒ€μ²˜ν•˜λŠ” κΈ°λŠ₯ λ˜λŠ” λ™μž‘μ„ λ§ν•œλ‹€. fallback은 API 호좜 μ‹œ λ°œμƒν•˜λŠ” μ˜ˆμ™Έ 처리λ₯Ό μœ„ν•œ 클래슀λ₯Ό μ •μ˜ν•œλ‹€. μ‹€νŒ¨μ— λŒ€ν•΄μ„œ ν›„μ²˜λ¦¬λ₯Ό μœ„ν•΄ μ„€μ •ν•΄λ‘λŠ” λ©”μ„œλ“œμ΄λ‹€.


λ˜ν•œ, DNS μ„œλ²„, μŠ€μœ„μΉ˜, λ‘œλ“œ λ°ΈλŸ°μŠ€λ“± 수 λ§Žμ€ λ„€νŠΈμ›Œν¬ ꡬ성 μš”μ†Œλ“€μ€ μš”μ²­μ΄ μ΄λ£¨μ–΄μ§€λŠ” λͺ¨λ“  λ‹¨κ³„μ—μ„œ 였λ₯˜λ₯Ό μΌμœΌν‚¬ 수 μžˆλ‹€. λ„€νŠΈμ›Œν¬ ν™˜κ²½μ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μž¬μ‹œλ„ 기술이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ•ˆμ •μ„±μ„ 높일 뿐만 μ•„λ‹ˆλΌ 운영 λΉ„μš©μ„ μ ˆκ°ν•˜λŠ” νš¨κ³Όλ„ μžˆλ‹€.

λ”°λΌμ„œ, 보톡은 νŠΉμ • API 호좜 μ‹€νŒ¨ μƒν™©μ—μ„œλŠ” μ΅œλŒ€ 3번의 호좜 μž¬μ‹œλ„λ₯Ό ν•˜λŠ” λ“±μ˜ 방법을 많이 μ‚¬μš©ν•œλ‹€.
λŒ€ν‘œμ μΈ 예둜, λͺ…ν™•ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 μ‹€νŒ¨ 응닡을 λ°›λŠ” 상황이 μ•„λ‹Œ λ„€νŠΈμ›Œν¬μ˜ μΌμ‹œμ  μž₯μ• λ‘œ Read Timeout μ‹€νŒ¨ 응닡을 λ°›λŠ” κ²½μš°λ‚˜ API throttling λ¬Έμ œκ°€ μž¬μ‹œλ„λ₯Ό ν•΄λ³Όλ§Œν•œ 상황이닀.

ν•˜μ§€λ§Œ λ¬Έμ œλŠ” 이런 ν‰λ²”ν•œ μž¬μ‹œλ„ ν–‰μœ„ μžμ²΄κ°€ λŒ€λΆ€λΆ„μ€ 의미 μ—†κ±°λ‚˜ λ„€νŠΈμ›Œν¬μ— 뢀담을 더 κ°€μ€‘ν•˜λŠ” 결과둜 λλ‚œλ‹€λŠ” 점에 μžˆλ‹€.
λŒ€λΆ€λΆ„μ˜ Read Timeout 상황은 νŠΉμ • μ‹œκ°„λ™μ•ˆ λ„€νŠΈμ›Œν¬ μ΄μŠˆκ°€ μ§€μ†λ˜λŠ” κ²½μš°κ°€ 많기 λ•Œλ¬Έμ— 3회 μž¬μ‹œλ„λ₯Ό ν•˜λ”λΌλ„ λͺ¨λ‘ μ‹€νŒ¨λ‘œ 끝날 κ°€λŠ₯성이 λ†’λ‹€.
λ˜ν•œ, μž¬μ‹œλ„ 자체λ₯Ό μ‹œκ°„ 간격을 두고 ν•˜μ§€ μ•ŠλŠ” 경우 λ¬Έμ œκ°€ λ°œμƒν•œ λ„€νŠΈμ›Œν¬μ— 뢀담을 쀄 κ°€λŠ₯성이 크닀.
λ”°λΌμ„œ Retry ν–‰μœ„λŠ” λ˜‘λ˜‘ν•΄μ•Ό ν•˜λ©°, Springμ—μ„œ μž¬μ‹œλ„ κΈ°λŠ₯을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” Resilience4j, Spring Retry 라이브러리λ₯Ό 보톡 많이 μ‚¬μš©ν•œλ‹€.

πŸ₯• μ—λŸ¬λ₯Ό λ‹€μ‹œ μ²˜λ¦¬ν•΄μ•Όν•  경우 Spring Retryλ₯Ό μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

재처리λ₯Ό ν•  λ•Œ 보톡 μ•„λž˜λ₯Ό κ³ λ €ν•˜κ²Œ λœλ‹€.

  • μž¬μ‹œλ„λ₯Ό λͺ‡ 번 μ‹€ν–‰ν•  것인가?
  • μž¬μ‹œλ„ ν•˜κΈ° 전에 μ§€μ—°μ‹œκ°„μ„ μ–Όλ§ˆλ‚˜ 쀄 것인가?
  • μž¬μ‹œλ„λ₯Ό λͺ¨λ‘ μ‹€νŒ¨ν–ˆμ„ 경우 μ–΄λ–»κ²Œ μ²˜λ¦¬ν•  것인가?

λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ— 집쀑이 κ°€λŠ₯ν•˜λ„λ‘ μŠ€ν”„λ§μ—μ„œ μ œκ³΅ν•˜λŠ” 라이브러리λ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ μ½”λ“œκ°€ κ°„κ²°ν•˜κ³  μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰½λ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

Reference

https://wonyong-jang.github.io/spring/2021/02/18/Spring-Retry.html
https://velog.io/@sweet_sumin/Fallback

728x90
λ°˜μ‘ν˜•