Read Only

readOnly=true는 쓰기 금지가 아니라 조회 의도와 최적화 힌트다

Spring, ORM, 커넥션, DBMS로 힌트가 전달될 수 있지만, 제품별 동작은 다르다. 권한 제어와 복제본 라우팅은 별도 정책이다.

1 Spring

@Transactional(readOnly=true)로 조회 의도를 표시한다.

2 ORM

Hibernate가 flush와 변경 감지 비용을 줄일 수 있다.

3 Connection

드라이버에 read-only 힌트를 전달할 수 있다.

4 DBMS

최적화하거나 쓰기를 제한할 수 있지만 보장 범위는 제품별로 다르다.

배치 위치

조회 전용 서비스 메서드와 리포트 쿼리에 표시한다.

주의 위치

조회 후 조건부 쓰기가 섞인 메서드에는 쓰지 않는다.

핵심 오해

쓰기 방지 보안 장치로 생각하면 안 된다.