728x90
반응형
readOnly
- 트랜잭션은 기본적으로 읽기 쓰기 모두 가능한 트랜잭션이 생성된다.
- readOnly=true 옵션을 사용하면 읽기 전용 트랜잭션이 생성된다.
- 이 경우 등록, 수정, 삭제가 안되고 읽기 기능만 작동한다.
- readOnly 옵션을 사용하면 읽기에서 다양한 최적화가 발생할 수 있다.
[readOnly 옵션이 적용되는 3곳]
- 프레임워크
- JdbcTemplate은 읽기 전용 트랜잭션 안에서 변경 기능을 실행하면 예외를 던진다.
- JPA(하이버네이트)는 읽기 전용 트랜잭션의 경우 커밋 시점에 플러시를 호출하지 않는다. 읽기 전용이니 변경에 사용되는 플러시를 호출할 필요가 없다.
- 추가로 변경이 필요 없으니 변경 감지를 위한 스냅샷 객체도 생성하지 않는다. 이렇게 JPA에서는 다양한 최적화가 발생한다.
- JDBC 드라이버
- 읽기 전용 트랜잭션에서 변경 쿼리가 발생하면 예외를 던진다.
- 읽기, 쓰기 (마스터, 슬레이브) 데이터베이스를 구분해서 요청한다.
- 읽기 전용 트랜잭션의 경우 읽기(슬레이브) 데이터베이스의 커넥션을 획득해서 사용한다.
참고로 여기서 설명하는 내용들은 DB와 드라이버 버전에 따라서 다르게 동작하기 때문에 사전에 확인이 필요하다.
- 데이터베이스
- 데이터베이스에 따라 읽기 전용 트랜잭션의 경우 읽기만 하면 되므로, 내부에서 성능 최적화가 발생한다.
728x90
반응형
댓글