기술면접 대비 - 트랜잭션(Transaction)
오늘은 트랜잭션에 대해서 알아보고자 한다.
트랜잭션(Transaction)
트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다.
데이터베이스에 접근하는 방법은 쿼리(Query)이므로, 즉 여러 개의 쿼리들을 하나로 묶는 단위를 말한다.
트랜잭션의 특징으로는 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durabiltiy)이 있으며 통칭 ACID 특징이라 한다.
ACID 트랜잭션은 데이터의 무결성을 보장한다.
데이터의 무결성
데이터의 정확성, 일관성, 유효성을 유지하는 것을 말한다.
데이터의 무결성이 보장되어야 데이터의 중복, 누락, 잘못된 논리 관계로 인한 문제 등이 발생하지 않는다.
원자성(Atomicity)
All or Nothing
원자성은 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징이다.
예를 들어 트랜잭션을 커밋(Commit)했는데, 문제가 발생하여 롤백(Rollback)하는 경우 그 이후에 모두 수행되지 않음을 보장하는 것을 말한다.
예를 들어 1000만 원을 가진 A씨가 0원을 가진 B씨에게 500만 원을 이체한다고 해보자.
정상적인 결과로는 A씨와 B씨 모두 각각 500만 원을 가지게 될 것이다.
해당 결과는 다음과 같은 Operation 단위들로 이루어진 과정을 거치게 된다.
1. A씨의 잔고를 조회한다.
2. A씨의 계좌에서 500만 원을 뺀다.
3. B씨의 계좌에 500만 원을 넣는다.
만약 이 작업을 '취소'한다 가정할 때, A씨는 다시 1000만 원을, B씨는 0원을 가져야 한다.
일부의 Operation만 적용된 상태(ex, A씨 500만 원 / B씨 0원)는 되지 않는 것을 의미한다.
커밋(Commit)과 롤백(Rollbcak)
커밋은 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어이다.
트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장되는 것을 의미한다.
"커밋이 수행되었다."를 "하나의 트랜잭션이 성공적으로 수행되었다."라고도 한다.
롤백이란 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 일(취소)을 말한다.
롤백은 에러나 여러 이슈 때문에 트랜잭션 전으로 돌려야 할 경우 사용한다.
커밋과 롤백 덕에 데이터의 무결성이 보장된다.
일관성(Consistency)
일관성은 트랜잭션 수행 후에도 일관성 있는 데이터를 유지해야 한다는 것을 의미한다.
데이터베이스에 기록된 모든 데이터는 여러 조건, 규칙에 따라 유효함을 가져야 한다.
A씨가 1000만 원, B씨는 0원의 잔고를 가지고 있는 상태에서 B씨가 C씨에게 500만 원을 입금하는 것은 불가능하다.
격리성(Isolation)
트랜잭션 수행 시 서로 끼어들지 못하는 것을 말한다.
지속성(Durability)
지속성은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미한다.
이는 데이터베이스에 시스템 장애가 발생하더라도 원래 상태로 복구하는 회복 기능이 있어야 함을 뜻한다.
데이터베이스는 이를 위해 롤백등의 기능을 제공한다.
Reference
'🖥CS > 기술면접대비🔎' 카테고리의 다른 글
조인의 종류 (1) | 2023.01.05 |
---|---|
인덱스 (0) | 2023.01.04 |
ERD와 정규화 과정 (0) | 2022.12.29 |
http와 https (2) | 2022.12.02 |
[Java] static, final, staic final 차이 (0) | 2022.11.17 |