트랜잭션을 더 자세히 이해하기 위해 데이터베이스 서버 연결 구조와 DB 세션에 대해 알아봅시다.
사용자는 웹 애플리케이션 서버(WAS)나 DB 접근 툴 같은 클라이언트를 사용해서 데이터베이스 서버에 접근할 수 있습니다.
클라이언트는 데이터베이스 서버에 연결을 요청하고 커넥션을 맺게 됩니다.
이때 데이터베이스 서버는 내부에 세션이라는 것을 만듭니다. 그리고 앞으로 해당 커넥션을 통한 모든 요청은 이 세션을 통해서 실행하게 됩니다.
쉽게 이야기해서 개발자가 클라이언트를 통해 SQL을 전달하면 현재 커넥션에 연결된 세션이 SQL을 실행합니다.
세션은 트랜잭션을 시작하고, 커밋 또는 롤백을 통해 트랜잭션을 종료합니다. 그리고 이후에 세션이 살아있으면 새로운 트랜잭션을 다시 시작할 수 있습니다.
사용자가 커넥션을 닫거나, 또는 DBA(DB 관리자)가 세션을 강제로 종료하면 세션은 종료됩니다.
물론 실제 구현 레벨에 따라서는 그림이 좀 다를 수 있긴 한데 기본적으로 해당 그림이라고 보시면 됩니다.
사용자가 연결하면 DB 내부에는 DB Session이 생기고, DB Session을 통해서 트랜잭션도 시작하고 SQL도 실행합니다.
또한 커넥션 풀 안에 10개의 커넥션이 있으면 커넥션마다 DB Session이 딱딱 연결되어 있죠.