트랜잭션의 개념
단순한 예시로 은행 송금을 생각해보면 된다.
A가 B에게 3000원 이체하는 상황에서 A의 잔고에서 3000원 이 차감되야하고 B의 잔고에서 3000원이 증가해야한다.
이때 A의 잔고에서 3000원이 빠져나갔지만 B의 잔고를 증가 시키는 과정에서 오류가 나면? 안된다.
이럴때 적용할 수 있는 것이 트랜잭션이라고 말할 수 있다. 위와 같은 상황에서 실패하면 A의 잔고를 차감시키기 전의 상황으로 되돌리는 것
또는 차감과 증가를 하나의 작업 단위로 묶는다는 개념으로 보면된다. (차감과 증가를 하나의 일로, 모두 실패하거나 모두성공하거나)
정상 반영하는것을 Commit이라 하고, 되돌리는 것을 Rollback 이라 한다.
트랜잭션 ACID
A | 원자성 (Atomicity) | 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것 처럼 모두 성공하거나 모두 실패해야 한다. |
C | 일관성 (Consistency) | 모든 트랜잭션은 일관성 있는 데이터베이스를 유지해야 한다. 데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야한다. |
I | 격리성 (Isolation) | 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 동시에 같은 데이터를 수정하지 못하도록 해야한다. 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준(Isolation level)을 선택할 수 있다. |
D | 지속성 (Durability) | 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야 한다. |
트랜잭션은 원자성, 일관성, 지속성을 보장한다.
트랜잭션 간에 격리성을 완벽히 보장하려면 트랜잭션을 거의 순서대로 실행해야하는데, 이렇게 처리하게 되면 동시 처리 성능이 매우 나빠진다. 이런 문제로 인해 ANSI 표준은 트랜잭션 격리 수준을 4단계로 나누어 정의해놧다.
트랜잭션의 격리 수준
- READ UNCOMMITED(커밋되지 않은 읽기) - 성능은 제일 좋지만 격리성이 제일 떨어짐
- READ COMMITTED(커밋된 읽기)
- REPEATABLE REAT(반복 가능한 읽기)
- SERIALIZABLE(직렬화 가능) - 격리성이 보장되지만, 성능은 제일 느림
데이터베이스 연결 구조와 DB 세션
- 사용자는 WAS나 DB 접근 툴 같은 클라이언트를 이용해서 DB 서버에 접근할 수 있다. 클라이언트는 DB 서버에 연결을 요청하고 커넥션을 맺게 된다. 이때 DB 서버는 내부에 DB 세션을 만든다. 그리고 앞으로 해당 커낵션을 통한 모든 요청은 이 세션을 통해서 실행하게 된다.
- 세션은 트랜잭션의 시작과 종료, 그리고 이후에 새로운 트랜잭션을 새로 시작할 수 있다.
- 사용자가 커넥션을 닫거나, DBA(DB 관리자)가 세션을 강제로 종료하면 세션은 종료된다.
https://tan-sog.tistory.com/28
[Oracle] 트랜잭션과 락(Transaction And Lock)
트랜잭션(Transaction) 정의 반드시 함께 실행 돼야할 작업의 단위 특성 원자성(Aotomlcity) 트랜잭션은 최소의 작업 단위로서 전체가 처리되거나 취소될 수 있지만 일부만 처리될 수 없다 일관성(Consis
tan-sog.tistory.com
이후 트랜잭션과 락은 이 페이지에 정리해두었다.
'Spring > JDBC' 카테고리의 다른 글
[Spring DB 개념] 트랜잭션 - 동기화 (0) | 2024.07.26 |
---|---|
[Spring DB 개념] 트랜잭션 - 추상화 (0) | 2024.07.26 |
[Spring DB 개념] 트랜잭션 - 기존 방식의 문제점 (0) | 2024.07.26 |
[Spring DB 개념] 커넥션 풀과 데이터 소스 이해 (0) | 2024.07.16 |
[Spring DB 개념] JDBC 이해 (0) | 2024.07.16 |