inflearn logo
강의

Course

Instructor

How to solve simultaneity issues through inventory system

synchronized 키워드 후 테스트 실패나는 이유

579

issiscv462218

27 asked

0

안녕하세요. 실패하는 이유를 간략하게 설명하셨는데 그 이유가 혹시 스프링의 aop 동작인 proxy 때문인가요?

저는 트랜잭션을 지우면 값이 decrease 되지 않고 100이 됩니다.

트랜잭션이 없기 때문에 100이 되어야 하는거 아닌가요?

프록시 java aop spring 동시성

Answer 4

1

169developer9973

김상운님 안녕하세요.

saveAndFlush method 에는 사진에서 보시는것과 같이 기본적으로 @Transactional 이 선언되어있습니다 :)

image

0

issiscv462218

data jpa 에서 제공하고 있다는걸 인지하지 못하고 있었넹..ㅠ 감사합니다!

0

issiscv462218

강의 3분 0초에 트랜잭션 어노테이션을 지우신 부분이요!ㅎㅎ
트랜잭션을 어노테이션을 지우게 되면 테스트 케이스가 실패해야 하는게 아닌가 해서요..

지우게되면 어느곳에서도 트랜잭션 전파가 일어나지 않아서 저는 실패하게되는데 선생님께서는 성공하셔서요,, 제가 미흡한 부분이 많아 강의에 놓친 부분이 있나해서 질문을 남겼습니다!

0

169developer9973

@Transactional 을 주석처리하게 된다면 다른 스레드가 decrease 메소드에 접근하기 이전에 Database 에 commit 을 하기때문에 성공하는것이 맞습니다.

혹시 오류가 나시는 소스를 github 에 올리신 후 공유해주실 수 있으실까요 ?

0

issiscv462218

친절한 답변 감사합니다!ㅎㅎ 제가 강의 내용중 saveAndFlush() 를 빼먹었었네요..!

해당 메서드 추가후 테스트 코드가 성공 되었습니다! 감사합니다!

제가 햇갈린 부분은 트랜잭션 어노테이션이 없으면 읽기는 가능한데 변경은 되지 않아 변경감지가 동작하지 않는데 어떻게 성공할까가 의문이었습니다. 하지만 saveAndFlush() 를 통해 다시 저장 후 flush 를 진행하여 성공하는 구나! 라고 이해했습니다.

하지만 결국엔 saveAndFlush() 가 일어나기 위해서는 @Transactional 어노테이션이 없어도 트랜잭션이 생기게 되고 이 동작 방식은 @Transactional 이 있을때와는 다르게 돌아간다고 생각해도 될까요!?

즉 쓰레드 접근 하나당 @Transactional 어노테이션이 없어도 @Transactional 어노테이션이 있을때와는 범위가 다른 트랜잭션 하나가 생긴다고 봐도 될까요?

0

169developer9973

김상운님 안녕하세요.

영상에서 간략하게 설명을 드렸던것처럼 Spring 의 @Transactional 어노테이션의 동작방식때문에 그렇습니다.

proxy 때문이라고 이해를 하셔도 될듯합니다.

이 부분은 어떤말씀인지 이해를 하지 못했습니다.

추가적인 설명을 부탁드려도 될까요 ?

저는 트랜잭션을 지우면 값이 decrease 되지 않고 100이 됩니다.

트랜잭션이 없기 때문에 100이 되어야 하는거 아닌가요?

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

0

39

2

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

0

118

2

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

0

91

2

단일연산

0

69

2

낙관적락vs. 레디스락

0

106

2

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

0

65

2

@Lock(OPTIMISTIC)이 필요한 이유

0

88

2

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

0

128

2

DataSource Hikari 사용 이유

0

144

2

saveAndFlush 사용 이유 문의

0

111

3

비관적 락 VS 네임드 락

0

158

3

application.yaml 에 redis 정보

0

98

2

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

0

181

2

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

0

217

2

@modifying 이용한 동시성 제어

0

167

2

DB락과 분산락

0

260

2

NamedLock 테스트 실패

0

186

2

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

0

171

2

optimistic Lock 재시도 질문입니다.

0

229

2

낙관적 락 테스트 실패

0

239

2

오류?

0

1624

4

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

1

267

2

Pessimistic Lock 전체 테스트 오류 문의

0

357

3

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

0

458

2