@Transactional(readOnly=true)는 왜 쓰지?

일단 해볼게·2023년 4월 6일
0

Springboot

목록 보기
21/26

CUD 메소드가 아닌 Get 메소드는 @Transactional 어노테이션을 사용하지 않으면 되는데 @Transactional(readOnly=true)를 왜 사용하는지 궁금해졌습니다.

@Transactional(readOnly=true) 예제 코드

@Transactional(readOnly = true)
    public TaskInfo getTask(Long taskId) {
        Task foundTask = taskRepository.findById(taskId)
                .orElseThrow(EntityNotFoundException::new);

        return taskMapper.mapTaskEntityToTaskInfo(foundTask);
    }

그래서 왜 쓰는데?

  1. 조회한 데이터를 return 한다고 해도 의도치 않게 데이터가 변경되는 일을 사전에 방지
  2. 스냅샷 저장, 변경 감지(dirty check)의 작업을 수행하지 않아 성능이 향상
  3. MySQL을 사용할 때 데이터가 날아가는 것을 방지하기 위해서 이중화 구성(master - Slave)을 하는 경우가 있는데 DB가 master와 slave로 나누어져 있다면 readOnly = true로 있는 경우에는 읽기 전용으로 master가 아닌 slave를 호출
  4. @Transactional(readOnly=true)가 있으면 READ에 대한 동작만 수행한다고 인지 → flush를 생략해서 성능 향상

참고
https://resilient-923.tistory.com/391

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글