@Transactional (readOnly = true)

SeonKyum·2021년 12월 22일
0

백엔드 개념

목록 보기
5/23

'상세페이지' 로직

readOnly를 쓰지 않았을때 쿼리 결과

readOnly를 썻을때 쿼리 결과

  • 상세페이지에서는 별반 차이가 없다

'main'페이지 로직 - 불러오는 객체수가 많다.

readOnly를 쓰지 않았을때 결과

readOnly를 썻을때 결과

  • 미비한 차이를 보이지만 readOnly를 안썻을때가 조금더 빠르다.

서비스의 규모가 작아서 아직은 차이가 보이지 않는데 @Transactional(readOnly=true) 를 왜 사용할까?

'성능적인 이점'

  • 해당 옵션인 경우 스프링 프레임워크가 하이버네이트 세션 플러시 모드를 MANUAL로 설정하기 때문에 강제로 플러시를 호출하지 않은 한 플러시가 일어나지 않아, CUD 작업이 동작하지 않고, 앞에 언급한대로 스냅샷 저장. 변경감지등의 작업을 수행하지 않아 성능이 향상된다.

'명시적인 효과'

  • 해당 어노테이션이 있다면 우리는 해당 메서드는 READ에 대한 동작만 수행할 것이라고 예상하고 그리고 이루어진다. 여기서 난 객체지향으로 작업할때 가능한 경우 final을 두어 객체의 신뢰성을 보장하는것이 떠올랐다. 그리고 난 이 점이 중요하다고 느껴졌기에 해당 옵션에서 아무런 성능적 이점을 갖지 못한 경우라도 명시적으로 두어 계속 사용할 것 같다.
profile
차근차근,,

0개의 댓글