Transaction
정의
데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 말합니다.
트랜잭션은 꼭 여러 개의 변경 작업을 수행하는 쿼리가 조합되었을 때만 의미있는 개념은 아닙니다.
트랜잭션은 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100% 적용 되거나 (Commit을 실행했을 때) 또는 아무것도 적용되지 않아야 (Rollback 또는 트랜잭션을 Rollback시키는 오류가 발생했을 때) 함을 보장해주는 것입니다.
그럼 언제 트랜잭션을 사용해야 할까요?
여러 쿼리가 일련의 과정을 통해 묶음으로 데이터베이스의 상태값을 변경해야 할 때, 전부 성공하거나 전부 실패해야 하기 때문에 트랜잭션을 사용합니다.
예를 들면, A라는 사람이 B에게 100만원을 입금하는 과정에서 오류가 발생하였습니다.
오류가 발생했기 때문에 B에게 100만원이 입금되지 못했는데, A의 계좌에서 100만원이 사라졌습니다.
이런 경우가 발생하면 절대 안되기 때문에 트랜잭션을 사용해야 합니다.
트랜잭션의 특징
ACID
Atomicity (원자성)
트랜잭션의 모든 연산들이 정상적으로 수행 완료 되거나 어떠한 연산도 수행되지 않은 상태를 보장
Consistency (일관성)
트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스의 상태로 유지되어야 합니다.
예를 들면, 계좌이체를 성공적으로 실행했다면 A계좌의 잔액과 B계좌의 잔액 합이 트랜잭션 실행 전의 합과 동일해야 합니다.
Isolation (고립성)
하나의 트랜잭션이 실행하는 도중 변경한 데이터는 이 트랜잭션이 완료할 때까지 다른 트랜잭션이 참조하지 못하게 하는 특성입니다. 하나의 트랜잭션이 A계좌에서 작업을 하고 있다면, 다른 트랜잭션이 A계좌에 참조하거나 관여할 수 없고 작업이 끝날때까지 대기해야 합니다.
Durability (영속성)
트랜잭션이 성공적으로 완료되어 커밋되고 나면, 해당 트랜잭션에 의한 모든 변경은 향후에 어떤 소프트웨어나 하드웨어의 장애가 발생해도 보존되어야 한다.
참고
'Interview' 카테고리의 다른 글
추상클래스와 인터페이스 (0) | 2019.12.09 |
---|---|
객체 지향이란? (3) | 2019.06.20 |
댓글