Skip to content

Latest commit

 

History

History
28 lines (16 loc) · 1.57 KB

03.md

File metadata and controls

28 lines (16 loc) · 1.57 KB

@Transactional(readOnly = true)

요약


스프링 프레임워크에서 어노테이션으로 트랜잭션을 읽기 전용 모드로 설정할 수 있는데. 다음과 같은 어노테이션에 읽기 전용 속성을 붙이면 된다.

@Transactional(readOnly = true)

이렇게 읽기 전용으로 제한을 해두면 예상치 못한 엔티티의 등록, 변경, 삭제를 예방할 수 있고, 성능을 최적화할 수 있다.

성능 최적화?


엔티티가 영속화되어 영속성 컨텍스트에서 관리되면 1차 캐시부터 변경감지까지 얻을 수 있는 혜택이 많다. 하지만 영속성 컨텍스트는 변경감지를 위해서 스냅샷 인스턴스를 보관하므로 더 많은 메모리를 사용하는 단점이 존재한다.

이 때, 읽기 전용으로 엔티티를 조회한다면 메모리 사용량을 최적화할 수 없을까?

그렇다. @Transactional(readOnly = true) 어노테이션을 사용하면 트랜잭션을 읽기 전용 모드로 설정할 수 있다.

트랜잭션에 readOnly = true 옵션을 주면 스프링 프레임워크가 하이버네이트 세션 플러시 모드를 MANUAL로 설정한다. 이렇게 하면 강제로 플러시를 호출하지 않는 한 플러시가 일어나지 않는다.

따라서 트랜잭션을 커밋하더라도 영속성 컨텍스트가 플러시 되지 않아서 엔티티의 등록, 수정, 삭제가 동작하지 않고, 또한 읽기 전용으로 인식하여 영속성 컨텍스트는 변경 감지를 위한 스냅샷을 보관하지 않으므로 성능이 향상된다.