Spring Framework/SpringBoot

[JPA사용중] TransactionRequiredException: Executing an update/delete query 에러 발생/ 트랜잭션이란?

Razelo 2022. 4. 3. 18:30

굉장히 간단한 에러이다. 근데 로직이 틀린게 아닌데 왜 에러가 날까 싶을거다. 

 

update나 delete 구문을 실행할때 @Transactional 어노테이션을 달아주지 않으면 발생하게 되는 에러이다. 

 

이렇게 @Transactional 을 달아주면 에러가 나지 않는다. 

 

@Transactional 이 하는 기능도 굉장히 직관적인데 디비를 공부했다면 트랜잭션이 무엇인지 알것이다. 기억을 더듬어보자. 

 

@Transactional 은 이 어노테이션이 붙은 메서드의 경우 메서드가 포함하고 있는 작업 중에 하나라도 실패할 경우 전체 작업을 취소한다는 뜻이다. 

 

전체 작업을 취소한다? 

 

데이터베이스를 배웠다면 기억이 날텐데, 우리가 B라는 사람에게 돈을 보냈는데 갑자기 중간에 은행이 번개를 맞아서(ㅋㅋ) 실제로 내가 보낸 비트 스트링의 전기적 신호가 날라가 버리고 나는 돈을 보냈는데도 B는 돈을 받지 못했다고 돈을 다시 달라는 상황이 발생할 수 있으니(끔찍) 우리는 그런 상황을 방지하기 위해 이런 중요한 과정 자체를 하나의 단위로 보고서 그 내부의 자잘한 동작 중 하나라도 실패하면 우리가 최소 단위로 보았던 그 동작 전체를 실패라고 간주하는거다. 이게 트랜잭션이고 마찬가지로 @Trsansactional이 하는 일이 이거다. (트랜잭션에 대해 생각나는 대로 비유했으나 부족한 비유였다면 이해해주기 바람.) 그리고 그런 사건이 발생한다면 롤백해서 행위 이전으로 모든걸 돌려버리는거다. 아무일도 일어나지 않았던 것처럼... 

 

아래 블로그를 참고하면 재밌는 내용을 더 살필 수 있을 것이다. 

https://tecoble.techcourse.co.kr/post/2021-05-25-transactional/

 

Transactional 어노테이션

@Transactional…

tecoble.techcourse.co.kr

 

반응형