RetryTemplate

RetryTemplate은 Spring Retry의 핡심 μ»΄ν¬ν„΄νŠΈλ‘œ, μΌμ‹œμ μΈ 였λ₯˜κ°€ λ°œμƒν•  수 μžˆλŠ” μž‘μ—…μ— μž¬μ‹œλ„ λ‘œμ§μ„ μ‰½κ²Œ μΆ”κ°€ν•  수 있게 ν•΄μ€€λ‹€. 특히 μ™ΈλΆ€ μ‹œμŠ€ν…œκ³Όμ˜ 톡신, DB μž‘μ—…, λΆ„μ‚° μ‹œμŠ€ν…œ λ“±μ—μ„œ λ°œμƒν•  수 μžˆλŠ” μΌμ‹œμ μΈ μ‹€νŒ¨λ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 μœ μš©ν•œ κ²ƒμœΌλ‘œ μ•Œλ €μ Έμžˆλ‹€.

일반적으둜 RetryTemplate을 직접 μ‚¬μš©ν•˜λ©΄ μΆ©λΆ„ν•˜κΈ° λ•Œλ¬Έμ— RetryOperationsλ₯Ό 직접 κ΅¬ν˜„ν•  ν•„μš”λŠ” μ—†λ‹€κ³  ν•œλ‹€. ν•˜μ§€λ§Œ μ»€μŠ€ν…€μ΄ ν•„μš”ν•œ 경우 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 직접 ν™œμš©ν•  수 μžˆλ‹€.

  • RetryTemplate = RetryOperations의 κ΅¬ν˜„μ²΄

ꡬ성

RetryTemplate은 λ‹€μŒκ³Ό 같이 κ΅¬μ„±λœλ‹€.

  1. μ‹€ν–‰ν•  μž‘μ—…μ„ μ •μ˜(RetryCallback) (예: μ™ΈλΆ€ API 호좜, DB μ ‘κ·Ό λ“±)

  1. μž¬μ‹œλ„ μ •μ±…(Retry Policy) μ„€μ •

μž¬μ‹œλ„ 여뢀와 횟수λ₯Ό κ²°μ •ν•œλ‹€.

  • μ΅œλŒ€ μž¬μ‹œλ„ 횟수

  • μž¬μ‹œλ„ν•  μ˜ˆμ™Έ μœ ν˜• μ§€μ •

// μ£Όμš” κ΅¬ν˜„μ²΄
SimpleRetryPoilcy: μ§€μ •λœ μ΅œλŒ€ μ‹œλ„ νšŸμˆ˜κΉŒμ§€ μž¬μ‹œλ„
TimeoutRetryPolicy: μ§€μ •λœ μ‹œκ°„ λ™μ•ˆ μž¬μ‹œλ„
ExceptionClassifierRetryPolicy: μ˜ˆμ™Έ μœ ν˜•μ— 따라 λ‹€λ₯Έ μ •μ±… 적용
CircuitBreakerRetryPolicy: μ„œν‚· 브레이컀 νŒ¨ν„΄ κ΅¬ν˜„

  1. λŒ€κΈ° μ „λž΅(Backoff Policy) μ„€μ •

μž¬μ‹œλ„ μ‚¬μ΄μ˜ λŒ€κΈ° μ‹œκ°„μ„ κ²°μ •ν•œλ‹€.

  • 일정 μ‹œκ°„ κ°„κ²©μœΌλ‘œ μž¬μ‹œλ„

  • 점진적(Exponential) 증가 방식 지원

  1. μž¬μ‹œλ„ μ’…λ£Œ ν›„ λŒ€μ²΄ 처리(Fallback) κ°€λŠ₯

λͺ¨λ“  μž¬μ‹œλ„κ°€ μ‹€νŒ¨ν•œ 후에 μˆ˜ν–‰ν•  볡ꡬ μž‘μ—…μ„ μ •μ˜ν•œλ‹€.

Backoff(μž¬μ‹œλ„ 간격) μ •μ±…

FixedBackOffPolicy (κ³ μ • μ‹œκ°„ 간격)

ExponentialBackOffPolicy (점진적 증가)

RandomBackOffPolicy (랜덀 간격)

Springμ—μ„œμ˜ μ‚¬μš©

1. RetryTemplate Bean ꡬ성

2. RetryTemplate을 직접 μ •μ˜ν•΄μ„œ μ‚¬μš©

3. μ–΄λ…Έν…Œμ΄μ…˜ 기반 μ‚¬μš©

μ•„λž˜λΆ€ν„°λŠ” 쑰금 μ»€μŠ€ν…€ν•œ μ„€μ •

4. ExponentialBackOffPolicy 예제

5. νŠΉμ • μ˜ˆμ™Έμ— λŒ€ν•΄μ„œλ§Œ μž¬μ‹œλ„

6. RetryContext ν™œμš©

7. CircuitBreakerRetryPolicy μ„€μ •

8. λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμž­μ…˜ μž¬μ‹œλ„

9. μ™ΈλΆ€ API 호좜 μž¬μ‹œλ„

μž¬μ‹œλ„ μ „λž΅μ„ 잘 ν™œμš©ν•˜λ©΄ μ‹œμŠ€ν…œμ˜ μ•ˆμ •μ„±μ΄λ‚˜ λ°μ΄ν„°μ˜ 멱등성을 보μž₯ν•  수 μžˆκ² μ§€λ§Œ μ£Όμ˜ν•΄μ•Ό ν•  뢀뢄도 μžˆμ„ 것 κ°™λ‹€.

  • λͺ¨λ“  μ˜ˆμ™Έμ— μž¬μ‹œλ„λ₯Ό μ‹œλ„ν•˜λŠ” 것이 μ•„λ‹Œ λŒ€μƒμ„ 식별해야 ν•œλ‹€. (λ„€νŠΈμ›Œν¬ 문제, μΌμ‹œμ  μ„œλΉ„μŠ€ μž₯μ•  λ“±)

  • μž¬μ‹œλ„ 횟수 μ œν•œμ˜ ν•„μš”μ„± (같은 이유둜 μ‹€νŒ¨ν•˜λŠ” 둜직이 계속 μž¬μ‹œλ„λ₯Ό ν•œλ‹€λ©΄..? μ„€μ •ν•˜λŠ” 큰 μ˜λ―Έκ°€ 없을 것 κ°™λ‹€.)

  • λͺ¨λ“  μž¬μ‹œλ„κ°€ μ‹€νŒ¨ν•˜λ©΄ RecoveryCallback(볡ꡬ μ „λž΅)을 잘 κ΅¬ν˜„ν•˜μž.

  • νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μž¬μ‹œλ„λ₯Ό ν•œλ‹€λ©΄, μ „νŒŒ 흐름을 λͺ…ν™•ν•˜κ²Œ μ΄ν•΄ν•˜μž.

Last updated