
동시성
동시성문제의 필요성
동시성 문제는 여러 트랜잭션이나 작업이 동시에 실행될 때 발생하는 충돌이나 데이터 무결성 문제를 의미한다. 데이터베이스 시스템에서는 여러 사용자가 동시에 데이터에 접근하고 수정할 수 있다. 이러한 상황에서 적절한 동시성 제어가 없다면 여러 문제들이 발생할 수 있다.
비관적락
비관적 락은 데이터 충돌이 빈번하게 발생할 것으로 예상되는 환경에서 사용된다.
트랜잭션이 데이터에 접근할 때 다른 트랜잭션이 해당 데이터에 접근하지 못하도록 잠금을 거는 방식이다.
이 방식은 데이터의 무결성을 강력하게 보장하지만, 동시성 성능이 저하될 수 있다.
비관적 락은 데이터베이스에서 데이터를 읽거나 수정할 때, 해당 데이터에 대해 잠금을 설정하여 다른 트랜잭션이 접근하지 못하게 한다. 이는 주로 데이터의 충돌이 자주 발생하는 환경에서 사용된다.
비관적락은 데이터 충돌방지 데이터 무결성 보장 동시정 제어 가 중요할 때 사용한다.
- 상황: A 사용자가 재고를 감소시키는 트랜잭션을 시작하고, B 사용자가 동시에 재고를 감소시키는 트랜잭션을 시작하는 상황이다.
- 목적: 동일한 재고를 두 사용자가 동시에 수정하지 못하도록 한다.
예제 설명
- 비관적 락 적용: A 사용자가 트랜잭션을 시작하여 재고를 감소시키는 동안, B 사용자가 동일한 재고에 접근하려고 하면 잠금이 걸려 접근할 수 없다. A 사용자가 트랜잭션을 커밋하거나 롤백할 때까지 B 사용자는 대기한다.
- 트랜잭션 흐름:
- A 사용자: 트랜잭션을 시작하고 재고를 감소시키는 작업을 시작한다.
- B 사용자: 트랜잭션을 시작하려고 하지만, A 사용자가 잠금을 걸었기 때문에 접근할 수 없다. B 사용자는 A 사용자가 트랜잭션을 완료할 때까지 대기한다.
- A 사용자: 트랜잭션을 커밋하거나 롤백한다.
- B 사용자: A 사용자가 트랜잭션을 완료한 후에야 재고를 수정할 수 있다.
낙관적락
낙관적 락은 데이터 충돌이 드물게 발생할 것으로 예상되는 환경에서 사용된다.
이는 트랜잭션이 데이터에 접근할 때 잠금을 사용하지 않고, 트랜잭션이 종료되기 전에 다른 트랜잭션이 데이터를 변경하지 않았는지 확인하는 방식이다.
낙관적 락은 주로 충돌이 적고, 성능을 중시하는 시스템에서 사용된다.
낙관적 락은 트랜잭션이 데이터를 수정하기 전에 데이터의 현재 상태를 저장하고, 트랜잭션이 완료될 때까지 다른 트랜잭션이 해당 데이터를 변경하지 않았는지 확인한다.
만약 데이터가 변경되었다면 트랜잭션을 재시도한다
관적락은 충돌 빈도가 낮은 환경 높은 동시성 요구 데이터 무결성 유지 가 중요할 때 사용한다.
- 상황: A 사용자가 재고를 감소시키는 트랜잭션을 시작하고, B 사용자가 동시에 재고를 감소시키는 트랜잭션을 시작하는 상황이다.
- 목적: 동일한 재고를 두 사용자가 동시에 수정하려고 할 때 충돌을 방지하고 재시도하게 한다.
예제 설명
- 낙관적 락 적용: A 사용자가 트랜잭션을 시작하여 재고를 감소시키는 동안, B 사용자가 동일한 재고에 접근하여 수정하려고 시도한다. 두 사용자는 모두 재고의 현재 상태를 저장한다.
- 트랜잭션 흐름:
- A 사용자: 트랜잭션을 시작하고 재고를 감소시키는 작업을 시작한다.
- B 사용자: 트랜잭션을 시작하고 재고를 감소시키는 작업을 시작한다.
- A 사용자: 트랜잭션을 커밋하기 전에 데이터가 변경되지 않았는지 확인하고 커밋한다.
- B 사용자: 트랜잭션을 커밋하기 전에 데이터가 변경되지 않았는지 확인한다. A 사용자가 이미 데이터를 변경했으므로, B 사용자의 트랜잭션은 충돌이 발생하고 재시도해야 한다.
'mysql' 카테고리의 다른 글
# 서브쿼리 이해해보기 (0) | 2024.08.06 |
---|---|
트랜잭션의 격리수준(Transaction Isolation Level) [2편-1] (0) | 2024.07.17 |
트랜잭션 정리글 및 이해하기 [1편] (0) | 2024.07.15 |
jdbc PreparedStatement (0) | 2023.08.01 |
tool을 이용하여 E-R다이어그램 설계방법 (0) | 2023.07.25 |

동시성
동시성문제의 필요성
동시성 문제는 여러 트랜잭션이나 작업이 동시에 실행될 때 발생하는 충돌이나 데이터 무결성 문제를 의미한다. 데이터베이스 시스템에서는 여러 사용자가 동시에 데이터에 접근하고 수정할 수 있다. 이러한 상황에서 적절한 동시성 제어가 없다면 여러 문제들이 발생할 수 있다.
비관적락
비관적 락은 데이터 충돌이 빈번하게 발생할 것으로 예상되는 환경에서 사용된다.
트랜잭션이 데이터에 접근할 때 다른 트랜잭션이 해당 데이터에 접근하지 못하도록 잠금을 거는 방식이다.
이 방식은 데이터의 무결성을 강력하게 보장하지만, 동시성 성능이 저하될 수 있다.
비관적 락은 데이터베이스에서 데이터를 읽거나 수정할 때, 해당 데이터에 대해 잠금을 설정하여 다른 트랜잭션이 접근하지 못하게 한다. 이는 주로 데이터의 충돌이 자주 발생하는 환경에서 사용된다.
비관적락은 데이터 충돌방지 데이터 무결성 보장 동시정 제어 가 중요할 때 사용한다.
- 상황: A 사용자가 재고를 감소시키는 트랜잭션을 시작하고, B 사용자가 동시에 재고를 감소시키는 트랜잭션을 시작하는 상황이다.
- 목적: 동일한 재고를 두 사용자가 동시에 수정하지 못하도록 한다.
예제 설명
- 비관적 락 적용: A 사용자가 트랜잭션을 시작하여 재고를 감소시키는 동안, B 사용자가 동일한 재고에 접근하려고 하면 잠금이 걸려 접근할 수 없다. A 사용자가 트랜잭션을 커밋하거나 롤백할 때까지 B 사용자는 대기한다.
- 트랜잭션 흐름:
- A 사용자: 트랜잭션을 시작하고 재고를 감소시키는 작업을 시작한다.
- B 사용자: 트랜잭션을 시작하려고 하지만, A 사용자가 잠금을 걸었기 때문에 접근할 수 없다. B 사용자는 A 사용자가 트랜잭션을 완료할 때까지 대기한다.
- A 사용자: 트랜잭션을 커밋하거나 롤백한다.
- B 사용자: A 사용자가 트랜잭션을 완료한 후에야 재고를 수정할 수 있다.
낙관적락
낙관적 락은 데이터 충돌이 드물게 발생할 것으로 예상되는 환경에서 사용된다.
이는 트랜잭션이 데이터에 접근할 때 잠금을 사용하지 않고, 트랜잭션이 종료되기 전에 다른 트랜잭션이 데이터를 변경하지 않았는지 확인하는 방식이다.
낙관적 락은 주로 충돌이 적고, 성능을 중시하는 시스템에서 사용된다.
낙관적 락은 트랜잭션이 데이터를 수정하기 전에 데이터의 현재 상태를 저장하고, 트랜잭션이 완료될 때까지 다른 트랜잭션이 해당 데이터를 변경하지 않았는지 확인한다.
만약 데이터가 변경되었다면 트랜잭션을 재시도한다
관적락은 충돌 빈도가 낮은 환경 높은 동시성 요구 데이터 무결성 유지 가 중요할 때 사용한다.
- 상황: A 사용자가 재고를 감소시키는 트랜잭션을 시작하고, B 사용자가 동시에 재고를 감소시키는 트랜잭션을 시작하는 상황이다.
- 목적: 동일한 재고를 두 사용자가 동시에 수정하려고 할 때 충돌을 방지하고 재시도하게 한다.
예제 설명
- 낙관적 락 적용: A 사용자가 트랜잭션을 시작하여 재고를 감소시키는 동안, B 사용자가 동일한 재고에 접근하여 수정하려고 시도한다. 두 사용자는 모두 재고의 현재 상태를 저장한다.
- 트랜잭션 흐름:
- A 사용자: 트랜잭션을 시작하고 재고를 감소시키는 작업을 시작한다.
- B 사용자: 트랜잭션을 시작하고 재고를 감소시키는 작업을 시작한다.
- A 사용자: 트랜잭션을 커밋하기 전에 데이터가 변경되지 않았는지 확인하고 커밋한다.
- B 사용자: 트랜잭션을 커밋하기 전에 데이터가 변경되지 않았는지 확인한다. A 사용자가 이미 데이터를 변경했으므로, B 사용자의 트랜잭션은 충돌이 발생하고 재시도해야 한다.
'mysql' 카테고리의 다른 글
# 서브쿼리 이해해보기 (0) | 2024.08.06 |
---|---|
트랜잭션의 격리수준(Transaction Isolation Level) [2편-1] (0) | 2024.07.17 |
트랜잭션 정리글 및 이해하기 [1편] (0) | 2024.07.15 |
jdbc PreparedStatement (0) | 2023.08.01 |
tool을 이용하여 E-R다이어그램 설계방법 (0) | 2023.07.25 |