2023년 9월 15일 금요일

트랜잭션 처리 시 Connection의 AutoCommit 주의사항


트랜잭션 처리를 위해
Connection 객체의 autoCommitfalse로 설정해야 할 때가 있습니다.

하지만 이때 주의해야 할 점이 있습니다.


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) 복원을 안전하게 처리하는 습관을 들이면 더 좋습니다.


댓글 없음:

댓글 쓰기

🧠💥 이탈리안 브레인롯(Italian Brainrot): 인터넷 밈의 신세계 🇮🇹

요즘 SNS에서 유행하는 이상한 말투, 이탈리아 억양, 그리고 피자 이모지 🤌🍕. 이게 다 뭔지 궁금하셨다면, 바로 이 ‘이탈리안 브레인롯(Italian Brainrot)’ 때문입니다! 중독성 있는 이 밈, 지금부터 쉽고 재밌게 알아볼게요. ...