강의

멘토링

로드맵

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

백종인님의 프로필 이미지
백종인

작성한 질문수

주문시스템으로 알아보는 분산트랜잭션

Optimistic Lock 사용이유

작성

·

15

0

TCC 구현하기(2) - 동시성문제 해결하기에서 갑자기 왜 분산락 사용에서 Optimistic Lock 사용으로 변경되었는지 알 수 있을까요?

답변 2

0

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

백종인님 안녕하세요.
강의에서 사용했던 분산락은 1개의 주문에 대한 처리를 보장하기 위하여 사용하였습니다.
A 상품의 재고가 5개가 있다고 가정해보고 1번 주문이 A 상품을 4개구매, 2번 주문이 B 상품을 2개구매 한다고 가정해보겠습니다.

 

분산락은 1번주문과 2번주문이 각 1번씩 주문되는것을 보장해줍니다. 하지만 A 상품의 재고는 보장해주지 못합니다. -> A 상품이라는 리소스에 여러개의 접근이 '동시에' 가능하기 때문입니다.

 

A상품이라는 리소스에 여러개의 접근이 동시에 가능한것을 방어하기 위하여 optimistic lock 을 활용하였습니다.

감사합니다.

0

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

질문해 주셔서 감사합니다. Optimistic Lock을 사용하는 이유는 주로 시스템의 성능 최적화와 특정 환경에서의 효율적인 동시성 관리를 위해서입니다. 일반적으로 분산락은 여러 시스템 간의 자원 접근을 관리하기 위한 방법으로 사용되지만, Optimistic Lock은 데이터 충돌이 적은 환경에서 더욱 효과적으로 동작합니다.

Optimistic Lock의 주요 장점은 다음과 같습니다:

  • 성능 효율성: Optimistic Lock은 레이스 조건이 빈번하지 않은 환경에서는 성능 면에서 우월합니다. 락을 아예 걸지 않기 때문에 기다리는 시간이 줄어들고 동시성 처리가 더욱 유연해질 수 있습니다.
  • 낮은 충돌 빈도: 충돌이 발생했을 때에만 롤백이 이루어지기 때문에, 데이터베이스의 자원을 부모와 자식 노드들이 독립적으로 관리할 수 있는 장점이 있습니다.
  • 비차단성: Optimistic Lock은 다른 트랜잭션의 진행을 차단하지 않기 때문에, 결과적으로 시스템의 응답성을 개선할 수 있습니다.

분산락을 사용하는 것은 여러 시스템에서 동일한 리소스에 대해 접근할 때, 동시성 관리를 좀 더 강력히 해야 할 경우에 유용합니다. 하지만 Optimistic Lock은 동시성 문제가 빈번하지 않을 때의 대안으로 선택될 수 있습니다.

예를 들어, TCC(트랜잭션 수율 계산) 구현 시에 작업이 서로 독립적이며 충돌이 드물다고 판단되면 Optimistic Lock을 선택하여 시스템의 성능을 최대한 끌어올릴 수 있습니다.

이와 관련된 질문 및 답변을 통해 더욱 상세한 정보를 원하신다면 다음 링크를 참고하실 수 있습니다:
- Optimistic Lock 버전 관리 질문 - Optimistic Lock이 동시성 문제를 어떻게 해결할 수 있는지에 대한 설명이 있습니다.

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

백종인님의 프로필 이미지
백종인

작성한 질문수

질문하기