728x90

트랜잭션(Transaction)이란? 

-여러작업들을 하나로 묶은 단위

-한 덩어리의 작업들은 모두 실행되거나, 실행되지 않습니다. (all-or-nothing)


ACID란? 

-데이터의 유효성을 보장하기 위한, 트랜젝션의 특징들의 앞글자를 딴 단어

 

- Atomicity(원자성)

    중간 단계까지 실행되는 것이 아니라 처음부터 끝까지 완전하게 실행되며 중간에서 실패하는 일이 없도록 합니다.

    모든 작업이 반영되거나 모두 롤백되는 특성입니다.

- Consistency(일관성) 

    트랜잭션이 완료되면 언제나 일관된 DB 상태를 유지하는 것을 의미합니다.

    데이터는 미리 정의된 규칙에서만 수정이 가능하도록 합니다. 숫자 컬럼에 문자열값이 저장되는 것을 방지해줍니다.

- Isolation(고립성, 격리성) 

    다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미합니다.

    다시말해 다른 트랜잭션의 연산이 중간 단계의 데이터를 볼 수 없음을 의미합니다.

- Durability(영구성, 지속성)

    성공적인 트랜젝션은 영원히 반영(커밋, commit) 되어야 함을 의미합니다.


트랜잭션의 격리성(Transaction Isolation) 이란? 

- 실행중인 트랜잭션의 중간결과를 다른 트랜잭션이 접근할 수 없다! 

 

<격리성으로 인해 나타날 수 있는 문제점>

 

Dirty Read

- 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것 

 

Non-Repeatable Read

- 한 트랜잭션 내에서 같은 Key를 가진 행을 두번 읽었는데 그 사이에 값이 변경되거나 삭제되어 결과가 다르게 나타나는 현상

 

Phantom Read

- 한 트랜잭션 내에서 같은 쿼리를 두번 수행했는데, 첫 번째 쿼리에서 없던 유령(Phantom) 레코드가 두번쨰 쿼리에서 나타나는 현상

Phatom Read  VS Non- Repeatable Read
여러개를 요청하는 것에 대해서 데이터 값이 변경되는 것   1개의 행의 데이터 값이 변경되는 것 

<격리성 수준(Transaction Isolation Level)>

병려 트랜잭션 시 특정 트랜잭션이 다른 트랜잭션에서 변경하는 데이터를 언제부터 볼 수 있는지 허용하는 수준을 의미한다. 

격리 수준 Dirty Read Non-Repeatable Read Phantom Read
Read Uncommitted O O O
Read Committed X O O
Repeatable Read X X O
Serializable X X X

Read Uncommitted

- 모든 트랜잭션은 다른 트랜잭션의 커밋 여부와 상관없이 변경되는 데이터를 확인 가능하다. 

- 데이터 정합성이 좋지 않은 격리 수준이므로 사용하지 않는다. 

- Diry Read, Non-Repeatable Read, Phantom Read 현상이 발생한다. 

 

Read Committed

- 각 트랜잭션은 다른 트랜잭션의 커밋 완료된 데이터만 확인 가능하다. 

- 주로 사용되는 격리 수준이다. 

- Non-Repeatable Read, Phantonm Read 현상이 발생한다. 

 

Repeatable Read

- 한 트랜잭션이 시작되면 다른 트랜잭션에서 커밋 데이터가 있더라도 확인되지 않는다. 

- 트랜잭션 별로 식별자를 주고 Undo 영역의 데이터를 백업해둠으로써 트랜잭션의 일관성을 보장한다. 

- Phantom Read 현상이 발생한다. 

 

Serializabl Read

- 가장 높은 수준의 격리수준이다. 

- 한 트랜잭션에서 사용하는 데이터는 다른 트랜잭션에서 사용 불가능하다.

- 격리 수준에 따른 문제는 발생하지 않지만, 동시성이 저하되는 문제가 발생한다. 

- 레코드 조회 : Shared Lock 획득시에만 조회 가능

- 레코드 수정 : Exclusive Lock 획득시에만 조회 가능 

 

 

728x90
반응형

+ Recent posts