
Session::startTransaction 메소드는 데이터베이스 트랜잭션을 시작하는 메소드입니다. 트랜잭션을 시작하면, 데이터베이스는 트랜잭션 내의 모든 연산을 하나의 단위로 처리합니다. 만약 트랜잭션 내의 연산 중 하나가 실패하는 경우, 데이터베이스는 트랜잭션을 취소합니다.
트랜잭션의 시작과 종료를 관리하는 메소드는 다음과 같습니다.
- Session::startTransaction() : 트랜잭션을 시작합니다.
- Session::commit() : 트랜잭션을 커밋합니다.
- Session::rollback() : 트랜잭션을 취소합니다.
트랜잭션 격리 수준(Transaction Isolation Level)은 데이터베이스가 트랜잭션 간의 동시성을 관리하는 방법을 결정합니다. 격리 수준은 다음과 같습니다.
- READ UNCOMMITTED : 다른 트랜잭션의 변경 내용을 읽을 수 있습니다. (Dirty Read)
- READ COMMITTED : 다른 트랜잭션의 커밋된 변경 내용을 읽을 수 있습니다. (Non-Repeatable Read)
- REPEATABLE READ : 같은 트랜잭션 내에서 동일한 쿼리를 실행했을 때 동일한 결과를 반환합니다. (Phantom Read)
- SERIALIZABLE : 트랜잭션을 순차적으로 처리합니다. (Dirty Read, Non-Repeatable Read, Phantom Read)
READ UNCOMMITTED 격리 수준을 사용하는 경우는 다음과 같습니다.
- 데이터베이스가 읽기 전용으로 사용되는 경우
- 데이터베이스가 읽기만 하는 트랜잭션의 경우
READ COMMITTED 격리 수준을 사용하는 경우는 다음과 같습니다.
- 데이터베이스가 읽기와 쓰기 모두 사용되는 경우
- 데이터베이스가 동시성을 높이기 위해 사용되는 경우
REPEATABLE READ 격리 수준을 사용하는 경우는 다음과 같습니다.
- 데이터베이스가 읽기와 쓰기 모두 사용되는 경우
- 데이터베이스가 동시성을 높이기 위해 사용되는 경우
SERIALIZABLE 격리 수준을 사용하는 경우는 다음과 같습니다.
- 데이터베이스가 높은 수준의 격리 수준을 필요로 하는 경우
- 데이터베이스가 트랜잭션 간의 동시성을 관리하기 위해 사용되는 경우
격리 수준을 선택할 때는 데이터베이스의 성능과 트랜잭션 간의 동시성을 고려해야 합니다.
2025-07-12 03:20