어흥

[CS] 동시성 제어 본문

CS

[CS] 동시성 제어

라이언납시오 2022. 3. 18. 10:06
728x90
반응형

동시성 제어는 멀티 유저를 위한 프로젝트를 개발하다보면 필수로 처리해야 될 문제다.

 

1. 개념

 

우선 동시성 제어란, 동시에 실행되는 여러 개의 트랜잭션이 작업을 성공적으로 마칠 수 있도록 트랜잭션의 실행 순서를 제어하는 기법이다.

 

동시성 제어의 정의

  • Multi-user 환경을 지원하는 DB 시스템에서 여러 트랜잭션들이 성공적으로 동시에 실행될 수 있도록 지원
  • Multi-user 환경을 지원하는 DB 시스템에선 필수로, '병행 제어'로도 불린다
  • 트랜잭션의 직렬화 수행 보장(순서 보장)

동시성 제어의 목적

  • 트랜잭션의 직렬성 보장
  • 데이터의 무결성 및 일관성 보장

동시성 제어 필요 이유

  • 갱신 손실(Lost Update): 2개 이상의 트랜잭션이 1개의 데이터를 동시에 갱신 → 갱신 무효화
  • 현황파악오류(Dirty Read): A 트랜잭션이 C 데이터를 작업 中(Write) + B 트랜잭션이 Commit 되지 않은 C 데이터를 읽는다(Read) → A 트랜잭션 롤백시 B 트랜잭션은 잘못된 데이터를 읽은 결과가 도출
  • 모순성(Inconsistency): 서로 다른 트랜잭션이 A 항목 값을 갱신하는 동안(Write) 한 트랜잭션이 A 항목을 읽을 때(Read), Commit 전의 값과 Commit 이후의 값 중 어떤 값을 읽어야 하는지
  • 연쇄복귀(Cascading Rollback): 한 트랜잭션이 데이터를 갱신한 다음 실패하여 Rollback을 수행하는 과정에서 갱신과 Rollback을 수행하는 과정에서 값을 읽을 때 발생

※ 같이 알아야 하는 개념

- 트랜잭션의 격리 수준 https://imnotabear.tistory.com/535

 

2. 예시

상황 #1
온라인 이커머스 사이트 A에서 B 상품을 구매한 선착순 100명에게 재구매 쿠폰을 발행하려고 한다.
어떤 방식으로 처리해야 정확하게 100명에게 쿠폰을 발행할 수 있을까?

상황 #2
인기그룹 A의 콘서트 예약을 사이트 B에서 진행하려고 한다.
총 10000명의 자리만 허용되어 있다면, 어떤 방식으로 처리해야 정확하게 1만명만 수용할 수 있을까?


※ RDBMS 격리수준
ORACLE: Read Committed
MySQL: Repeatable Read

 

 

3. 처리 방법(상황에 따라 다르며 방법들 추가 필요)

  • Synchronized 키워드를 활용한 Thread-safe
  • 더보기
    단점: 분산 WAS에 적합하지 않다
  • For Update 사용: Where 절에 의해 나온 행의 Lock을 건다

  • 더보기
    단점: Rollback or Commit하지 않으면, LOCK을 획득할 때까지 무한정 기다린다
  • 격리수준을 Serializable로 설정한다

 

[참고 자료]

- https://velog.io/@ha0kim/%EB%8F%99%EC%8B%9C%EC%84%B1-%EC%A0%9C%EC%96%B4

- https://woodcock.tistory.com/33

- https://hyos-dev-log.tistory.com/9

- https://hjjungdev.tistory.com/107

 

728x90
반응형

'CS' 카테고리의 다른 글

[CS] 싱글톤 패턴  (0) 2022.02.24
[CS] 필기 및 면접 대비 블로그  (0) 2021.03.24
Comments