트랜잭션이란?

    트랜잭션은 명령어들의 집합이며 하나의 작업 처리를 위한 논리적 작업 단위를 말한다.

     

    트랜잭션의 성질

    트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질

     

    원자성(Atomicity) 

    👉 키워드 : 모 아니면 도, 수행되거나 수행되면 안 됨

    트랜잭션의 가장 기본적인 특성으로 트랜잭션 내의 연산은 반드시 모두 수행되어야 하며 그렇지 않은 경우 모두 수행되지 않아야 한다.

     

    일관성(Consistency)

    👉 시점 : 트랜잭션 완료된 후 , 키워드 : 결과에 모순 X

    트랜잭션이 정상적으로 완료된 후 일관성 있는 데이터베이스 상태가 되어야 하며, 결과에 모순이 생겨서는 안 된다.

     

    격리성(Isolation)

    👉 시점 : 트랜잭션 수행 중, 키워드 : 다른 트랜잭션 접근 X

    독립성이라고도 하며, 하나의 트랜잭션이 수행 중에는 다른 트랜잭션이 접근할 수 없으며 각각의 트랜잭션은 독립적이어야 한다.

     

    영속성(Durability)

    👉 시점 : 트랜잭션 완료된 후 , 키워드 : 결과는 영원히 유지

    지속성이라고도 하며, 트랜잭션이 성공적으로 완료된 후 결과는 지속적으로 유지되어야 한다.

     

    트랜잭션 연산

    트랜잭션 연산에는 COMMITROLLBACK이 있으며 하나의 트랜잭션은 반드시 COMMIT 또는 ROLLBACK이 되어야 한다.

     

    COMMIT

    👉 시점 : 트랜잭션 성공적으로 종료 , 키워드 : 수정된 내용(DML문), 지속적 유지

    트랜잭션이 성공적으로 종료된 후 수정된 내용을 지속적으로 유지하기 위한 연산이다.

     

    ROLLBACK

    👉 시점 : 트랜잭션 비정상적 , 키워드 : 수행 작업 취소, 이전 상태로 되돌아감

    트랜잭션이 비정상적으로 수행되거나 오류가 발생했을 때 수행 작업을 취소하고 이전 상태로 되돌리기 위한 연산이다.

     

    따라서 COMMIT 또는 ROLLBACK을 반드시 해야지만 하나의 트랜잭션이 완성된다.

     

    ACID는 이론적으로 보장해야하는 성질이고, 실제로는 성능을 위해 손실보장이 완화되기도 한다.

    예를 들어 독립성을 완벽하게 보장하려고 한다면, 동일 데이터에 100개의 연결이 접근했을 때 100개 연결을 순차적으로 해결해하고, 이는 동시성이 떨어지는 문제가 발생한다. 그럼 이를 해결하기 위해서는 어떻게 해야 할까?

     

    트랜잭션의 격리 레벨 설정

    동시에 DB에 접근할 때 그 접근을 어떻게 제어할지에 대한 설정을 의미한다.

    4가지의 격리 수준이 존재하며, 밑으로 갈수록 격리 수준이 높아지지만, 성능이 떨어지는 문제가 발생한다. 

    즉, 데이터 정합성과 성능이 반비례하기 때문에 케이스에 맞게 잘 선택하는 것이 좋다.

     

    Read Uncommitted (레벨 0)

    한 트랜젝션이 아직 커밋되지 않은 상태에서 불구하고 변경된 값을 다른 트랜잭션에서 읽을 수 있다.

    더티 리드, 논 리피 터블 리드,센텀 리드 현상이 발생할 수 있다.

     

    Read Committed (레벨 1)

    커밋이 완료된 데이터만 다른 트랜잭션에서 조회가 가능하다.

    논 리피터블 리드, 센텀 리드 현상 발생할 수 있다.

     

    Repeatable Read (레벨 2)

    커밋이 완료된 데이터만 읽을 수 있다. Read Committed와의 차이점은 한 트랜잭션이 조회한 데이터는 트랜잭션이 종료될 때까지 다른 트랜잭션이 변경하거나 삭제하는 것을 막는다. 따라서, 한번 조회한 데이터는 같은 값을 반환한다.

     

    센텀 리드 현상이 발생할 수 있다.

    센텀 리드는 논 리피터블 리드의 한 종류로 조건의 유무와 관계없이 select문을 조회할 때 나타나는 현상이다.

     

    Serializable (레벨 3)

    한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서 접근할 수 없다. -> ACID 성질이 엄격하게 지켜지나, 성능은 가장 떨어진다. 단순 select만으로 트랜잭션이 커밋될 때까지 모든 데이터에 잠금이 설정되어 다른 트랜잭션에서 해당 데이터를 변경할 수 없게 된다.

     

    참고 영상

    https://www.youtube.com/watch?v=e9PC0sroCzc 

     

    728x90

    '📓 Study > CS' 카테고리의 다른 글

    CSRF Token이란  (0) 2021.12.02
    기억장치  (0) 2021.11.04
    집계 함수  (0) 2021.09.28
    프로토콜  (0) 2021.09.27
    데이터베이스 개념, 관리 시스템, 스키마  (0) 2021.09.20

    댓글