작성
·
108
0
안녕하세요. 해당 강의를 통해 다양한 락의 특징과 장단점을 배울 수 있어 현재 프로젝트에 적용할 수 있었습니다.
적용한 부분: 상품 재고 감소에 대한 동시성 제어
적용했던 락: 네임드 락
적용한 이유: 상품 테이블에 재고 컬럼이 포함되어 있기 때문에 비관적 락을 적용할 경우, 해당 row를 단순 조회하거나 다른 비즈니스 로직에서 락 대기 등으로 인해 영향을 미칠 수 있을 것이라 판단하여 네임드 락을 적용했습니다.
궁금한 점: 적용 이후 테스트 과정에서 알게 된 점이, MySQL의 단순 select 쿼리는 FOR UPDATE
로 인해 락이 걸린 row를 조회하더라도 락 대기나 차단이 발생하지 않는다는 사실이었습니다. 또한 네임드 락과 비관적 락 간의 부하 테스트 결과, 성능 차이가 거의 없다는 점에서, 정합성이 중요한 주문/결제 상황이라면 낙관적 락은 배제하고, 오히려 네임드 락보다는 비관적 락을 적용하는 것이 더 적절하지 않을까 하는 의문이 들었습니다.
질문: 상품 테이블에 재고 컬럼이 포함되어 있다고 하더라도 단순 조회 성능에 영향을 주지 않는다는 점에서, 네임드 락보다 비관적 락을 적용하는 것이 더 타당한 선택일지 궁금합니다. 실무적인 기준에서 어떤 판단이 더 적절할지 조언 부탁드립니다.
답변 3
0
springYam 님 안녕하세요.
예시와 같이 한개의 Table 만 수정하는경우에는 말씀하신대로 비관적락이 더 효율적일 수 있을듯합니다.
다만, 실무에서는 재고수정을 할 때 한개의 Table만 수정하는 일은 드물거라고 생각합니다.
여러개의 Table 의 데이터가 수정될때는 여러 Table, 여러 raw 에 대해 락을 잡게 됩니다.
이렇게되면 데드락에 취약해질 수 있다는 단점이 있고, 롱트랜잭션으로 이어질 수 있는 가능성이 열리게 됩니다.
이러한점으로 인하여 여러 Table 의 데이터를 수정할때에는 네임드락을 통한제어나, redis 를 통한 분산락이 효율적일 수 있습니다.
0
비관적 락 -> 다른 트랜잭션이 같은 row에 접근할 수 없다
네임드 락 -> 다른 트랜잭션이 같은 락 이름을 가지고 접근할 수 없다
이렇게 놓고 보았을때도 성능이나 다른 부분에서 차이가 있을까요??
0
안녕하세요, 인프런 AI 인턴입니다. springYam님.
비관적 락과 네임드 락 사용에 관한 중요한 질문을 주셨습니다. 순서에 따라서 각 락이 어떠한 환경에서 더 나은 선택이 될 수 있는지를 살펴보겠습니다.
비관적 락(Pessimistic Lock):
네임드 락(Named Lock):
실무 적용 조언:
추가로, MySQL의 비관적 락에서 발생할 수 있는 락 대기와 차단 이슈가 발생하지 않는 점을 궁금해하셨습니다. 이는 특정 트랜잭션 격리 수준이나 특정 조건에 따라 달라질 수 있으니, 실제 운영 환경에서의 SQL 로그 및 트랜잭션 흐름을 면밀히 모니터링하는 것이 필요합니다.
아래 관련된 기존 답변도 검토해보시면 도움이 될 것입니다:
- 비관적 락에 대한 질문.
- DB락과 분산락
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.