inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 DB 2편 - 데이터 접근 활용 기술

트랜잭션 어노테이션 위치

401

Moon Stephen

작성한 질문수 3

0

안녕하세요. 영한님. 항상 강의 잘 듣고 있습니다.
 
트랜잭션(@Transactional)의 위치를 소개해주실때, 클래스에 둘지 메소드에 둘지 인터페이스쪽에 둘지를 설명해주셨는데요.
만약에 단순 조회 쿼리에 대해 @Transactional 를 아예 쓰지 않는다면 권장할 만한 방법이 아닐까요?
 
기본적인 CRUD는 SimpleJpaRepository 구현에 의해 @Transactional이 이미 달려있지만 우리가 생성하는 query method에 @Transactional 을 달지 않으면, 명시적인 트랜잭션이 시작되지 않고 쿼리가 수행되는 것으로 확인했는데요(MySQL 경우 쿼리 앞뒤로 set autocommit 수행 X)
 
일반적으로 커넥션의 기본 autocommit 설정이 true 라서, 굳이 트랜잭션을 열지 않아도 MySQL은 autocommit이 켜져있다면 조회 쿼리 하나를 read-only 트랜잭션으로 간주하므로 데이터베이스 상의 최적화는 여전히 적용될 것으로 생각되고(1), 트랜잭션 여부에 따른 MySQL 벤치마크 상으로도 명시적으로 트랜잭션을 열지 않았을때가 열었을 때보다 두배 가까이 빠르다는 결과도 있는데요.(2)
 
JPA 상에서는 readOnly 옵션을 쓰는 것 대신, @Transactional 없이 조회 쿼리를 사용해도 아무런 문제가 없을 지, 이렇게 사용하는 경우가 흔한지 궁금해서 질문 드립니다. (@Transactional(readOnly=true) 가 없으면 replica datasource를 사용하기 어려울 것 같지만, 복제지연 이슈를 피하고자 현재 master 에서 조회를 하고 있습니다.)
 
감사합니다.
 

spring

답변 1

1

김영한

안녕하세요. Moon Stephen님

JPA에서도 단순히 데이터를 읽기용도로만 사용할 때는 트랜잭션 없이 읽기가 가능합니다.

(참고로 JPA책 15.4.2 읽기 전용 쿼리와 성능 최적화 부분을 보시면 트랜잭션 밖에서 읽기라는 부분이 도움이 될 수 있습니다.)

따라서 말씀하신 것 처럼 최적화가 될 것 같아요. 그런데 DB 종류와 버전에 따라서 다를 수 있기 때문에 성능테스트를 먼저 수행하고 결정하시는 것을 권장합니다.

감사합니다.

RepositoryTest의 패키지 위치가 domain인 이유

0

36

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

31

1

update()에 사용하는 setter 질문드립니다.

0

49

1

SQL 중심적 개발의 문제점에 대한 질문

0

72

1

혹시 Containing 을 안쓰신 이유가 있을까요?

0

86

2

[공유] 스프링부트 4.x 버전 mybatis 연동

0

180

1

@repository 어노테이션

0

90

3

ItemService

0

59

1

논리 커밋, 물리 커밋 질문드립니다.

0

54

1

내부 트랜잭션 커밋은 필수인가요?

0

57

1

프록시 커넥션 객체를 반환할 때 생성하는건가요?

0

55

1

Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)

2

180

2

JPQL 대신 네이티브 쿼리를 사용해야 하는 경우

0

80

1

@EventListener(ApplicationReadyEvent.class) 관련

0

88

1

트랜잭션 동기화 매니저와 데이터 소스

0

77

1

DB 관련 강의 개설 계획은 없으신건가요?

0

133

2

물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요

0

94

1

스프링 3 버전 이상 rollbackFor 변경된듯요

1

113

1

트랜잭션 전파 질문.

0

87

1

프로젝트 오픈 에러

0

126

1

외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다

0

84

2

같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환

0

73

1

h2 인메모리 테스트중 예약어 충돌날 경우 대처방법

0

105

1

커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문

0

98

2