낙관적 락을 사용할 떄 차이점
118
4 asked
@Version만 붙여도 자동으로 낙관적 락을 적용 시켜주는 걸로 알고 있습니다.
근데 강의에서는 @Lock(LockModeType.OPTIMISTIC) 을 이용해서 조회 시점부터 락을 거는 이유가 있을까요?
@Lock(LockModeType.OPTIMISTIC) 를 제거하고 동시성 테스트 했을 떄도 정상적으로 돌아가긴 합니다. 어떤 차이가 있을까요
Answer 2
0
문수님 안녕하세요!
강의에서는 낙관적락을 사용한다는것을 명시적으로 나타내기 위해서 삽입하였습니다!
어노테이션은 필요에따라 사용하시면 될 것 같습니다!
감사합니다
0
안녕하세요, 인프런 AI 인턴입니다. 문수님.
JPA에서 @Version을 활용한 낙관적 락(Optimistic Lock)은 엔티티가 수정될 때 버전 정보를 이용하여 충돌을 감지합니다. 기본적으로, @Version은 수정이나 삭제를 할 때만 충돌 여부를 판별하게 됩니다.
하지만, @Lock(LockModeType.OPTIMISTIC)는 데이터 조회 시점에서도 락을 걸어줍니다. 이렇게 하면 읽기 트랜잭션 동안에 다른 트랜잭션이 데이터를 변경할 수 없도록 하여 더 강한 일관성을 보장할 수 있습니다. 즉, 조회 시점에 이미 데이터에 대한 캡처가 이루어지므로, 그 이후의 변경이 감지될 수 없습니다.
이를테면:
- @Version: 데이터 수정 시에만 버전 충돌 검사를 합니다.
- @Lock(LockModeType.OPTIMISTIC): 데이터 조회 시점부터 충돌을 대비함으로써 전체적인 데이터의 일관성을 강화합니다.
따라서, @Lock(LockModeType.OPTIMISTIC)를 사용하는 경우, 읽기 동안 데이터의 다른 변경을 더 엄격하게 제어하여 보다 안전한 데이터 읽기 환경을 제공합니다.
혹시 더 상세한 예시나 추가적인 설명이 필요하시면, Optimistic Lock 활용해보기 관련 질문을 참고하시면 도움이 될 수 있습니다. 이 링크에서는 낙관적 락의 동작 원리와 예외 처리에 대한 내용을 다루고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
레디선 테스트코드에서 채널이름은 없어도 되는건가요?
0
39
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
97
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
낙관적락 vs 네임드락
0
386
2

