내부 트랜잭션 커밋은 필수인가요?
57
投稿した質問数 90
log.info("내부 트랜잭션 커밋");
txManager.commit(inner);
log.info("외부 트랜잭션 커밋");
txManager.commit(outer);전체 커밋하는 상황에서 내부, 외부 모두 커밋이 되어야 실제 물리 커밋이 이루어진다고 앞서 개념을 설명하실 때도 그렇고 이번 강의에서도 설명하셨습니다.
그런데 내부 커밋을 진행하면 아무 일도 발생하지 않고 외부 트랜잭션에서 커밋을 진행해야 실제 물리 커밋이 되는데
그렇다면 이때 내부 커밋을 진행하지 않아도 되나요? 아니면 모두 커밋돼야 커밋된다는 원칙에 따라 내부 커밋도 필수적으로 진행하여야하고 외부 커밋도 진행하여야하는 것인가요?
제 생각에는 정말 내부 커밋이 필요하다면 호출이 반드시 필요하다라고 설명하셨을 것 같은데 내부 커밋을 해도 아무것도 안한다고 하시니 내부 커밋 코드를 호출에 의문점이 생깁니다.
실제 물리 커밋은 외부 커밋에서 진행되기 때문에 내부 커밋 코드를 강의 설명 차원에서 작성하신 것인지 아니면 정말 원칙에 따라 필요해서 호출한 것인지 궁금합니다.
回答 1
0
안녕하세요, 인프런 AI 인턴입니다. yoon6669님.
스프링 트랜잭션 관리는 내부적으로 논리적 트랜잭션과 물리적 트랜잭션을 명확히 구분합니다. 질문하신 내용에서 사용하고 계시는 내부 트랜잭션 txManager.commit(inner)는 스프링이 관리하고 있는 논리적 트랜잭션베이스에 영향을 주지만, 실제 데이터베이스에 대한 물리적인 변경은 이루어지지 않습니다. 물리적 커밋은 보통 외부 트랜잭션인 txManager.commit(outer)에서 이루어지게 됩니다.
내부 트랜잭션 커밋이 의미하는 것은 스프링이 내부적으로 이 트랜잭션이 정상적으로 완료되었음을 관리하는 것일 뿐, 실제 데이터베이스가 이 상태를 가지고 어떤 동작을 수행하는 것은 아닙니다. 그렇기에 internal commit이라는 코드는 트랜잭션 전파에 따라 올바르게 코드가 구성되었는지를 보장하기 위해 사용됩니다.
하지만 실질적으로 직접적으로 물리적 커밋은 외부 커밋에서 이루어지고, 내부 커밋은 트랜잭션 전파 상태 유지를 할 수 있도록 호출됩니다. 이러한 호출은 운영체제가 아닌 트랜잭션 매니저가 이 트랜잭션이 내부적으로 논리적 단위로 처리되었음을 알려주기 위한 용도가 있습니다.
유사한 질문과 답변을 볼 수 있는 링크를 아래에 소개드리겠습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
RepositoryTest의 패키지 위치가 domain인 이유
0
30
2
REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!
0
30
1
update()에 사용하는 setter 질문드립니다.
0
47
1
SQL 중심적 개발의 문제점에 대한 질문
0
72
1
혹시 Containing 을 안쓰신 이유가 있을까요?
0
84
2
[공유] 스프링부트 4.x 버전 mybatis 연동
0
174
1
@repository 어노테이션
0
89
3
ItemService
0
58
1
논리 커밋, 물리 커밋 질문드립니다.
0
54
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
아이솔레이션 레벨에 관한 내용도
0
73
1

