카샤의 만개시기

Second Lost Updates Problem (두 번의 갱신 분실 문제) 본문

Foundation/Programming

Second Lost Updates Problem (두 번의 갱신 분실 문제)

SKaSha 2019. 7. 9. 00:48

동시성 프로그래밍을 할때 트랜잭션 처리는 반드시 고려해야 할 사항이다.
하지만 데이터베이스 트랜잭션 범위를 넘어가는 문제가 발생하는 경우도 있다.
예를 들어 사용자 A와 B가 동시에 동일한 위키백과 내용을 열람하고 이를 수정할때, A가 먼저 수정완료 버튼을 누르고 그 이후에 B가 수정완료 버튼을 누르는 경우가 있을 수 있다.
그렇게되면 먼저 완료 버튼을 누른 A의 수정사항은 사라지고 나중에 완료한 B의 수정사항만 남는 현상이 일어난다.
이를 Second Lost Updates Problem(두 번의 갱신 분실 문제)라고 한다.

이 문제를 해결하기 위해서는 3가지 선택 방법이 존재한다.

  1. 마지막 커밋 인정하기
    위에서 설명한것과 같이 A의 수정사항은 무시하고 마지막에 커밋한 B의 내용만 인정하는 방법으로 가장 기본적인 방법이라 할 수 있다.
  2. 최초 커밋 인정하기
    먼저 커밋한 A의 수정사항만 인정하고 B의 수정 요청은 예외를 발생시키는 방법이다.
    대표적으로 JPA의 @Version 애노테이션을 통하여 낙관적 락을 사용하는 방법인데 이에 대한 자세한 내용은 아래 링크를 참조바란다.
    JPA에서 Optimistic Lock과 Pessimistic Lock
  3. 커밋 된 갱신 내용 병합하기.
    A와 B의 수정사항을 병합하여 적용하는 방법이다.
Comments