2024. 2. 27. 23:50ㆍSPRING
테스트 클래스에 @Transactional 을 사용하면,
테스트 시작 전 트랜잭션을 실행하고,
테스트 완료 후 항상 롤백을 진행한다.
롤백으로 인해 db는 테스트 시작 전으로 돌아가므로,
매번 같은 테스트 코드로 매번 같은 결과를 낼 수 있다.
----
트랜잭션이 뭔데?
트랜잭션이란?
데이터 베이스의 상태를 바꾸기 위해 수행되는 최소한의 작업 단위 이다.
하나의 트랜잭션은 commit 되거나, rollback 된다.
트랜잭션의 특성
- Atomic(원자성)
- Consistency(일관성)
- Isolation(독립성, 격리성)
- Durability(영속성,지속성)
최소한의 작업 단위가 뭔대?
맘대로 써보는 생활 예시
상황 : 기쁨이는 엄마의 요청으로 심부름을 해야 한다.
트랜잭션 :'기쁨이는 돈을 지불하여 생선가게에서 참돔을 사왔다.'
작업의 주체 : 기쁨이, 생선가게
작업1 : 기쁨이가 돈을 지불함.
작업2 : 생선가게가 참돔을 판매함.
심부름이라는 작업을 위해 위와 같은 군더더기 없는 내용(최소한의 작업)이 성사되어야 한다.
-> 작업을 위한 최소한의 작업 단위 = 트랜잭션
여기서 기쁨이가 돈 없이 참돔을 가져가려 하면 거래는 실패 -> 생선가게에서 참돔을 원위치 시킨다. (롤백)
돈을 냈는데 참돔을 받지 못해도 거래는 실패 -> 기쁨이가 돈을 돌려받는다. (롤백)
commit? rollback?
기쁨이가 심부름을 마치고 엄마에게 보고하니 참 잘했다고 칭찬 해주셨다. (commit)
엄마가 생선을 잘못 사왔거나, 필요 없어지는 등의 이유로 기쁨이에게 환불 받아오라 시켰다. (rollback)
트랜잭션의 특성
- Atomic(원자성)
트랜잭션의 연산은
모두 반영되거나(심부름이 온전히 끝나거나)
전혀 반영되지 않아야 함.(중간에 문제가 생겨서 거래 취소)
- Consistency(일관성)
1. 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
2. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
????
- Isolation(독립성, 격리성)
둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.
(생선가게가 기쁨이한테 참돔 건내고 있는데, 갑자기 튀어나온 주부9단이 '그 참돔은 내거얏!!' 하고 빼앗아가면 무척이나 곤란하겠다.)
- Durability(영속성,지속성)
성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
(기쁨이네는 참돔을 갖고, 생선가게는 돈을 받았다.)
(보관한 참돔이 갑자기 잉어킹이 되어서도 난리. 생선가게 돈이 나뭇잎으로 변해도 난리)
'SPRING' 카테고리의 다른 글
| build 해보기 (0) | 2024.08.03 |
|---|---|
| spring-boot-devtools (0) | 2024.08.03 |
| 스프링 빈 등록 방법 (0) | 2024.02.25 |
| 의존 주입 (0) | 2024.02.25 |
| 테스트 코드 작성 시의 에로사항 (0) | 2024.02.24 |