작성
·
51
0
안녕하세요. 앞서 전파기본 강의와 전파예제 강의를 듣고나서 이해가 되지않는 부분이 몇가지 있어서 질문드립니다.
1. 강의 자료중에,
트랜잭션매니저에 커밋하는것이 논리적인 커밋이라면, 실제커넥션에 커밋하는것을 물리 커밋이라고 할수있다
= 내부트랜잭션인 txManager.commit(inner)을 하는것이 논리적인 커밋이고, 외부트랜잭션인 txManager.commit(outer)을 하는것이 물리커밋이다.
= 트랜잭션 매니저를 통해 txManager.commit(inner)를 하는것이 논리적인 커밋이고, 트랜잭션 매니저를 통해 txManager.commit(outer)를 하는것이 물리커밋이다.
이렇게 생각하는게 맞을까요??
2. 1번 질문에 더해서, 트랜잭션 매니저를 통해서 txManager.commit()을 하는것이 논리적인 커밋이라면, 물리적인 커밋은 코드상 어떤것인가요? 외부트랜잭션도 txManager.commit()을 통해 커밋하는거같은데, 이렇게 외부트랜잭션을 커밋하는것이 논리적인 커밋임과 동시에 물리커밋인것인가요??
3. 외부트랜잭션도 논리트랜잭션이고 내부트랜잭션도 논리트랜잭션인가요? 그래서 이 두가지를 묶어서 물리트랜잭션이라고 하는것인가요??
답변 1
0
해당 질문에 대해서 계속 찾아보면서 생각해봤는데, 이렇게 이해하면 될까요?
1. 내부트랜잭션이 트랜잭션 매니저를 통해서 커밋하는것이 논리적인 커밋이고, 외부트랜잭션이 트랜잭션매니저를 통해서 커밋하는것은 실제 DB커넥션에 커밋하는것이다. 외부트랜잭션의 커밋은 논리적커밋임과 동시에 물리커밋이다.
2. 외부트랜잭션을 커밋하는것은 논리적 커밋임과 동시에 물리커밋이다.
3. 외부트랜잭션과 내부트랜잭션 모두 논리트랜잭션이고, 논리트랜잭션을 묶어서 물리트랜잭션이라고한다.
강의자료에는 논리트랜잭션들은 하나의 물리트랜잭션으로 묶인다고 되어있는데, 영한님께서는 논리 트랜잭션을 묶어서 물리 트랜잭션이라고 하는 것은 아니라고하셔서.. 헷갈리는데 어느게 맞을까요??
안녕하세요. 오리쉐리님
다음과 같이 정리해드릴게요.
- 트랜잭션 매니저를 통해서 커밋하는 것은 논리적 커밋이다.
- 이때 외부 트랜잭션이면 DB에 실제 물리적 커밋이 발생한다.
- 이때 내부 트랜잭션이면 DB에 실제 물리적 커밋이 발생하지 않는다.
결과적으로 하나로 묶인 여러 논리 트랜잭션은 사실은 하나의 물리 트랜잭션과 관련이 있게 됩니다.
(제가 위에서 댓글로 남긴 "논리 트랜잭션을 묶어서 물리 트랜잭션이라고 하는 것은 아니다"는 조금 다른 의미였습니다. 논리 트랜잭션과 물리 트랜잭션이 서로 다르다는 것을 의미하려고 했는데요. 자세히 풀지 않아서 오해하실 수 있겠네요.)
감사합니다.
네 생각하신 내용이 맞습니다 🙂
참고로 논리 트랜잭션을 묶어서 물리 트랜잭션이라고 하는 것은 아니고, 트랜잭션 매니저를 통해서 커밋하는 것은 논리적 커밋으로 이해하시면 됩니다.
이때 사용되는 트랜잭션이 내부 트랜잭션이면 실제 커밋이 발생하지는 않고, 외부 트랜잭션이면 물리적 커밋이 발생하게 됩니다.
그리고 물리적 커밋은 실제 데이터베이스 트랜잭션에 커밋하는 것으로 이해하시면 됩니다.
감사합니다.