Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

트랜잭션 시작 시 자동 커밋 비활성화를 하는 이유는? #2

Open
seong-wooo opened this issue Apr 18, 2023 · 3 comments
Labels
question Further information is requested

Comments

@seong-wooo
Copy link
Member

8장 180p

JDBC API로 트랜 잭션을 처리하려면 Connection의 setAutoCommit(false)를 이용해서 자동 커밋을 비활성화 한다.

왜 자동 커밋을 비활성화할까?

자동으로 커밋이 되면 좋지않나?

@seong-wooo seong-wooo added the question Further information is requested label Apr 18, 2023
@minnseong
Copy link
Member

자동 커밋으로 되어 있으면, 쿼리 하나하나가 바로 커밋되기 때문에 여러 쿼리를 하나의 트랜잭션으로 묶을 수 없기 때문입니다.

@seong-wooo
Copy link
Member Author


그렇다면 하나의 트랜잭션에서는 하나의 Connection을 사용해야하는데, 스프링에서는 어떻게 하나의 Connection만 사용할 수 있도록 할까요?

예를 들어서 아래처럼 하나의 트랜잭션에서 두 Dao가 로직을 실행할 때 두 Dao는 같은 Connection을 이용하여 DB에 접근해야합니다.

...
    memberDao.save(멤버);
    orderDao.save(주문);
...

@minnseong
Copy link
Member

자세히는 모르고, 트랜잭션 동기화 매니저의 ThreadLocal에 커넥션을 보관해서 커넥션은 공유하여 하나의 트랜잭션에서 하나의 커넥션만 사용할 수 있도록 하는걸로 알고 있습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants