트랜잭션이란?
데이터베이스의 상태를 변화시키기 위해 수행되는 일련의 작업들을 하나의 단위로 묶은 것
모든 작업이 성공해야 하며, 하나의 작업이라도 실패한다면 나머지 작업들도 수행되지 않아야 함
A 계좌에서 B계좌로 송금하는 계좌이체 예시
- A 잔고를 5000원 감소
- B 잔고를 5000원 증가
1은 성공했는데 2가 실패한다면 A의 잔고만 감소했으므로 계좌이체 로직은 실패한 것
따라서, B 잔고를 5000원 증가시키는 데 실패했다면 A 잔고도 원상태로 복구시켜야 함
커밋(Commit) : 모든 작업이 성공하여 데이터베이스에 정상 반영하는 것
롤백(Rollback) : 작업 중 하나라도 실패하여 모든 작업을 취소하는 것
데이터를 저장할 때 단순히 파일에 저장할 수 있음에도 불구하고 데이터베이스에 저장하는 이유가 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문
트랜잭션 ACID
- 원자성(Atomicity) : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 실패해야 함
- 일관성(Consistency) : 트랜잭션이 완료된 후 데이터베이스는 일관된 상태를 유지해야 함
- 예를 들어, 데이터베이스에서 정한 무결성 제약 조건을 만족해야 함
- 격리성(Isolation) : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리해야 함
- 예를 들어, 동시에 같은 데이터를 수정하지 못하도록 해야 함.
- 하나의 트랜잭션이 완료될 때까지 다른 트랜잭션은 대기해야 함
- 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준을 선택할 수 있음
- 지속성(Durability) : 트랜잭션을 성공적으로 끝내면 그 결과가 항상 데이터베이스에 영구적으로 기록되어야 함
- 예를 들어, 계좌이체 로직이 완료된 후 시스템에 장애가 생기더라도 송금 내역은 손실되지 않아야 함
'Spring' 카테고리의 다른 글
| [Spring] Spring DB : 애플리케이션 코드에 트랜잭션 적용 (0) | 2024.08.07 |
|---|---|
| [Spring] Spring DB : 데이터베이스 연결 구조와 DB 세션 (0) | 2024.08.05 |
| [Spring] Spring DB : Connection Pool 과 DataSource (0) | 2024.08.01 |
| [Spring] Spring DB : JDBC를 사용한 데이터베이스 연결 (0) | 2024.07.30 |
| [Spring] Spring DB : JDBC의 이해 (0) | 2024.07.28 |