작성
·
31
0
안녕하세요. 앞서 전파기본 강의와 전파예제 강의를 듣고나서 이해가 되지않는 부분이 몇가지 있어서 질문드립니다.
1. 강의 자료중에,
트랜잭션매니저에 커밋하는것이 논리적인 커밋이라면, 실제커넥션에 커밋하는것을 물리 커밋이라고 할수있다
= 내부트랜잭션인 txManager.commit(inner)을 하는것이 논리적인 커밋이고, 외부트랜잭션인 txManager.commit(outer)을 하는것이 물리커밋이다.
= 트랜잭션 매니저를 통해 txManager.commit(inner)를 하는것이 논리적인 커밋이고, 트랜잭션 매니저를 통해 txManager.commit(outer)를 하는것이 물리커밋이다.
이렇게 생각하는게 맞을까요??
2. 1번 질문에 더해서, 트랜잭션 매니저를 통해서 txManager.commit()을 하는것이 논리적인 커밋이라면, 물리적인 커밋은 코드상 어떤것인가요? 외부트랜잭션도 txManager.commit()을 통해 커밋하는거같은데, 이렇게 외부트랜잭션을 커밋하는것이 논리적인 커밋임과 동시에 물리커밋인것인가요??
3. 외부트랜잭션도 논리트랜잭션이고 내부트랜잭션도 논리트랜잭션인가요? 그래서 이 두가지를 묶어서 물리트랜잭션이라고 하는것인가요??
+ 위 질문에 대해서 계속 찾아보면서 생각해봤는데, 이렇게 이해하면 될까요?
1. 내부트랜잭션이 트랜잭션 매니저를 통해서 커밋하는것이 논리적인 커밋이고, 외부트랜잭션이 트랜잭션매니저를 통해서 커밋하는것은 실제 DB커넥션에 커밋하는것이다. 외부트랜잭션의 커밋은 논리적커밋임과 동시에 물리커밋이다.
2. 외부트랜잭션을 커밋하는것은 논리적 커밋임과 동시에 물리커밋이다.
3. 외부트랜잭션과 내부트랜잭션 모두 논리트랜잭션이고, 논리트랜잭션을 묶어서 물리트랜잭션이라고한다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 오리쉐리님.
트랜잭션에 대한 질문을 해주셨네요. 트랜잭션 매니저가 담당하는 논리 트랜잭션과 물리 트랜잭션의 차이점에 대한 회의감을 가지시는 것은 당연한 일입니다. 이를 이해하기 위해서는 트랜잭션 매니저와 트랜잭션 동기화 매니저 간의 역할을 이해하는 것이 도움이 됩니다.
논리 커밋과 물리 커밋: 보통 내부 트랜잭션의 커밋이나 롤백은 “논리적”이라는 용어를 사용하며, 이는 결국 외부 트랜잭션의 커밋이나 롤백 시에 실질적인 “물리적” DB 커밋 또는 롤백이 일어납니다. 즉, 트랜잭션 매니저를 통해 commit(inner)
를 수행하는 것은 논리적 커밋이고, commit(outer)
를 수행하면 DB에 대해 물리적 커밋이 됩니다.
외부 트랜잭션 커밋: 외부 트랜잭션의 커밋은 txManager.commit(outer)
와 같이 수행되며, 이는 논리적 커밋이면서 동시에 물리적 커밋이 됩니다. 이 과정에서는 트랜잭션의 동기화 매니저가 관리하는 연결된 자원들이 실제로 DB에 대해 커밋하게 됩니다.
논리 트랜잭션과 물리 트랜잭션: 말씀하신 대로 외부 트랜잭션과 내부 트랜잭션 모두 논리 트랜잭션입니다. 이 두가지를 묶어서 하나의 물리 트랜잭션으로 관리합니다. 트랜잭션 매니저가 이 내부적 논리 트랜잭션들을 조정하여 최종적인 물리적 트랜잭션 수행을 결정합니다.
관련한 구체적인 설명과 예시는 다음의 게시물에서 확인하실 수 있습니다:
반드시 트랜잭션 매니저와 트랜잭션 동기화 매니저의 차이와 그 역할을 이해하시면 도움이 됩니다. 또한, 각각의 트랜잭션이 언제, 어떻게 물리적으로 적용되는지 확인할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.