테스트_@Transactional

2024. 2. 27. 23:50SPRING

테스트 클래스에 @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