오늘 과제 진행 순조롭게 잘 됐다.
그런데 몸이 좀 피곤하네..
조금 일찍 하루를 마친다.
- 트랜잭션이란
- 여러 쿼리를 논리적으로 하나의 작업으로 묶어주는 것
- Update: 구매자 계좌에서 10,000원 빼기
- Update: 판매자 계좌에서 10,000원 더하기
- 이러한 상황을 방지하기 위해 있는 기능이 트랜잭션이다.
- 트랜잭션의 특징
- 사용자 혹은 시스템상 오류가 있더라도 데이터베이스가 데이터를 안정적으로 보장할 수 있도록 한다.
- 커밋 : 트랜잭션으로 묶인 모든 쿼리가 실행되어 쿼리 실행 결과를 실제 DB에 저장하는 것
- 롤백 : 쿼리 실행 결과를 취소하고 DB를 트랜잭션 이전 상태로 되돌린다.
- 트랜잭션의 성질 ACID
- A (Atomicity) :
- 원자성을 뜻하며 쿼리 실행 결과가 모두 성공하거나 모두 실패하거나
- C (Consistency) :
- 일관성을 뜻하며 트랜잭션 작업 처리 결과는 항상 일관성 있어야한다.
- I (Isolation) :
- 독립성을 뜻하며 둘 이상의 트랜잭션이 동시 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어 들 수 없다.
- D (Durability) :
- 지속성을 뜻하며 트랜잭션이 성공적으로 완료되었으면 결과를 영구히 반영한다.
- 트랜잭션 격리 수준
- ACID 성질은 트랜잭션이 이론적으로 보장해야하는 성질이고 실제로는 성능을 위해 성질 보장이 완화되기도 한다.
- 동시에 DB에 접근할 때 해당 접근을 어떻게 제어할지에 대한 설정
- Read - Uncommitted :
- 커밋 전의 트랜잭션의 데이터 변경 내용을 다른 트랜잭션이 읽는 것을 허용한다.(트랜잭션 A가 작업을 끝마치지 못하고 롤백하게 되면 트랜잭션 B는 무효가 된 데이터 값을 읽고 처리할 수 있음)
- *Dirty Read가 발생할 수 있음
- Read - Committed :
- 커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회 가능하다.(같은 트랜잭션 내에서 같은 데이터를 두 번이상 조회했는데 서로 다른 값이 나오는 현상)
- *Non-Repeatable Read가 발생할 수 있음
- Repeatable - Read :
- 트랜잭션 범위 내에서 조회한 내용이 항상 동일함을 보장한다.
- *Phantom Read 가 발생할 수 있음
- 트랜잭션 범위 내에서 조회한 내용이 항상 동일함을 보장한다.
- Serializable :
- 한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서 접근 불가 ACID 성질을 엄격하게 보장한다. 다만 성능은 가장 떨어진다.
'TIL' 카테고리의 다른 글
항해99_TIL220607 (클린코드) (0) | 2022.06.07 |
---|---|
항해99_WIL220605 (ORM, SQL, MVC) (0) | 2022.06.05 |
항해99_TIL220603 (배열 저장) (0) | 2022.06.03 |
항해99_TIL220602 (테스트 코드) (0) | 2022.06.02 |
항해99_TIL220601 (연관관계 매핑) (0) | 2022.06.02 |