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 |