Alice와 Bob이 모두 제품 목록을 편집하는 전자 상거래 사이트를 생각해보십시오. Alice는 설명을 개선하고 Bob은 가격을 업데이트합니다. Acme Wonder Widget을 동시에 편집하기 시작합니다. 밥은 먼저 마무리하고 새로운 가격으로 제품을 저장합니다. Alice는 설명을 업데이트하는 데 시간이 조금 더 걸리며 완료되면 새 설명과 함께 제품을 저장합니다. 불행히도, 그녀는 의도하지 않은 이전 가격으로 가격을 덮어 씁니다.
내 경험상 이러한 문제는 웹 앱에서 매우 일반적입니다. 일부 소프트웨어 (예 : wiki 소프트웨어)는이를 방지합니다. 일반적으로 "편집 중 페이지가 업데이트되었습니다"라는 두 번째 저장에 실패합니다. 그러나 대부분의 웹 사이트에는이 보호 기능이 없습니다.
컨트롤러 메소드 자체가 스레드로부터 안전하다는 점은 주목할 가치가 있습니다. 일반적으로 데이터베이스 트랜잭션을 사용하므로 Alice와 Bob이 정확한 순간에 저장하려고하면 손상이 발생하지 않는다는 점에서 안전합니다. 경쟁 조건은 브라우저에 오래된 데이터가있는 Alice 또는 Bob에서 발생합니다.
이러한 경쟁 조건을 어떻게 방지 할 수 있습니까? 특히 알고 싶습니다.
- 어떤 기술을 사용할 수 있습니까? 예 : 마지막 변경 시간 추적. 각각의 장단점은 무엇입니까?
- 유용한 사용자 경험은 무엇입니까?
- 이 보호 기능은 어떤 프레임 워크에 내장되어 있습니까?