트랜잭션 - 개념 이해
-
트랜잭션이란?
- 일련의 작업을 하나의 작업처럼 간주하는 것
- 트랜잭션 내의 모든 작업이 성공하면 트랜잭션은 성공.
- 트랜잭션 내의 하나의 작업이라도 실패하면 트랜잭션은 실패.
- 커밋(Commit)
- 롤백(Rollback)
- DB의 상태를 트랜잭션 실행 이전으로 되돌리는 것.
-
트랜잭션과 ACID
- 트랜잭션은 ACID를 충족해야 한다.
- 원자성(Atomic)
- 트랜잭션은 하나의 작업처럼 간주되어야 한다.
- 성공하거나, 실패하거나
- 일관성(Consistency)
- 트랜잭션 성공 후에도 DB는 일관성을 유지해야 한다.
- 즉, 트랜잭션 성공 후에도 DB의 제약 조건이 훼손되지 않아야 한다.
- 격리성(Isolation)
- 동시에 실행되는 여러 트랜잭션들이 서로의 연산에 끼어들지 않도록 격리한다.
- 예를 들어, 두 트랜잭션이 동시에 하나의 데이터에 쓰기 작업을 하지 않아야 한다.
- 동시성 이슈, 성능 이슈와 관련이 있기 때문에 격리 수준을 적절하게 선택하는 것이 중요한다.
- 고립성을 완전히 보장하기 위해서는 트랜잭션을 순차적으로 실행해야 하는데, 그럼 성능이 너무 떨어지게 된다.
- 지속성(Durability)
- 트랜잭션 성공 결과는 DB에 영구히 반영되어야 한다.
- 시스템 장애가 발생해도 DB 로그를 통해 트랜잭션 성공 결과를 복구할 수 있어야 한다.
- 그래서 트랜잭션 성공 결과가 DB 로그에 남는 것을 커밋으로 간주한다.
-
트랜잭션 격리 수준
- Read Uncommited
- Read Commited
- Repeatable Read
- Serializable
- 보통은 Read Commited(커밋된 읽기)를 격리 수준으로 사용한다.
데이터베이스 연결 구조와 DB 세션

- 사용자가 클라이언트를 통해 DB 서버에 연결을 요청하면 클라이언트와 DB 서버 간에 커넥션이 맺어지고, DB 서버 내부에는 세션이 생성된다.
- 해당 커넥션을 통해 전달된 모든 SQL문은 이 세션을 통해 실행된다.
- 세션은 트랜잭션을 시작하고 커밋 또는 롤백하여 트랜잭션을 종료한다.
- 사용자가 커넥션을 닫거나 DB가 세션을 강제로 종료하면 세션은 종료된다.

- 커넥션 풀이 10개의 커넥션을 생성하면 세션도 10개 생성된다.