Today I Learned
트랜잭션이란 작업의 완전성을 보장해주기 위해 사용되는 개념이다. 특정한 작업을 전부 처리하거나, 전부 실패하게 만들어 데이터의 일관성을 보장해준다. 작업의 단위를 하나의 쿼리에 종속하는것이 아닌, 여러개의 작업(쿼리)을 묶어 하나의 작업단위로 그룹화하여 처리하는 작업을 뜻한다.
대부분의 데이터베이스가 트랜잭션의 특징을 이용하고 있으며, MySQL뿐 아니라 AWS dynamoDB, MongoDB, CockroachDB 등 다양한 데이터베이스에서도 트랜잭션의 개념을 확인 할 수있다.
1) A 고객의 계좌에서 1000원을 차감한다.
2) B 고객의 계좌에 1000원을 추가한다.
다음과 같은 기능은 반드시 트랜잭션이 필요하다. 만약 1번과정 후 2번 과정에서 오류가 발생했다면, A 고객의 계좌에서 1000원이 차감되기만 하는 문제점이 생길 수 있다.(사라진 천원..!!!)
단순히 위와 같은 상황 외에도 작업한 내역을 저장하는 로깅작업, 영화 예매시스템, 은행의 결제 시스템 등 데이터의 일관성을 유지해야하는 다양한 상황에서 사용하게 된다.
트랜잭션의 특징(ACID)은 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 특징들을 나열한 것이다.
- 원자성(Atomicity: 트랜잭션 내에서 실행되는 명령들을 하나의 묶음으로 처리해 내부에서 실행된 명령들이 전부 성공하거나, 아니면 실패해야한다는 특징. => "원자성" 이란, 나눠질 수 없는 단일 작업을 뜻함
- 일관성(Consistencty): 트랜잭션 내에서 처리되는 데이터의 일관성을 유지해야하는 특성. 에러가 발생할시 트랜잭션 시작 전 상태로 RollBack 된다.
- 격리성(Isoloation): 트랜잭션이 실행 중인 경우 다른 트랜잭션에 의해 데이터가 변경되는것을 방지한다. 완전히 수행되거나 완전히 수행되지 않은 상태를 외부에서 참조는 할수있으나 트랜잭션의 중간과정이나 중간결과를 볼 수 없도록 하는것. MySQL에서는 사용중인 DB 오브젝트에 Lock을 걸어 격리성을 구현함. => 동시성과 격리수준
- 지속성(Durability): 트랜잭션이 성공적으로 커밋된 후, 해당 트랜잭션에 의해 생성 또는 수정된 데이터가 어떠한 상황에서도 보존되는 특징. 트랜잭션이 완료되면 결과는 데이터베이스에 영구적으로 저장되며, 이후 시스템에 어떠한 문제가 생기더라도 데이터는 손상되지 않음.
'TIL' 카테고리의 다른 글
TIL #20) 객체 지향 프로그램 (0) | 2024.02.19 |
---|---|
TIL #19) 객체 지향 설계 5원칙(SOLID) (0) | 2024.02.16 |
TIL #17) ORM, Prisma 파먹기 (0) | 2024.01.27 |
TIL #16) CPU 구성요소 (0) | 2024.01.26 |
TIL #15) SQL 외래키 제약조건 (1) | 2024.01.24 |