강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

문수님의 프로필 이미지
문수

작성한 질문수

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

Optimistic Lock 활용해보기

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

작성

·

20

0

@Version만 붙여도 자동으로 낙관적 락을 적용 시켜주는 걸로 알고 있습니다.
근데 강의에서는 @Lock(LockModeType.OPTIMISTIC) 을 이용해서 조회 시점부터 락을 거는 이유가 있을까요?

@Lock(LockModeType.OPTIMISTIC) 를 제거하고 동시성 테스트 했을 떄도 정상적으로 돌아가긴 합니다. 어떤 차이가 있을까요

답변 2

0

최상용님의 프로필 이미지
최상용
지식공유자

문수님 안녕하세요!
강의에서는 낙관적락을 사용한다는것을 명시적으로 나타내기 위해서 삽입하였습니다!

어노테이션은 필요에따라 사용하시면 될 것 같습니다!

감사합니다

0

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

JPA에서 @Version을 활용한 낙관적 락(Optimistic Lock)은 엔티티가 수정될 때 버전 정보를 이용하여 충돌을 감지합니다. 기본적으로, @Version은 수정이나 삭제를 할 때만 충돌 여부를 판별하게 됩니다.

하지만, @Lock(LockModeType.OPTIMISTIC)는 데이터 조회 시점에서도 락을 걸어줍니다. 이렇게 하면 읽기 트랜잭션 동안에 다른 트랜잭션이 데이터를 변경할 수 없도록 하여 더 강한 일관성을 보장할 수 있습니다. 즉, 조회 시점에 이미 데이터에 대한 캡처가 이루어지므로, 그 이후의 변경이 감지될 수 없습니다.

이를테면:
- @Version: 데이터 수정 시에만 버전 충돌 검사를 합니다.
- @Lock(LockModeType.OPTIMISTIC): 데이터 조회 시점부터 충돌을 대비함으로써 전체적인 데이터의 일관성을 강화합니다.

따라서, @Lock(LockModeType.OPTIMISTIC)를 사용하는 경우, 읽기 동안 데이터의 다른 변경을 더 엄격하게 제어하여 보다 안전한 데이터 읽기 환경을 제공합니다.

혹시 더 상세한 예시나 추가적인 설명이 필요하시면, Optimistic Lock 활용해보기 관련 질문을 참고하시면 도움이 될 수 있습니다. 이 링크에서는 낙관적 락의 동작 원리와 예외 처리에 대한 내용을 다루고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

문수님의 프로필 이미지
문수

작성한 질문수

질문하기