@Transactional(readOnly = true) 쓰는 이유

Untitled·2024년 11월 7일
0

JPA

목록 보기
3/3

@Transactional(readOnly = true) 쓰는 이유

성능 최적화

JPA/Hibernate 쓸 때 readOnly=true로 설정하면 영속성 컨텍스트가 변경 감지(dirty checking) 안 해서 성능이 좋아져요. 영속성 컨텍스트가 스냅샷 안 만들어서 메모리도 덜 먹고요.

실수로 데이터 변경하는 거 방지

읽기 전용으로 설정해놓으면 실수로 데이터 바꾸는 일 없어요. 특히 여러 DB 쓰는 환경에서 의도치 않게 데이터 바뀌는 거 막을 수 있어요.

트랜잭션 매니저 명확하게 지정

readOnly 속성 쓰면 이 메서드가 읽기만 한다는 걸 확실히 알 수 있어요. 여러 DB 쓰는 환경에서 특정 트랜잭션 매니저 지정할 때 유용해요.

@Transactional(readOnly = true, transactionManager = "mssqlTransactionManager")
public void 읽기전용메서드() {
    // 읽기만 하는 로직
}

DB 최적화

일부 DB에서는 읽기 전용 트랜잭션에 대해 특별한 최적화를 해줘요. 예를 들어, 테이블 잠금을 안 하거나 읽기 전용 복제본을 사용할 수 있어요.

트랜잭션 분리하기 좋음

읽기랑 쓰기 작업 확실히 구분해서 트랜잭션 관리할 수 있어요. 로그 저장 같은 부수적인 작업을 따로 트랜잭션으로 분리할 때 좋아요.

@Transactional(readOnly = true)
public void 데이터읽기() {
    // 데이터 읽는 로직
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void 로그저장() {
    // 로그 저장하는 로직
}

코드 읽기 쉬워짐

이 메서드가 데이터 안 바꾸고 읽기만 한다는 걸 한눈에 알 수 있어요. 다른 개발자들이 코드 이해하고 유지보수하기 좋아져요.

이렇게 @Transactional(readOnly = true) 쓰면 성능도 좋아지고, 데이터 일관성도 지키고, 코드도 읽기 쉬워져요. 특히 여러 DB 쓰는 복잡한 환경에서 트랜잭션 관리하기 좋당.

profile
그저 그런 꾸준히 하고만 싶은 개발자 이야기

0개의 댓글