Springboot

@Service단에서 DB에 변형을 줄때 왜 @Transactional을 습관처럼 꼭 걸어줘야할까?

25G 2021. 12. 24. 10:00

일의 최소 단위를 트렌젝션이라고 한다.
Service를 하는 파일에서 DB에 변형을 주는 행위를 만들 때 @Transactional가 있으면 어떤 일이 일어날까?
트렌잭션을 수행하던도중에 오류가 나면 해당 트렌젝션 자체를 롤백을 해주기 때문에 DB의 무결성에 큰 문제가 생길 일을 막아 줄 수 있다.

그럼 select할때도 @Transactional을 걸어줘야 하는 이유가 뭘까?

영속성 컨텍스트는 sevice가 끝나는 시점에 변경된 오브젝트를 감지를 한다.(감지된다면 db에 자동 flush(더티 체킹))
@Transactional(readOnly =true)를 걸게되면 더티체킹을 하지 않고 읽기 전용 트렌젝션이 된다.