propagation 3

Spring boot Transactional rollback test와 Transaction 격리에 관한 소고(feat. requires_new)

Transactional rollback test와 Transaction 격리에 관한 소고 다들 알다시피, @SpringBootTest 에서 @Transactional 을 설정하면, 테스트 환경에서 진행한 내용이 실제로 DB와 격리된다. 즉, 테스트에서 뭘 하든 간에 실제 DB에 적용되지 않는다는 것이다. 나는 이거를 통해 여러 테스트를 해 보았는데(사실 근데 혼자 테스트할때는 거의 맨날 넣었다) 이번에 좀 생각치도 못한 변수를 마주해서 정리한다. Transactional의 기본 propagation은 REQUIRED이다. 기본적으로 Spring Boot의 propagation은 REQUIRED로 되어있고, 이건 이전에 활성화된 트랜잭션이 있다면 그 안에서 따로 새로운 트랜잭션의 호출 없이 거기 참가한다..

save랑 saveAll(feat. Transactional)

save랑 saveAll(feat. Transactional) Spring Data JPA를 통해 다양한 쿼링을 쉽게 해줄 수 있다. 근데 만약에 여러 insert를 해줘야 하는 경우가 있다면 어쩔까?? 상황 일단 Spring Data JPA에 대해 안다고 가정한다. 여러 값을 저장할 때에 save방식 넣을값들.forEach( index -> 저장레포지터리.save(index) )이거랑 saveAll방식 저장레포지터리.saveAll(넣을값들);의 차이가 뭘까?? save 일단 save를 한번 본다. saveAll 이제 saveAll을 본다 뭐가 다른겨? 사실 saveAll을 보면 최초에 Transactional 어노테이션 실행 해당 함수 내에서 save함수 실행 저 save는 save함수임 이렇게 간다...

Spring boot Transactional annotation

Transaction이란 DB에서의 상태 변경을 위해 수행하는 작업의 단위 간단하게 말하면 CRUD를 통해 DB에의 접근을 진행하는 것이다. Transaction은 ACID라는 성질을 갖는다. Atomicity(원자성) 트랜잭션은 모두 DB에 반영되거나, 그렇지 않으면 모두 반영되지 않아야 한다. Consistency(일관성) 트랜잭션 처리 결과는 일관성이 있어야 한다. 즉, 트랜잭션 진행 도중 DB가 변경되어도 처음 트랜잭션 진행을 위해 참조한 데이터 기준으로 적용 Isolation(독립성) 둘 이상의 트랜잭션이 동시에 수행되고 있는다면 다른 트랜잭션의 연산에는 끼어들수 없다. Durability(지속성) 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 반영되어야 한다. Transactional a..