제대로 이해했는지 확인하고싶습니다.
147
작성한 질문수 29

가장 처음에 했던 트랜잭션은 각각의 리포지터리에서 @Transactional을 걸어줘서 별도로 커밋, 롤백 되게끔 만들었습니다.

이후, 마지막에는 LogRepository에 @Transactional(propagation = Propagation.REQUIRES_NEW)를 사용해서 트랜잭션 동기화 매니저에서 다른 커넥션을 가져와서 별도로 커밋, 롤백 되게끔 만들었습니다.
여기서 궁금한 점은 처음과 마지막의 트랜잭션의 구성은 다르지만 결과값은 똑같은 게 맞을까요?
다른 점이 있다면 혹시 무엇인지 알려주시면 감사하겠습니다.
답변 2
0
안녕하세요. kongminoo님
AI 인턴이 잘 답변해주었는데요.
여기에 더해서 설명을 드리자면, 처음 예제와 마지막 예제는 트랜잭션의 범위가 다릅니다.
처음 예제는 MemberService에서 트랜잭션을 사용하지 않습니다. MemberService에서 예외가 발생해도 앞서 실행한 트랜잭션이 롤백되지 않습니다.
반면에 마지막 예제는 MemberService에서 트랜잭션을 사용합니다. 따라서 MemberService에서 런타임 예외가 발생하면 트랜잭션이 롤백됩니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. kongminoo님.
질문하신 내용에 대해 설명드리겠습니다.
처음에 각 리포지터리에 @Transactional을 사용하여 별도로 커밋, 롤백하게 구성하신 것과, 마지막에 LogRepository에 @Transactional(propagation = Propagation.REQUIRES_NEW)를 사용하여 별도로 커밋, 롤백하게 구성하신 경우는 결과적으로 커밋과 롤백이 따로 관리된다는 점에서 비슷하지만, 동작 방식에는 차이가 있습니다.
처음 구성 (
@Transactional사용):- 각 트랜잭션은 독립적으로 관리됩니다.
MemberRepository와LogRepository각각이 자신의 트랜잭션 매니저에 의해 관리되며, 별도의 연결을 사용하여 커밋되거나 롤백됩니다.
- 이 경우, 하나의 트랜잭션이 실패해도 다른 트랜잭션에 영향을 미치지 않습니다.
- 각 트랜잭션은 독립적으로 관리됩니다.
마지막 구성 (
@Transactional(propagation = Propagation.REQUIRES_NEW)사용):Propagation.REQUIRES_NEW를 사용하면, 현재 실행 중인 트랜잭션을 잠시 중단하고, 새로운 트랜잭션을 시작합니다.
LogRepository에서 실행되는 트랜잭션은 기존의MemberService와MemberRepository의 트랜잭션과 분리되어, 별도의 커밋과 롤백 과정을 거칩니다.
- 만약
MemberService와 연관된 트랜잭션에서 문제가 발생하여 롤백되더라도,LogRepository의 트랜잭션은REQUIRES_NEW로 인해 독립적으로 커밋되므로 영향을 받지 않습니다.
따라서, 두 구성은 겉보기에는 비슷하게 보일 수 있지만, Propagation.REQUIRES_NEW를 사용한 경우는 이미 존재하는 트랜잭션과는 완전히 독립적인 새로운 트랜잭션을 생성한다는 차이가 있습니다. 이로 인해 트랜잭션 경계와 롤백/커밋의 방식에 차이가 있을 수 있습니다.
도움이 되셨기를 바랍니다. 추가 질문이 있다면 언제든지 말씀해 주세요! 😊
RepositoryTest의 패키지 위치가 domain인 이유
0
30
2
REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!
0
30
1
update()에 사용하는 setter 질문드립니다.
0
47
1
SQL 중심적 개발의 문제점에 대한 질문
0
72
1
혹시 Containing 을 안쓰신 이유가 있을까요?
0
83
2
[공유] 스프링부트 4.x 버전 mybatis 연동
0
174
1
@repository 어노테이션
0
89
3
ItemService
0
58
1
논리 커밋, 물리 커밋 질문드립니다.
0
54
1
내부 트랜잭션 커밋은 필수인가요?
0
57
1
프록시 커넥션 객체를 반환할 때 생성하는건가요?
0
54
1
Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)
2
178
2
JPQL 대신 네이티브 쿼리를 사용해야 하는 경우
0
77
1
@EventListener(ApplicationReadyEvent.class) 관련
0
88
1
트랜잭션 동기화 매니저와 데이터 소스
0
76
1
DB 관련 강의 개설 계획은 없으신건가요?
0
133
2
물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요
0
94
1
스프링 3 버전 이상 rollbackFor 변경된듯요
1
112
1
트랜잭션 전파 질문.
0
87
1
프로젝트 오픈 에러
0
126
1
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
0
83
2
같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환
0
72
1
h2 인메모리 테스트중 예약어 충돌날 경우 대처방법
0
102
1
커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문
0
98
2





