트랜잭션 특징(ACID) /Rollback /Commit
트랜잭션
데이터베이스의 상태를 변화시키는 하나의 작업단위를 의미합니다.
DB의 상태는 딱! 2개 Rollback과 commit만 있음
그래서 두가지 상태를 작업하는 실행단위들
왜 트랜잭션이 필요할까?
왜 DB는 트랜잭션 기준으로 작업을 처리할까?
1. 데이터의 무결성을 유지하기 위해 (즉 부정합을 방지하고자)
DB서버에 여러가지 클라이언트들이 동시에 들어와서 작업을 처리하는데 이때 데이터들의 일관성이 깨질수 있다.
2. 직렬화 기능으로 작업을 하나씩 순차적으로 진행하기 위해
하나하나 한번에 하나의 프로세스를 처리하도록 한다.
그런데 이러면 효율이 너무 떨어지기 때문에 트랜잭션이라는 작업단위로 처리하는것.
트랜잭션은 다수의 클라이언트가 사용해서 여러개의 트랜잭션이 동시에 수행될 수 있음(동시성
4가지 특징을 가지고 있습니다. (ACID)
1. 원자성 (Atomicity)
트랜잭션의 모든 연산은 모두 처리되거나, 처리되지 않아야 합니다.(All or Nothing)
작업의 단위의 일부분만 실행하지 않는다.
2. 일관성.( Consistency )
트랜잭션이 성공적으로 수행되고 나면 데이터타입이 일관적으로 유지되어야 합니다.
3. 고립성 ( Isolation )
트랜잭션이 수행되고 있는 동안에는 다른 트랜잭션이 끼어들 수 없습니다.
트랜잭션끼리는 서로 간섭할 수 없다.
4. 지속성 ( Durability )
트랜잭션이 성공적으로 수행되면 그 결과는 영구적으로 반영되어야 합니다.
Commit을 하면 현재 상태는 영원히 보장됨
이런 트랜잭션의 특징을 어떻게 보장하는가? 어떻게 알 수 있나?
1. 원자성/지속성 : Commit과 Rollback으로 처리
트랜잭션이 정상적으로 수행되지 않았을때 이전상태로 돌아가기 위해 Rollback수행
트랜잭션이 성공적으로 수행되었을 때 영구적으로 저장하기 위해 Commit 수행
2. 일관성 : 제약조건으로 처리
트랜잭션 수행 전후에 데이터의 모든 제약조건을 만족시켜서 데이터타입을 유지함
1)개체무결성 제약조건 : 기본키값은 null값을 가질 수 없다는 조건
2) 도메인무결성 제약조건 : 정의된 도메인 형식에 맞추야한 다는 조건
3) 참조무결성 제약조건 : 참조관계일떄 외래키를 가져야하는 조건
그래서 이벤트와 조건이 발생했을때 자동으로 트리거를 통해 보장함
+트리거/프로시저 차이점 https://pearlluck.tistory.com/18
3. 고립성 : LOCK방식으로 처리
고립성을 높이면 동시성이 떨어지고, 동시성을 높이면 데이터 무결성 보장이 어려움(trade-off관계)
그래서 동시성을 제어하는 방식이 필요 : 이걸 lockr기능으로 하는것!
동시에 같은 데이터에 접근하지 못하도록 제어해서
동시성을 최대화 하면서 데이터의 무결성을 유지하는 방법
다만, 트랜잭션을 아무것도 수행할 수 없는 데드락상태가 될 수 도 있다.
+데드락 : https://pearlluck.tistory.com/16