inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

다양한 방법 알아보기

@Transactional과 synchronized를 같이 써도 동시성 테스트가 통과 돼요

549

풋데브

작성한 질문수 5

0

강의 보면 통과가 안되는데 저는 테스트 코드를 돌려보면 통과하게 됩니다. 왜그런건가요??

java spring 동시성

답변 2

0

최상용

김앙두님 안녕하세요.
현재 김앙두님의 코드가 어떻게 구성되어 있는지 모르기때문에 자세한 답변을 드리기는 힘들 것 같습니다.
깃헙에 예제 소스가 올라가있는데 어떤부분이 다른지 체크해보신다면 원인을 찾으실 수 있으실거라고 생각됩니다.

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
@Transactional 어노테이션과 synchronized 키워드를 같이 사용하면 트랜잭션과 자바의 동기화 매커니즘이 결합되어 동시성 문제를 방지할 수 있습니다. 하지만 이 두 가지를 사용한다고 해서 모든 동시성 문제가 해결되는 것은 아닙니다.

@Transactional은 주로 데이터베이스의 트랜잭션과 관련된 동시성을 제어하기 위해 사용되며, 데이터베이스 레벨에서 일관성을 유지하는 데 도움이 됩니다. 반면, synchronized는 자바의 내부 동기화 메커니즘으로, 메소드나 코드 블록을 한 시점에 하나의 스레드만 접근할 수 있도록 제한하여 동시성 문제를 해결하고자 할 때 사용됩니다.

강의에서 테스트가 통과하지 않는 것은 여러 스레드가 동시에 같은 메소드에 접근했을 때 발생하는 동시성 문제를 보여주기 위함일 가능성이 높습니다. 반면 김앙두님의 테스트 코드가 통과하는 경우에는 테스트 환경의 차이, 스레드를 처리하는 방식, 데이터베이스의 트랜잭션 격리 수준, JPA 구현체, 혹은 테스트를 실행하는 방법(스레드 개수, 부하 등) 등 여러 요소가 영향을 미쳤을 수도 있습니다.

만약 테스트 코드가 동시성 문제를 정확히 발견하도록 작성되었는지, 테스트 환경이 실제 운영 환경과 유사한지, 그리고 테스트를 실행하는 동안 발생하는 모든 상황을 올바르게 고려했는지 확인해 보셔야 합니다. 또한, 동시성 테스트는 일정한 결과를 항상 보장하기 어려워 복수의 반복 실행을 통해 충분히 검증하는 것이 보통입니다.

다음 자료를 참고하여 Spring Boot의 트랜잭션 관리와 JPA의 트랜잭션에 대해 더 살펴보시면 도움이 될 것입니다:

추가적인 질문이 있거나, 강의의 특정 부분에 대한 궁금증이 있다면 인프런의 질문하기 기능을 통해 강사님이나 다른 학습자들과 직접 소통해보시는 것도 좋은 방법입니다.

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

0

43

2

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

0

121

2

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

0

94

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

231

2

낙관적 락 테스트 실패

0

239

2

오류?

0

1627

4

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

1

268

2

Pessimistic Lock 전체 테스트 오류 문의

0

360

3

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

0

460

2