autocommit, 격리 수준, 읽기 전용 여부를 기대값으로 초기화합니다.
그래서 이전 요청이 끝내지 않은 트랜잭션이나 autocommit 설정이 다음 요청의 시작 상태를 바꿀 수 있습니다. 문제의 핵심은 “객체 재사용”이 아니라 세션 상태 재사용입니다.
애플리케이션은 매번 새 연결처럼 느끼지만, 풀은 같은 세션을 반납받았다가 다음 요청에 다시 대여할 수 있습니다.
이전 작업 흔적 없이 현재 요청만 보면 된다고 생각하기 쉽습니다.
같은 물리 세션을 재사용하므로, 트랜잭션 경계와 세션 설정도 함께 돌아올 수 있습니다.
이 요청의 COMMIT / ROLLBACK 만 신경 쓰면 된다고 가정합니다.
이전 요청이 정리 없이 반납했다면 잠금이 남고, 다음 요청은 예상 밖의 상태에서 시작합니다.
코드가 보는 트랜잭션 경계가 환경마다 같다고 기대합니다.
autocommit = false 같은 값이 유지되면 같은 SQL도 다른 묶음으로 확정될 수 있습니다.
잠금과 정합성 문제가 코드 흐름 안에서만 결정될 것처럼 보입니다.
다음 요청이 이전 요청의 부채를 떠안으면서 데이터 정합성과 동시성이 함께 흔들립니다.
autocommit, 격리 수준, 읽기 전용 여부를 기대값으로 초기화합니다.
성공이면 COMMIT, 실패면 ROLLBACK 으로 열린 작업을 남기지 않습니다.
자동 ROLLBACK 이 있더라도 예외 흐름과 설정 누수까지 대신 설계해 주지는 않습니다.