해결된 질문
작성
·
594
1
안녕하세요 선생님, 먼저 좋은 강의 감사드립니다.
강의를 들으며 갱신 손실 문제
를 해결하기 위한 여러 방법들을 학습하며 문득 이런 고민이 생겼습니다.
갱신 손실 문제가 일어날 것 같은 로직(예: 재고 감소)을 구현할 때, 구현 단계에서부터 동시성 제어를 처음부터 고려해야하는가? 고려한다고 했을 때, 트래픽이 얼마나 될지 모르는 상황에서 어떤 방법을 사용할 것인가?
이에 대한 제 생각은 이렇습니다.
처음 로직을 작성할 때부터, 갱신 손실 문제가 운영 중에 발생한다면 큰 문제가 될 수 있으므로 반드시 구현 단계에서 부터 고려한다.
갱신 손실 문제가 아예 일어나지 않는 트래픽이더라도 어차피 성능상 손해보는 것은 없을 것이다.
트래픽이 얼마가 될지 모르므로 우선 Optimistic Lock
을 우선적으로 사용하고, 성능이 안 나오면 Pessimistic Lock
을 사용한다.
저는 이렇게 생각했는데, 선생님께서는 위와 같은 상황이라면 어떻게 구현하실 건지 궁금합니다. 또 일단 갱신 손실 문제를 핸들링 하는 상황이라면 Redis나 Named Lock이 아닌 Optimistic Lock, Pessimistic Lock
을 가장 먼저 고려하실 건지도 궁금합니다.
읽어주셔서 감사합니다. :)
답변 2
1
haero77 님 안녕하세요.
정합성이 중요한 작업을 할때는 말씀하신대로 처음 설계할 때부터 동시성제어를 고려하여 설계해야 합니다.
또한, 순간적인 트래픽이 많지 않을 것이라고 생각되는 경우에는 (레이스컨디션이 적게 일어날 것이라고 예상되는 경우) Optimitic Lock 을 제일 먼저 고려할 것 같습니다.
그리고 운영하면서 Optimitic Lock 을 이용할 때 충돌이 많이 발생한다면, Pessimistic Lock 혹은 Redis 를 이용한 Lock 을 고려 할 것 같습니다.
두번째 경우는 순간적인 트래픽이 많을 것이라고 생각 되는경우에는 (레이스컨디션이 빈번하게 일어날 것이라고 예상되는 경우) 설계단계부터 redis 를 고려하여 설계할 것 같습니다.
감사합니다 :)
1
적합한 방법이라고 생각합니다. 우선적으로 Optimistic Lock을 사용하여 성능을 최적화시키고, 만약 일부 이슈가 발생할 경우 Pessimistic Lock을 사용해 동시성 제어를 하면 됩니다. 이렇게 하면 트래픽이 많은 상황에서도 안정적인 동작을 보장할 수 있습니다. 또한 갱신 손실 문제를 핸들링하는 상황에서 Redis나 Named Lock의 사용 여부는 구체적인 구현 방법에 따라 다를 수 있으며, 상황에 따라 적합한 방법을 선택하는 것이 좋습니다.