내용을 보면, actual transaction available for current thread 라는 내용이 있다.
기본적으로 JPA는 transaction을 기반으로 작동하게 되어있다. transaction 단위에 따라 1차캐시영역에 있는 객체들이 db에 flush되어 영속화되기 때문이다.
하지만 그러한 영속작업을 하는 persist() 메소드에 객체가 들어갔으나 가능한 transaction이 존재하지 않았기에 저런 에러가 발생한 것이다.
delete 하는 메소드에 @Transactional 어노테이션을 붙여줬더니 삭제가 멀쩡히 잘 되었다.
서비스 혹은 클래스에 미리 @Transactional을 선언해두면 위와 같은 상황을 피할 수 있다.
단, 클래스에는 @Transactional(readOnly = true) / 메소드에는 @Transactional 을 붙여 read 트랜잭션과 write 트랜잭션을 구분하는 것도 잊지말자!