@Transactional(readOnly=true)로 조회 의도를 표시한다.
readOnly=true는 쓰기 금지가 아니라 조회 의도와 최적화 힌트다
Spring, ORM, 커넥션, DBMS로 힌트가 전달될 수 있지만, 제품별 동작은 다르다. 권한 제어와 복제본 라우팅은 별도 정책이다.
Hibernate가 flush와 변경 감지 비용을 줄일 수 있다.
드라이버에 read-only 힌트를 전달할 수 있다.
최적화하거나 쓰기를 제한할 수 있지만 보장 범위는 제품별로 다르다.
조회 전용 서비스 메서드와 리포트 쿼리에 표시한다.
조회 후 조건부 쓰기가 섞인 메서드에는 쓰지 않는다.
쓰기 방지 보안 장치로 생각하면 안 된다.