본문 바로가기

Database/RDB

(4)
4. 트랜잭션 격리성 (Isolation) 3가지 동시성 문제Dirty Read: 한 트랜잭션이 아직 COMMIT 하지 않은, 수정 중인 데이터를 다른 트랜잭션이 읽는 것Non-Repeatable Read: 한 트랜잭션 내에서 똑같은 SELECT 쿼리를 두 번 실행했는데, 그 사이에 다른 트랜잭션이 값을 수정하고 COMMIT 하여 두 쿼리의 결과가 다르게 나오는 현상Phantom Read: 한 트랜잭션 내에서 특정 범위의 데이터를 두 번 읽었는데, 중간에 다른 트랜잭션이 새로운 행을 INSERT 하고 COMMIT 하여, 첫 번째 조회에서는 없었던 새로운 행(유령)이 두 번째 조회에서 나타나는 현상1. Dirty ReadT2가 T1의 미커밋 값(40000)을 읽고, 이후 T1이 롤백해 그 값이 무효가 된다.sequenceDiagram par..
3. 데이터베이스 동시성 제어 (Concurrency Control) 동시성 제어 (Concurrency Control)시나리오: A는 50000원 B는 20000원이 있다. A가 B에게 1만원을 이체하는 트랜잭션(T1)을 실행 중이다.UPDATE로 A의 잔고는 4만원으로 바뀌었지만, 아직 COMMIT 은 하지 않아 B의 잔고는 2만원인 '중간 상태'다.sequenceDiagramparticipant T1 as 트랜잭션 1 (이체)participant DB as DB Serverparticipant T2 as 트랜잭션 2 (총잔고 계산)Note over T1,T2: ❌ 격리성 없음 (READ UNCOMMITTED, Dirty Read 발생)T1->>DB: BEGIN TRANSACTIONT2->>DB: BEGIN TRANSACTIONNote over DB: 초기 상태 A =..
2. 트랜잭션의 ACID 속성 트랜잭션의 ACID 속성데이터베이스의 트랜잭션을 신뢰하기 위해서는 다음 속성을 만족해야한다.AtomicityConsistencyIsolationDurabilityACID는 트랜잭션이 지켜야 할 네 가지 속성이고, InnoDB는 각각을 서로 다른 메커니즘으로 보장한다. Undo Log, Lock, MVCC로 속성을 보장할수있다.원자성(Atomicity): Undo Log원자성은 "트랜잭션의 모든 작업이 전부 반영되거나, 전부 취소되거나" 둘 중 하나여야 한다. 중간에 실패하면 이미 한 작업도 없던 일로 되돌려야 한다. 트랜잭션이 데이터를 쓰기 전에 그 이전 값을 Undo Log에 기록해두고, 트랜잭션이 커밋되기 전에 ROLLBACK이 일어나거나 트랜잭션이 비정상 종료되면 Undo Log를 거꾸로 적용해서 ..
1. 트랜잭션의 필요성 데이터 변경 행위에 따른 무결성 지키기일단 먼저, 데이터 타입과 제약조건으로 무결성의 상태를 지켜야한다. 그 다음에 트랜잭션은 데이터의 행위에 대해서 무결성을 지킨다.시나리오‘송금’이란 하나의 비즈니스 행위 뒤에서, 데이터베이스는 최소한 두 가지의 작업을 순차적으로 처리해야 한다.orders 테이블에 새로운 주문 정보를 INSERT 한다.products 테이블에서 방금 주문된 상품의 재고(stock_quantity )를 UPDATE 하여 주문 수만큼 줄인다.만일 트랜잭션이 없다면?INSERT 쿼리로 orders 테이블에 새로운 주문이 성공적으로 기록UPDATE 쿼리로 products 테이블의 재고를 줄이려고하는데 애플리케이션 서버나 데이터베이스 서버가 다운되거나 문제 발생, 네트워크 연결 끊김, 디스크 ..