[DDD] 오프라인 선점 잠금

개요

  • 아틀라시안의 컨플루언스의 경우 문서를 편집하는 경구 다른 사용자가 이미 편집중인 경우, 충돌 가능성을 사전에 안내하는 기능을 제공함.
  • 여러 사용자가 동시에 한 문서를 수정할 때 발생하는 충돌을 방지함.

오프라인 선점 잠금?

한 사용자가 문서를 편집할 때 다른 사용자가 해당 문서의 수정 화면을 열지 못하도록 하는 기능입니다.

이는 단일 트랜잭션에서의 선점 잠금 방식과는 달리 여러 트랜잭션에 걸쳐 동시 변경을 방지할 수 있다고 한다.

작동 원리

  1. 사용자 A가 문서 수정 폼을 요청하면
    • 시스템은 오프라인 잠금을 구한다.
  1. 사용자 B가 동일한 문서의 수정 폼을 요청하면
    • 이미 잠금이 선점된 상태이므로 잠금을 구할 수 없고, 에러 화면이 표시됩니다.
  1. 사용자 A가 수정을 완료하고 요청을 보내면
    • 시스템은 데이터를 수정하고
    • 오프라인 잠금을 해제한다.

잠금 유효 시간

사용자 A가 수정 요청을 완료하지 않고 프로그램을 종료하는 경우

다른 사용자는 영원히 잠금을 구할 수 없게 된다.

이를 방지하기 위해 오프라인 선점 잠금 방식에는

잠금 유효 시간이 설정되어 있어야함.

유효 기간이 지나면 다른 사용자가 해당 문서에 대한 오프라인 잠금 권한을 획득

유효 시간 연장

잠금 유효 시간이 지난 후에도 사용자 A가 수정을 계속하려는 경우

잠금이 해제되어 수정에 실패할 수 있다.

이를 방지하기 위해 수정 폼에서 일정 주기로 Ajax 호출을 통해 잠금 유효 시간을 연장하는 방법을 사용할 수 있음.

결론

오프라인 선점 잠금 방식은 데이터 충돌을 엄격하게 방지하고자 할 때 유용한 기능입니다.

애초에 화면요청단계부터 강력한 잠금을 걸어버리는것


Uploaded by N2T