트랜잭션 커밋은 어디에서 일어날까? 레파지토리를 만들 때 Spring-Data-Jpa의 JpaRepository 인터페이스를 상속하였는데, 스프링 데이터에서 기본 구현체를 제공해주기 때문이다. Spring-Data-Jpa에서 제공하는 JpaRepository의 기본 구현체는 SimpleJpaRepository이다. (CrudRepository는 단순히 인터페이스이다.) SimpleJpaRepository의 save()메소드에는 스프링 @Transactional이 붙어있으므로 해당 클래스에 있는 수많은 메소드에 트랜잭션이 걸리게 되고, 메소드 성공적으로 return하게 되면 commit도 이루어지게 되는것이다. @Transactional public S save(S entity) { Assert.notNu..