본문 바로가기
trouble shooting/spring

@Transactional(readOnly = true)

by 일상코더 2022. 12. 2.

읽기 전용 쿼리의 성능 최적화

 

엔티티가 영속성 컨텍스트에 관리되면 1차 캐시부터 변경 감지까지 얻을 수 있는 혜택이 많다. 

하지만 영속성 컨텍스트는 변경 감지를 위해서 스냅샷 인스턴스를 보관하므로 더 많은 메모리를 사용하는 단점이

존재 한다. 만약 조회만 하는 경우에 읽기 전용으로 엔티티를 조회하면 메모리 사용량을 최적화 할 수 있다.

 

 

@Transactional(readOnly = true)

트랜잭션에 readOnly=true 옵션을 주면 스프핑 프레임워크가 하이버네이트 세션 플러시 모드를 MANUAL로 설정한다.

이렇게 하면 강제로 플러시를 호출하지 않는 한 플러시가 일어나지 않는다. 

따라서 트랜잭션을 커밋하더라도 영속성 컨텍스트가 플러시 되지 않아서 엔티티의 등록, 수정, 삭제가 동적하지 않고,

또한 읽기 전용으로, 영속성 컨텍스트는 변경 감지를 위한 스냅샷을 보관하지 않음으로 성능이 향상된다.

 

 

프로젝트 적용

조회 할때만 사용하고 등록, 수정, 삭제(실제로 db값이 변경되는 부분)에 사용하면 안됨.

 

 

댓글