본문 바로가기

개발일지/TIL

[230711] @Transactional(readOnly = true)

Transactional(readOnly = true)

💬 Transaction에 readOnly 옵션을 사용하면 수정과 저장하는 것을 방지할 수 있다고 한다. 또한 수정이 일어나지 않기 때문에 별도로 스냅샷에 비교 객체를 저장해두지 않는다고 한다. 이를 통해 메모리 사용량을 최적화할 수 있다.

 

✔ 저장 및 수정을 예방

 

@Transactional(readOnly= true)
public Post getPost(Long id) {
    postRepository.save(new Post());
}
❗java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed

 

✔ 스냅샷 별도 저장하지 않는다

💬 readOnly 옵션이 true일 경우 스냅샷을 별도로 저장하지 않는다고 한다. 코드 상으로 확인해보고 싶었는데 잘 되지 않았다. 시간이 될 때 한 번 확인해보면 좋을 것 같다. 선배 개발자 분에게 물어본다던지 말이다.

생각

조회를 할 때 Transaction을 별도로 설정하지 않은 경우도 있었다. 그런데 위와 같은 장점들을 알게되니 일반적으로 "readOnly=true" 옵션을 넣어주는 것이 좋은 것 같다. 그리고 내가 직접 확인해보고 싶은 것도 있었는데, 그것이 생각대로 잘 되지 않은 것은 아쉬웠다. 이러한 것을 조금식 격파하고 성장하고 싶다.