작성
·
61
·
수정됨
0
현재 프로젝트를 진행하며 재고 관리를 할 때 어떤 락을 사용하는 것이 좋을 지에 대한 고민을 하고 있습니다. 강의를 통해 락의 종류와 사용 방법에 대해 감을 잡을 수 있었습니다. 감사합니다!
현재 동시성 문제가 발생할 때 어떤 상황에서 각각의 락을 사용하는 것이 좋을지에 대해 아직 잘 이해를 잘 하지 못해 판단이 어려운 부분이 있습니다. 분산락은 보통 어떤 상황에서 사용하나요?
비관적락, 낙관적락을 적용하여 동시성 문제가 해결된다면, 굳이 분산락은 고려하지 않아도 괜찮을까요?
아직 이해가 부족한 것 같아 질문드렸습니다!
답변 2
0
돌하르방님 안녕하세요.
질문주신것을 놓쳐서 답변을 늦게 달게 되었습니다. 죄송합니다 ㅠㅠ
비관적락과 낙관적락은 1개의 데이터만 수정할때는 도움이 됩니다.
그렇지만 한개의 서비스에서 여러개의 데이터를 수정, 삽입을 해야 하는상황에서는 수정해야할 데이터들에 대해서 비관락, 낙관락을 잡기에는 어려움이 있을 수 있을것 같습니다.
보통 이러한 상황에서 분산락을 활용하여 제어합니다.
또한, 비관적락은 디비를 활용하여 락을 잡는것이다보니 디비에 부하를 줄 수 있습니다.
비관적락을 사용하여 문제가 해결되고 디비에 부하가 가지 않는다면 비관적락을 사용해도 괜찮습니다!
0
안녕하세요, 인프런 AI 인턴입니다. 돌하르방님의 질문에 대해 답변 드리겠습니다.
DB 락과 분산락의 선택은 시스템의 아키텍처와 사용 사례에 따라 달라질 수 있습니다. 각각의 락은 고유의 상황에서 더 효과적으로 동작하므로, 각각의 성격을 이해하는 것이 중요합니다.
비관적 락과 낙관적 락: 이들은 주로 단일 데이터베이스 환경에서 사용됩니다. 비관적 락(Pessimistic Lock)은 데이터 충돌이 빈번히 발생할 것으로 예상될 때 사용하며, 데이터 액세스 시 다른 사용자가 동시에 접근하지 못하도록 합니다. 낙관적 락(Optimistic Lock)은 충돌이 적게 발생할 것으로 예상되며, 변경이 완료된 후 충돌이 발생했는지 체크하여 처리하는 방식입니다.
분산락: 여러 애플리케이션 서버 또는 여러 데이터베이스 서버가 같은 자원에 접근하는 환경에서는 분산락이 필요할 수 있습니다. 이는 데이터의 일관성을 보장하기 위한 방법으로, 서로 다른 시스템 간에 일관성을 유지해야 할 때 사용이 적합합니다. Redis의 Redisson이나 Zookeeper, Consul 등을 이용한 락 메커니즘이 있습니다.
언제 분산락을 고려해야 하는가?
애플리케이션이 여러 대의 서버에서 동시에 실행되거나, 데이터베이스가 분산되어 동일한 데이터에 대한 접근을 수반하는 경우에 분산락은 중요합니다. 예를 들어, 다수의 서버가 동일한 재고 데이터를 갱신해야 하거나, 여러 애플리케이션 인스턴스가 물리적으로 분리된 데이터베이스를 사용하는 경우도 포함됩니다.
구체적인 적용 사례
- 현재 비관적 락이나 낙관적 락으로 충분히 문제를 해결할 수 있는 환경이라면 반드시 더 무겁고 복잡한 분산락을 도입할 필요는 없습니다. 운영 환경에서 발생할 수 있는 동시성 문제의 빈도와 중요성을 판단하여 결정하는 것이 좋습니다.
다음은 추가로 읽어보시면 좋을 질문 답변입니다:
- 강의에서 배운 수단들은 모두 분산락이라고 할 수 있을까요? - 여러 락의 특성과 사용 사례에 대한 설명을 포함하고 있습니다.
- Redis 분산락 질문 - Redis를 활용한 락 메커니즘에 대해 다루고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추
가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.