Backend/SpringBoot

Retryable, 낙관적 락 간편 적용하기

Dean83 2025. 12. 9. 18:24

https://dean83.tistory.com/318  이곳에 비관적 락, 낙관적 락에 대한 설명이 되어 있다.

 

낙관적 락의 경우, 개발자가 직접 재시도 코드를 작성해 주어야 했는데, 이번에 Retryable 어노테이션을 알게 되었다. 

 

반복 재시도를 어노테이션 하나로 끝날 수 있게 해준다. 비단 낙관적 락 뿐 아니라 외부 API 연동 등 에서도 사용 할 수 있다.

 

1. gradle 추가

implementation 'org.springframework.retry:spring-retry'
implementation 'org.springframework.boot:spring-boot-starter-aop'

 

2. 설정 활성화

@EnableRetry
@SpringBootApplication
public class App { 
.....
}

 

3. 서비스에서 사용 예

@Service
public class SampleService {

    @Retryable(
        value = { ObjectOptimisticLockingFailureException.class },   // 어떤 예외일 때 재시도 할지
        maxAttempts = 3,                 // 총 시도 횟수 (기본 3)
        backoff = @Backoff(delay = 1000, maxDelay = 10000, multiplier = 2) // 재시도 사이 딜레이 (ms)
    )
    public void 메소드명() {
        // 동작
    }
}
  • value 에 어떤 예외일때 동작할지 지정 가능하다. 예에서는 낙관적 락이 발생했을 경우이다. 
  • multiplier: exponential backoff 적용 (2배씩 증가)
  • maxDelay: 최대 대기 시간

 

4. 재시도 실패시

@Recover
public void recover(ObjectOptimisticLockingFailureException e) {
    System.out.println("재시도 실패 후 복구 로직 실행");
}

'Backend > SpringBoot' 카테고리의 다른 글

[Spring Security] 쿠키 및 세션  (0) 2025.12.12
@SQLRestriction 및 논리 삭제  (0) 2025.12.11
Flyway 사용하기  (0) 2025.12.04
Spring batch + 스케줄링  (0) 2025.11.27
Spring Actuator 로 health체크 하기  (0) 2025.11.10