inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

재고시스템으로 알아보는 동시성이슈 해결방법

PessimisticLock와 findById

479

yesrin

작성한 질문수 2

0

안녕하세요. 강의를 보던중 의문이 생겨 질문 드립니다.

JpaRepository를 만들면 정의하지 않아도 findById는 기본적으로 존재 하는 것으로 알고 있습니다.

findByIdWithPessimisticLock를 사용한 매서드가 락을 반납하기 전에 다른 매서드에서 findById을 이용한 update가 발생하게 된다면 findById가 Lock을 감지하는지가 궁금합니다.

 

public interface StockRepository extends JpaRepository<Stock, Long> {
@Lock(value = LockModeType.PESSIMISTIC_WRITE)
@Query("select s from Stock s where s.id=:id")
Stock findByIdWithPessimisticLock(Long id);

}

 

 

java spring 동시성

답변 2

0

최상용

yesrin 님 안녕하세요.
findById을 이용한 update가 발생하게 된다면 findById가 Lock을 감지하는지가 궁금합니다. 이라는 질문을 해주셨는데 이해를 하지 못하였습니다.
상황을 조금만 더 자세하게 설명해주실 수 있으실까요 ?

A 라는 메소드에서는 findByPessimisticLock 메소드를 사용하고 B 라는 메소드에서는 findById 이후 save 를 통한 업데이트가 가능한지 여쭤보시는걸까요 ?

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

findByIdWithPessimisticLock 메서드는 PESSIMISTIC_WRITE 락 모드를 사용하여 해당 id의 Stock 엔티티를 조회합니다. 이 락 모드는 다른 트랜잭션에서 동일한 id에 대해 업데이트를 시도할 때, 해당 트랜잭션이 커밋될 때까지 대기하도록 강제합니다.

따라서 findByIdWithPessimisticLock 메서드를 실행하고 해당 락이 걸려 있다면, 다른 트랜잭션에서 해당 id에 대한 업데이트를 시도하더라도 대기하게 됩니다. 그리고 findById 메서드를 사용하여 업데이트를 시도한다면, 해당 락이 감지되어 대기하게 됩니다.

결론적으로 findByIdWithPessimisticLock가 락을 반납하기 전에 다른 메서드에서 findById를 이용한 업데이트가 발생하면, findById 메서드는 락을 감지하여 대기하게 됩니다.

그러나 이런 경우 락 대기 시간이 일정하지 않을 수 있고, 성능에 영향을 줄 수 있으므로 사용에 주의해야 합니다. 특히, 극단적인 상황에서 데드락이 발생할 수 있으니 신중하게 사용해야 합니다.

더 자세한 내용은 JPA의 락 관련 문서를 참고해 주세요. 감사합니다.

레디선 테스트코드에서 채널이름은 없어도 되는건가요?

0

43

2

낙관적 락을 사용할 떄 차이점

0

121

2

동시성 검증 코드에 관한 문의

0

95

2

단일연산

0

70

2

낙관적락vs. 레디스락

0

108

2

안녕하세요. 레디슨 질문있습니다..!!

0

67

2

@Lock(OPTIMISTIC)이 필요한 이유

0

90

2

get_lock 의 timeout이 3000초 이던데 너무 긴거 아닌가요?

0

132

2

DataSource Hikari 사용 이유

0

147

2

saveAndFlush 사용 이유 문의

0

113

3

비관적 락 VS 네임드 락

0

160

3

application.yaml 에 redis 정보

0

100

2

왜 클래스 이름에 Facade 가 붙나요?

0

185

2

@Transactional 으로 인한 동시성 문제 발생 원인이 궁금합니다.

0

219

2

@modifying 이용한 동시성 제어

0

168

2

DB락과 분산락

0

262

2

NamedLock 테스트 실패

0

186

2

테스트에서 트랜잭션 어노테이션 질문 있습니다.

0

173

2

optimistic Lock 재시도 질문입니다.

0

232

2

낙관적 락 테스트 실패

0

241

2

오류?

0

1627

4

LettureLockStockFacadeTest에서 오류가 발생합니다.

1

268

2

Pessimistic Lock 전체 테스트 오류 문의

0

360

3

비관적 락 vs 레디스(Lettuce)락 비교 관련 질문

0

460

2