호비시의 끄적끄적
Transaction 본문
트랜잭션이란 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 말한다.
트랜잭션의 특징
1. 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다.
2. 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다.
3. 하나의 트랜잭션은 Commit되거나 Rollback된다.
트랜잭션 수행 과정
1. 디스크(데이터베이스)에서 A의 은행계좌잔고 값을 메인 메모리로 읽어옵니다.
2. 읽어온 A의 잔고 값에서 10,000을 감소시킵니다.
3. 디스크(데이터베이스)에서 B의 은행계좌잔고 값을 메인 메모리로 읽어옵니다.
4. 읽어온 B의 잔고 값을 10,000 증가시킵니다.
5. A의 계좌 값을 디스크(데이터베이스)에 기록합니다.
6. B의 계좌 값을 디스크(데이터베이스)에 기록합니다.
트랜잭션의 성질
트랜잭션은 작업의 안전성과 데이터의 무결성을 유지시키기 위해 다음의 4가지 성질을 가지고 있습니다.
- Atomicity(원자성)
- Consistency(일관성)
- Isolation(고립성)
- Durability(지속성)
이 4가지 특성의 앞글자를 따 트랜잭션의 ACID 성질이라고 부릅니다.
Atomicity
트랜잭션이 데이터베이스에 모두 반영되던가, 전혀 반영되지 않아야 한다.
예를 들어 A의 계좌에서 B의 계좌에 10000원을 보내는 과정에서 에러가 발생했다면
전체의 과정이 DB에 전혀 반영되지 않아야한다.
Consistency
트랜잭션 전후의 DB의 상태는 서로 다르지만 일관성은 보장되어야 한다.
A와 B의 계좌의 돈이 서로 달라졌지만, 잔고의 데이터 타입은 정수형으로 일관성이 있다.
또한 송금 전 후의 두 계좌의 잔고 합은 같아야 하는 비명시적 일관성 조건도 지켜져야한다.
Isolation
A의 계좌에서 B의 계좌로 10000원을 보내는 앞의 수행과정 1 ~ 6 사이에
B가 C의 계좌에 돈을 보낼 수 없다는 것이다.
고립성 때문에 트랜잭션이 끝나고 나서야 다른 트랜잭션이 실행 될 수 있다.
더 알아보기) shared_lock(read lock) , exclusive_lock(write lock)
Durability
트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 한다.
트랜잭션의 Commit, Rollback
Commit은 하나의 트랜잭션이 성공적으로 끝났다고 DB에 알려주는 것을 말한다.
Commit이 실행되면 로그에 저장된다.
Rollback이란 하나의 트랜잭션이 비정상적으로 종료했을 경우 트랜잭션이 시작되기 전으로 말한다.
A의 계좌에서 B의 계좌로 송금할 때 에러가 생겨 A의 계좌에서만 돈이 빠졌다고 해보자
이런 경우 A의 계좌에서 돈을 빼내기 전으로 Rollback 하여 연산된 결과를 취소 시킬 수 있다.
스프링에서의 Transaction
스프링에서는 트랜잭션 처리를 지원하는데 그중 어노테이션 방식으로 @Transactional을 선언하여 사용하는 방법이 일반적이며, 선언적 트랜잭션이라 부른다.
클래스, 메서드위에 @Transactional 이 추가되면, 이 클래스에 트랜잭션 기능이 적용된 프록시 객체가 생성된다.
이 프록시 객체는 @Transactional이 포함된 메소드가 호출 될 경우, PlatformTransactionManager를 사용하여 트랜잭션을 시작하고, 정상 여부에 따라 Commit 또는 Rollback 한다.
출처: https://mommoo.tistory.com/62
출처: https://goddaehee.tistory.com/167 [갓대희의 작은공간]
출처: https://mytodays.tistory.com/38
'Back > Spring' 카테고리의 다른 글
DI, IoC, Bean (0) | 2022.04.05 |
---|---|
테스트 종류별 특징 (0) | 2022.03.25 |
EC2 시간 설정 (0) | 2022.03.22 |
JPA에서 String length 변경 (0) | 2022.03.22 |
Spring 구조 간단 요약 (0) | 2022.03.19 |