inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

NamedLock 에서  @Transactional 사용에 관한 질문

202

fpg123

작성한 질문수 6

0

NamedLock을 사용한 예제실습 중 질문입니다

java spring 동시성

답변 2

0

최상용

fpg123 님 안녕하세요.
글로만 봐서는 어떤 상황인지 정확하게 이해가 되지 않습니다.
혹시 문제가 되는 소스를 깃헙에 올려주신 후 주소를 공유해주실 수 있으실까요 ?

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

NamedLock을 사용하는 상황에서 @Transactional을 건 메소드가 데드락에 걸리는 이슈가 발생하는 경우, 트랜잭션 범위와 각 메소드에서 이루어지는 데이터베이스 락의 종류와 순서를 확인해야 합니다. 여기에서는 몇 가지 가능성을 생각해 볼 수 있습니다.

NamedLockStockFacade의 decrease 메소드에 @Transactional 어노테이션이 걸려 있으면 해당 메소드 안에서 실행되는 모든 데이터베이스 관련 작업들은 하나의 트랜잭션으로 묶이게 됩니다. 이 때 lock을 획득하고, 재고를 감소한 다음 lock을 해제하는 과정은 해당 트랜잭션 범위 안에서 이루어집니다.

그럼에도 불구하고, 데드락이 발생한다면, 아래와 같은 이유를 고려해 볼 수 있습니다:

  1. 동시에 여러 트랜잭션이 같은 자원에 대해 lock을 획득하려고 시도할 때 발생할 수 있습니다. 이 경우 서로 다른 트랜잭션들이 서로를 기다리는 상황이 발생하여 데드락이 발생할 수 있습니다.
  2. 다른 메소드나 트랜잭션이 lock의 해제 없이 같은 자원에 접근하려고 한다면, 이미 lock이 걸려있기 때문에 데드락이 발생할 수 있습니다.
  3. 기본적으로 @Transactional이 붙은 메소드 내에서 발생하는 쿼리들은 하나의 트랜잭션으로 묶이며, 장시간 실행되는 쿼리나 업데이트로 인한 락 경쟁이 늘어날 경우 데드락 위험성이 증가합니다.

해결방법에는 여러가지가 있을 수 있는데, 트랜잭션의 범위를 줄이거나, 락을 획득하는 순서를 일관되게 하여 데드락의 가능성을 줄이는 전략 등이 있을 수 있습니다. 문제가 되는 상황에 대한 더 구체적인 분석이 수행되어야 할 것입니다.

데드락 문제 해결에 있어서는 일반적으로 트랜잭션의 범위를 최소화하고, 필요한 경우 적절한 격리수준(isolation level) 설정, 락 획득의 순서와 시도 시간 제한(timeout) 설정 등 다양한 접근 방식을 취할 수 있습니다. 이러한 전략이 올바르게 적용되었는지 다시 한번 검토해 보시는 것이 좋을 것 같습니다.

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

0

43

2

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

0

119

2

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

0

94

2

단일연산

0

70

2

낙관적락vs. 레디스락

0

108

2

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

0

67

2

@Lock(OPTIMISTIC)이 필요한 이유

0

90

2

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

0

131

2

DataSource Hikari 사용 이유

0

145

2

saveAndFlush 사용 이유 문의

0

112

3

비관적 락 VS 네임드 락

0

159

3

application.yaml 에 redis 정보

0

99

2

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

0

183

2

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

0

219

2

@modifying 이용한 동시성 제어

0

168

2

DB락과 분산락

0

260

2

NamedLock 테스트 실패

0

186

2

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

0

172

2

optimistic Lock 재시도 질문입니다.

0

230

2

낙관적 락 테스트 실패

0

239

2

오류?

0

1626

4

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

1

268

2

Pessimistic Lock 전체 테스트 오류 문의

0

359

3

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

0

460

2