단순 조회 작업에도 Transactional을 걸어주는 이유?

도입

@Transactional(readOnly = true)는 이 메서드는 데이터를 변경하지 않는다는 것을 표현하고 싶을 때 자주 사용한다. 물론 해당 readonly = true가 컴파일 수준에서 객체 수정을 막아주는 것은 아니다.

상황 사용
조회 API readOnly=true
생성/수정/삭제 일반 Transactional
배치 write 일반 Transactional
QueryService readOnly=true

사실 리포지토리 구현이 JDBC인지 JPA인지에 따라 readOnly의 실효성과 delete 안정성 판단이 달라진다.

내부 self-invocation 때문에 프록시가 우회되는 패턴에 대한 학습 필요