트랜잭션
- 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
- ACID 특징을 가짐
- 원자성
- 일관성
- 독립성
- 지속성
원자성
- 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았음을 보장하는 특징
- 트랜잭션 단위로 여러 로직들을 묶을 때 외부 API를 호출하는 것이 있으면 안된다.
- 만약 있다면 롤백이 일어났을 때 어떻게 해야 할 것인지에 대한 해결 방법이 있어야 하고 트랜잭션 전파를 신경써서 관리해야 한다. → 스프링의 @transactional이 이를 지원해줌
- commit
- 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령
- rollback
- 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 (취소)명령
- 트랜잭션 전파
- 트랜잭션을 수행할 때 커넥션 단위로 수행하기 때문에 커넥션 객체를 넘겨서 수행해야 한다.
- 하지만 이를 매번 넘겨주기가 어렵고, 귀찮다.
- 이를 넘겨서 수행하지 않고 여러 트랜잭션 관련 메서드의 호출을 하나의 트랜잭션에 묶이도록 하는 것을 트랜잭션 전파라고 한다.
- 트랜잭션을 수행할 때 커넥션 단위로 수행하기 때문에 커넥션 객체를 넘겨서 수행해야 한다.
일관성
- 허용된 방식으로만 데이터를 변경해야 하는 것을 의미
격리성
- 트랜잭션 수행 시 서로 끼어들지 못하는 것을 의미한다.
- 복수의 병렬 트랜잭션은 서로 격리되어 마치 순차적으로 실행되는 것처럼 작동되어야 하고 데이터베이스는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다.
- 순차적으로 하면 쉽게 되겠지만 성능이 나빠진다.
- 격리성은 여러 개의 수준으로 나뉘어 격리성을 보장한다.
💡 격리성 높음, 동시성 낮음
- SERIALIZABLE
- REPEATABLE_READ
- READ_COMMITTED
- READ_UNCOMMITTED
💡 격리성 낮음, 동시성 높음
- 밑으로 갈수록 동시성이 강해지지만 격리성은 약해지고 위로 갈수록 동시성은 약해지고 격리성은 강해진다.
격리 수준에 따라 발생하는 현상
- 팬텀 리드
- 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우
- 반복 가능하지 않은 조회
- 한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 경우를 가리킨다.
- 팬텀 리드와 다른 점은 행 값이 달라질 수 있지만 팬텀리드는 다른 행이 선택될 수도 있다는 점이다.
- 더티 리드
- 한 트랜잭션이 실행 중일 때 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 행의 데이터를 읽을 수 있을 때 발생
격리 수준
- SERIALIZABLE
- 트랜잭션을 순차적으로 진행시키는 것
- 동시에 같은 행에 접근 불가
- 성능이 가장 떨어지는 격리 수준
- REPEATABLE_READ
- 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아준다.
- 새로운 행을 추가하는 것은 막지 않는다.
- READ_COMMITTED
- 가장 많이 사용되는 격리 수준
- 다른 트랜잭션이 커밋하지 않은 정보는 읽을 수 없다.
- 커밋 완료된 데이터에 대해서만 조회를 허용한다.
- 어떤 트랜잭션이 접근한 행을 다른 트랜잭션이 수정할 수 있다.
- READ_UNCOMMITTED
- 가장 낮은 격리 수준
- 하나의 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출되는 문제가 있다.
- 하지만 가장 빠르다.
- 되도록 사용하지 않는 것이 이상적이다.
- 어림잡아 집계하는 데에 사용하면 좋다.
지속성
- 성공적으로 수행한 트랜잭션은 영원히 반영되어야 하는 것을 의미한다.
- 이를 위해 체크섬, 저널링, 롤백 기능을 제공
무결성
- 데이터의 정확성, 일관성, 유효성을 유지하는 것을 말한다.
개체 무결성
- 기본키로 선택된 필드는 빈 값을 허용하지 않는다.
참조 무결성
- 서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지해야 한다.
고유 무결성
- 특성 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우 그 속성 값은 모두 고유한 값을 가진다.
NULL 무결성
- 특정 속성 값에 NULL이 올 수 없다는 조건이 주어진 경우 그 속성 값은 NULL이 될 수 없다는 제약조건
'Computer science > 데이터베이스' 카테고리의 다른 글
인덱스 / 조인 (1) | 2023.09.07 |
---|