트랜잭션은 데이터베이스에서 제공하는 기술이므로 커넥션 객체를 통해 처리한다. 그래서 1개의 트랜잭션을 사용한다는것은 하나의 커넥션 객체를 사용한다는 것이고 실제 데이터베이스의 트랜잭션을 사용한다는 점에서 물리 트랜잭션이라고 한다.
물리 트랜잭션은 실제 데이터베이스에 적용되는 트랜잭션으로 커넥션을 통해 커밋 롤백하는 단위이다.
논리 트랜잭션은 스프링이 트랜잭션 매니저를 통해 트랜잭션을 처리하는 단위 이다.
Required는 스프링이 제공하는 기본적인 전파 속성으로 기본적으로 2개의 논리 트랜잭션을 묶어 1개의 물리 트랜잭션을 사용하는것
의미 : 트랜잭션이 필요함 (없으면 새로 만듦)
기존 트랜잭션 없을때 새로운 트랜잭션을 생성함
기존 트랜잭션이 있으면 기존 트랜잭션에 참여한다.
required는 디폴트 속성이여서 별도의 설정이 없으면 required속성으로 트랜잭션이 진행됨
Requires_new는 외부 트랜잭션과 내부트랜잭션을 완전히 분리하는 전파 속성이다. 그래서 2개의 물리트랜잭션이 사용되며 각각 트랜잭션 별로 커밋과 롤백이 수행된다.
의미 : 항상 새로운 트랜잭션이 필요함
기존 트랜잭션이 없을때 새로운 트랜잭션을 생성한다.
기존 트랜잭션이 있을때 기존 트랜잭션을 보류시키고 새로운 트랜잭션을 생성한다.