트랜잭션 처리를 위해
Connection 객체의 autoCommit
을 false
로 설정해야 할 때가 있습니다.
하지만 이때 주의해야 할 점이 있습니다.
Connection Pool과 AutoCommit 상태
Connection Pool에서 가져온 Connection은
가져올 때 설정된 autoCommit
상태를 유지합니다.
즉, 한 번 가져온 Connection은
autoCommit
설정을 변경하지 않으면
다음 사용자도 변경된 설정을 그대로 물려받게 됩니다.
왜 AutoCommit 복원이 필요할까?
Connection을 사용한 뒤에 autoCommit
설정을 원래 상태로 복원하지 않으면,
그 Connection을 재사용하는 다른 코드에서
예기치 않은 트랜잭션 문제가 발생할 수 있습니다.
특히 트랜잭션을 기대하지 않는 코드에서
autoCommit=false
상태의 Connection을 받으면,
커밋이 안 되는 문제가 생길 수 있습니다.
AutoCommit 복원 타이밍
autoCommit
설정은 반드시
connection.close()
호출 전에 복원해야 합니다.
주의:
connection.close()
를 호출한 이후에는
커넥션이 이미 풀에 반환되었기 때문에
autoCommit
설정을 변경할 수 없습니다.
따라서,
데이터베이스 작업이 끝난 후
commit()
→ autoCommit(true)
복원 → close()
순서로 처리해야 합니다.
코드 예시
try {
connection.setAutoCommit(false);
// 데이터베이스 작업
// ...
connection.commit();
// autoCommit 설정 복원
connection.setAutoCommit(true);
} finally {
// 커넥션 종료
connection.close();
}
포인트 정리
-
connection.commit()
후, -
connection.setAutoCommit(true)
로 복원하고, -
마지막에
connection.close()
호출.
요약
-
Connection Pool에서는
autoCommit
상태가 재사용된다. -
트랜잭션 작업 후
autoCommit
을 반드시 원래 상태로 복원해야 한다. -
복원은
connection.close()
이전에 해야 한다.
💬
이렇게 정리하면 실수를 방지하고,
Connection Pool을 통한 안정적인 트랜잭션 처리가 가능합니다.
+ 추가로:
try-catch-finally
블록을 사용해서 close()
와 autoCommit(true)
복원을 안전하게 처리하는 습관을 들이면 더 좋습니다.
댓글 없음:
댓글 쓰기