트랜잭션
트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말함
데이터 베이스에 접근하는 방법은 쿼리, 즉 여러 개의 쿼리들을 하나로 묶는 단위를 말함.
이에 대한 특징은 원자성, 일관성, 독립성, 지속성이 있으며 이를 한꺼번에 ACID 특징이라고 한다.
1. 원자성
트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징
' All or Nothing '
내가 친구한테 10000원을 보낸다면,
- 내 잔액 -10000원
- 친구 잔액 +10000원
이 둘중 하나만 처리된다면 원자성(Atomicity) 위반이다.
취소 했을 때에도 거꾸로 모든 작업이 처리되어야 한다.
또한, 트랜잭션 단위로 여러 로직들을 묶을 때 외부 API를 호출하는 것이 있으면 안된다.
만약 있다면 롤백이 일어났을 때 어떻게 해야할 것인지에 대한 해결방법이 있어야함.
커밋과 롤백
커밋은 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어.
트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장되는것

에러나 이슈 때문에 트랜잭션 전으로 돌려야 한다면 롤백을 사용한다.
롤백이란 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 일(취소)를 말한다.
커밋과 롤백 때문에 데이터의 무결성이 보장된다.
⭐️ 데이터 무결성
데이터 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미합니다. 여기서 정확성이란 중복이나 누락이 없는 상태를 뜻하고, 일관성은 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태를 뜻합니다.
만약 데이터베이스에서 데이터 무결성 설계를 하지 않는다면 테이블에 중복된 데이터 존재, 부모와 자식 데이터 간의 논리적 관계 깨짐, 잦은 에러와 재개발 비용 발생 등과 같은 문제가 발생할 것입니다.
그렇기 때문에 DBMS에서 데이터의 무결성이 유지되는 것은 중요한 사항이며, 주로 데이터에 적용되는 연산에 제한을 두어 데이터의 무결성을 유지합니다.
트랜잭션 전파
트랜잭션을 수행할 때 커넥션 단위로 수행하기 때문에 커넥션 전체를 넘겨서 수행해야한다.
이를 넘겨서 수행하지 않고 여러 트랜잭션 관련 메서드의 호출을 하나의 트랜잭션에 묶이도록 하는것을 트랜잭션 전파라고 한다.
2. 일관성
기존의 데이터베이스가 Correct State라면 트랜잭션을 수행하고 난 후에도 Correct State여야 한다.
Correct State ?
도메인의 유효범위, 무결성 제약조건 등의 제약조건을 위배하지 않는 정상적인 상태
Example
잔액 : 0보다 커야한다.
성별 : 남/여/기타
돈도 없는데 친구한테 송금가능 해지더니...? 안되!!
이게 일관성(Consistency)이다.
(단, 트랜잭션 도중에 위배하더라도 결과가 정상적인 상태면 상관없다.)
3. 고립성
한 트랜잭션이 실행하는 동안의 중간결과를 다른 트랜잭션이 접근할 수 없다.
트랜잭션 1, 2, 3, 4가 거의 동시에 수행되더라도
1 -> 2 -> 3 -> 4 와 같이 수행한 것처럼 되게 하라
Locking걸고 막 하겠지...
1, 2, 3, 4가 각각 다른 자원을 쓴다면 동시에 병렬처리 될거같은데..
4. 영속성, 지속성
완료(commit) 된 트랜잭션은 데이터베이스에 영구적으로 보존되어야 한다.
완료 후에 컴퓨터가 꺼진다면 데이터는 이미 저장되었으므로 보존된다.
완료 전에 컴퓨터가 꺼진다면 데이터는 Atomicity 원칙을 따라, 트랜잭션 수행하기 전으로 돌아간다.
'개발공부 > CS Study' 카테고리의 다른 글
JDBC문법 데이터베이스 접속(SQL문 전송) - Statements (0) | 2023.03.29 |
---|---|
JDBC 문법 (0) | 2023.03.29 |
4. 데이터 베이스 (2) - ERD와 정규화 과정 (0) | 2022.11.01 |
네트워크(2) (0) | 2022.09.27 |
네트워크 (1) (0) | 2022.09.27 |