-
@Transactional 옵션을 사용하지 않는다면?개발/Spring 2022. 3. 7. 02:21
일단 기본적으로 @Transactional 에서 많이 사용되는 readOnly 옵션의 default 는 false이다.
때문에 서비스레벨에서 해당 메서드의 Transaction 관리를 하려고 할때 대부분 @Transactional만 붙이고 있는 것이다.
그렇다면 아무런 옵션도 붙이지 않고 jpa를 사용한다면 어떻게 될까?
우선, spring-data-jpa에서 제공하는 JpaRepository의 기본 구현체는 SimpleJpaRepository이다.
내부를 들여다보면
위에서 알 수 있듯 구현 메서드들의 기본 값은 readonly를 띄고 있다.
이제 C-R-
U-D에 대해 알아보자.Create
저장하는 메서드에 대해서는 Transactional옵션을 추가 선언하고 있다. 즉 위 default처럼 readonly=false이며 영속성 관리를 한다.
Read
find 문은 메서드의 override만 하고 있으며 Transaction 옵션에 대한 추가 선언은 없다.
getById, exists 역시 마찬가지이다.
Delete
Save와 마찬가지로 @Transactional 을 새로 선언하고 있다. 즉 readonly=false인 것이다.
정리.
기본적으로 Save와 Delete에 대해선 @Transaction 이 사용되고 있다(readOnly = false)
select문인 find에 대해선 @Transaction(ReadOnly = true) 옵션이 사용되고 있다.
즉, jpa를 사용하면서 이미 정의된 메서드를 따로 설정없이 사용한다면
select 메서드에 대해선 @Transactional(ReadOnly = true) 가
나머지(save, update, delete)에 대해선 @Transactional 이 생략되어 있다고 생각하면 된다.
'개발 > Spring' 카테고리의 다른 글
spring에서 private 테스트는 어떻게 할까? (feat. ReflectionTestUtils, kotlin) (0) 2022.03.27 @Transactional(readOnly = true)는 필요한가? (2) 2021.08.08 spring transaction (0) 2021.04.06 junit5 에러 테스트 (0) 2021.03.21 jpa또는 querydsl로 union 쿼리 사용 (5) 2021.02.25 댓글