일상/TIL

프로젝트에서의 낙관적 락 선택이유

aihtnyc_h 2023. 5. 18. 23:45
728x90
반응형
SMALL

To do

  • [x] 아침운동하기
  • [x] 코테5문제풀기 (5문제 완)
  • [x] 자바 3페이지 읽기
  • [x] cs책 읽고 정리하기 →11 로그 다시 정리 및 검색 내용 정리 다시
  • [x] 이력서 수정하기
  • [x] 이력서 과제

외부일정

  • [x] 버디님 멘토링
  • [x] CS 스터디

https://aihtnyc-h.tistory.com/entry/%EB%82%99%EA%B4%80%EC%A0%81-%EB%9D%BD%EA%B3%BC-%EB%B9%84%EA%B4%80%EC%A0%81-%EB%9D%BD

 

낙관적 락과 비관적 락

낙관적 락 낙관적 락은 트랜잭션이 데이터에 대한 변경을 실제로 커밋하려고 할 때만 데이터 충돌이 발생할 것으로 가정한다. 이 방법은 데이터의 동시 액세스 충돌이 거의 발생하지 않는 시스

aihtnyc-h.tistory.com

자세한 내용은 정리를 따로 해뒀습니다.

동시성 제어 이슈를 방지하기 위하여 db에 낙관적 락을 사용했습니다.
비관적 잠금은 트랜잭션이 레코드에 접근하는 동안 다른 트랜잭션이 그 레코드를 수정하거나 삭제하는 것을 막고, 지속적인 잠금으로 인한 성능 저하의 가능성이 있습니다.

따라서 저희 팀은 이러한 프로젝트의 특성과 요구 사항을 고려하여, 동시성 제어 이슈를 방지하기 위해 데이터베이스에서 낙관적 잠금을 사용하기로 결정하였습니다.

낙관적 락을 사용했지만, 트레픽이 높을 때 버전 충돌에 대해서는 어떻게 대처 할것인가?
트래픽이 매우 높은 상황에서는 동시에 여러 트랜잭션이 같은 데이터에 접근할 가능성이 높아져, 낙관적 락을 사용할 경우 버전 충돌이 자주 발생할 수 있습니다. 이 경우, 트랜잭션 재시도 또는 롤백 등의 추가적인 작업이 필요하게 되어 시스템의 성능에 영향을 줄 수 있습니다.

따라서 트래픽이 높은 환경에서는 낙관적 락의 사용을 신중히 고려해야 합니다. 가능하면 충돌이 빈번히 일어나지 않는 상황에 대해 분석하고, 적절한 최적화 방안을 모색해야 합니다. 예를 들어, 데이터를 적절하게 분할하여 동시 접근을 최소화하는 방법, 또는 pessimistic locking(비관적 락) 등 다른 동시성 제어 방법을 고려할 수 있습니다.


다른 동시성 제어 방법

  1. Pessimistic Locking(비관적 락): 비관적 락은 데이터에 동시 접근이 일어나지 않도록 가정하는 방법입니다. 즉, 트랜잭션이 데이터를 사용할 때 다른 트랜잭션이 해당 데이터를 사용하지 못하도록 락을 걸어둡니다. 이 방법은 동시 접근 충돌이 빈번하게 발생할 것으로 예상되는 경우에 적합합니다.
  2. Optimistic Locking(낙관적 락): 낙관적 락은 데이터 충돌이 드물게 발생할 것으로 가정합니다. 데이터를 처음 읽을 때 충돌이 발생하지 않을 것이라고 가정하고, 데이터를 업데이트 할 때 충돌이 발생했는지 확인합니다. 충돌이 발생한 경우, 충돌 해결 전략에 따라 다시 시도하거나 오류를 반환합니다.
  3. Two-Phase Locking (2단계 락): 이 방법은 트랜잭션의 락 획득과 해제를 두 단계로 구분합니다. 트랜잭션이 모든 락을 획득한 후에는 더 이상 새로운 락을 획득할 수 없으며, 락을 해제하기 시작하면 더 이상 락을 해제할 수 없습니다. 이 방법은 일관성 있는 데이터베이스 상태를 유지하도록 도와줍니다.
  4. Timestamp Ordering: 이 방법은 각 트랜잭션에 유일한 타임스탬프를 부여하고, 이 타임스탬프를 기반으로 데이터에 접근하는 순서를 제어합니다. 이 방법은 데드락을 방지할 수 있지만, 충돌이 자주 발생할 경우 많은 트랜잭션을 취소해야 할 수 있습니다.

추가적으로 더 조사가 필요할거 같습니다!

728x90
반응형
LIST