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

by.kim님의 프로필 이미지
by.kim

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

트랜잭션 락 질문

작성

·

318

·

수정됨

0

jpa 트랜잭션 락 기능중에 낙관적 락과 비관적 락이 있는데

실제로 이 락을 실무에서도 많이 사용하는지 궁금합니다.

인터넷 예시로 게시글 조회수 카운트나 좋아요 카운트 관리 할 때 많이 사용한다고 하는데

조회수나 좋아요 카운트는 카운트가 실시간으로 정확히 맞을 필요는 없는데 굳이 락을 이용해서 관리를 해야만 하는지 의문점이 들기도 합니다.

실제로 실무에서 많이 사용한다면, 좀 더 실무에 와 닿을 수 있는 케이스를 알려주시면 감사하겠습니다.

 

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. by.kim님

비관적 락(Pessimistic Lock)과 낙관적 락(Optimistic Lock)은 데이터베이스에서 동시성 제어를 위해 사용되는 두 가지 접근 방식입니다. 각각의 락은 상황에 따라 적절하게 사용될 수 있습니다.

  1. 비관적 락(Pessimistic Lock)

  • 비관적 락은 데이터를 읽는 시점에 바로 락을 걸어서 다른 트랜잭션이 해당 데이터를 수정하는 것을 방지합니다.

  • 주로 데이터 수정이 빈번하고 충돌 가능성이 높은 경우에 사용됩니다.

  • 예를 들어, 은행 계좌 시스템에서 계좌 잔액을 업데이트할 때 비관적 락을 사용할 수 있습니다.

  1. 낙관적 락(Optimistic Lock)

  • 낙관적 락은 데이터를 읽는 시점에는 락을 걸지 않고, 업데이트할 때 충돌이 발생했는지 검사합니다.

  • 주로 데이터 수정이 빈번하지 않고 충돌 가능성이 낮은 경우에 사용됩니다.

     

실무에서는 시스템의 요구사항과 특성에 따라 적절한 락 메커니즘을 선택하고 사용해야 합니다. 낙관적 락은 충돌 가능성이 낮은 상황에서 유용하게 사용될 수 있지만, 모든 상황에 적용되는 것은 아닙니다.

참고로 낙관적 락에 대해서 제대로 이해하려면 JPA의 많은 부분을 알아야 합니다.

더 자세한 내용은 JPA 책 16.1 트랜잭션과 락을 참고해주세요.

감사합니다.

0

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

by.kim님의 질문은 JPA에서 제공하는 트랜잭션 락 기능인 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)에 대한 실무적 사용 사례와 필요성에 관한 것으로 보입니다. 질문에서는 특히 인터넷에서 자주 언급되는 조회수나 좋아요 카운트 같은 도메인에서 락을 사용하는 것이 정말 필요한지에 대한 의문을 제기하고 계신 것 같습니다.

관련하여 김영한 강사님의 질문&답변 게시판에 비슷한 내용에 관한 질문이 있어 의견을 참고하시면 도움이 될 것으로 사료됩니다.

“비관적 락 질문드립니다.”
- 이 링크의 질문은 비관적 락에 대해 혼란을 느끼는 수강생에게 김영한 강사님이 설명을 제공한 내용입니다. 강사님은 비관적 락의 실무 사용에 대한 명확한 기준을 제시하지 않았지만, 데이터베이스의 격리 수준에 따라 다른 트랜잭션에서 SELECT FOR UPDATE로 잠긴 행을 읽을 수 있는지를 설명하셨습니다. 이는 비관적 락이 특정 상황에 적합할 수 있음을 시사합니다.

“낙관적인 락”
- 여기에서는 낙관적 락을 사용하는 실무 사례에 대해 궁금해하는 수강생에게 김영한 강사님이 낙관적 락이 해결할 수 있는 문제 상황을 설명하고 있습니다. 낙관적 락은 특정 데이터에 대한 동시 변경을 처리할 때 유용하며, 갱신 분실 문제를 해결하는 데 적합할 수 있음을 설명하고 있습니다.

위 답변들에서 얻을 수 있는 인사이트는 낙관적 락과 비관적 락이 실무에서 모두 사용될 수 있으며, 사용 상황에 따라 각기 다른 유형의 락이 적합할 수 있음을 알 수 있습니다. 예를 들어, 낙관적 락은 충돌 가능성이 적고 성능이 중요한 시나리오에서 유용하며, 비관적 락은 데이터의 일관성과 정합성이 매우 중요하거나 충돌 가능성이 높은 상황에서 고려될 수 있습니다.

추가적으로 질문자님이 언급한 조회수나 좋아요 카운트 같은 기능에서는 데이터의 정확성이 중요도가 낮을 수 있으므로, 성능에 영향을 덜 주는 낙관적 락을 선호할 수 있습니다. 하지만, 은행 계좌 이체와 같이 정확한 데이터 일치가 필요한 경우 비관적 락을 사용할 수 있습니다.

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

by.kim님의 프로필 이미지
by.kim
질문자

대부분의 서비스는 데이터의 정합성이 더 중요해서 비관적 락을 더 많이 사용 할 것 같은데
낙관적 락을 사용하는 예시를 좀 더 들어주셨으면 좋겠습니다.

 

지나가다가 의견 남겨요~ ( 사견이고, 제 의견이 무조건 맞다고 말씀드리는건 아니에요 )


조회수 같은 경우에 낙관적 락을 사용한다면, 실패하는 경우가 많고, 재요청으로 서버에 부하가 생길 가능성이 있어보여요, (특히 인기글 같은 경우)

때문에 조회수 같은 경우는 락을 이용하기보다, 다른 방법을 이용해서 처리하면 어떨까 생각해봐요

 

낙관적 락의 예시는, 상품 구매를 생각해보시면 어떨까 해요!

by.kim님의 프로필 이미지
by.kim

작성한 질문수

질문하기