• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

갱신 손실 문제가 일어날 것 같은 로직에는 무조건 동시성 제어를 해줘야할까요?

23.06.25 21:35 작성 조회수 483

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

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.06.27

적합한 방법이라고 생각합니다. 우선적으로 Optimistic Lock을 사용하여 성능을 최적화시키고, 만약 일부 이슈가 발생할 경우 Pessimistic Lock을 사용해 동시성 제어를 하면 됩니다. 이렇게 하면 트래픽이 많은 상황에서도 안정적인 동작을 보장할 수 있습니다. 또한 갱신 손실 문제를 핸들링하는 상황에서 Redis나 Named Lock의 사용 여부는 구체적인 구현 방법에 따라 다를 수 있으며, 상황에 따라 적합한 방법을 선택하는 것이 좋습니다.