ABOUT
home
무료 콘텐츠
home
1️⃣

Transaction을 설명해 주세요.

[핵심 답변]
transaction는 데이터베이스 내에서 수행되는 작업의 최소 단위로, 데이터베이스의 무결성을 유지하며 DB의 상태를 변화시키는 기능을 수행합니다. transaction은 하나 이상의 query를 포함해야 하고, ACID라고 칭해지는 원자성, 일관성, 고립성, 지속성의 4가지 규칙을 만족해야합니다.
[면접  TIP]
데이터베이스 면접질문에서 Index다음으로 가장 자주 나오는 질문이 Transaction과 Deadlock 입니다. 데이터베이스의 transaction이 안전하게 수행된다는 것을 보장하기 위한 성질 4가지 ACID를 종종 물어봅니다. Transaction에 대한 설명과 ACID가 무엇을 뜻하는지를 정확하게 이해하고 가시면 됩니다.

Transaction

은행 시스템에서 A가 100만원을 출금해서 B에게 입금하는 상황을 생각해 보겠습니다. A의 잔고에서 100만원을 출금하였는데, 이 때 전산오류가 생겨서 B의 계좌에는 100만원이 입금 되지 않았습니다. 이런 상황은 전산시스템의 치명적인 오류입니다. 이렇게 예상치 못하게 오류가 발생하여 하여 데이터의 부정합이 발생하는 경우, 다시 원상복귀 해야합니다. 따라서 모든 입출금은 하나의 묶음 형태로 작동해야 합니다. 출금을 했으면 입금을 마치던지 아니면 아예 없던 일이 되어야 합니다. 이런 식으로 두 행위는 분리될 수 없는 하나의 거래로 처리돼야 하는 단일 업무 입니다. 이러한 업무 처리의 최소 단위를 데이터베이스에서는 transaction이라고 합니다.
데이터베이스에서 Transaction이 필요한 이유는 데이터를 다룰 때 장애가 일어나는 경우 transaction은 장애 발생시 데이터를 복구하는 작업의 단위가 되기 때문입니다. 또한 데이터베이스에서 여러 작업이 동시에 같은 데이터를 다룰 때가 있습니다. transaction을 통해 이 작업을 서로 분리하고, 이를 통해 오류가 발생하지 않게 합니다. DBMS는 transaction이 이러한 규칙을 유지하도록 지원합니다.
START TRANSACTION // (1) A 계좌 잔액 가져옴 A = 1000 // (2) B 계좌 잔액 가져옴 B = 1000 // (3) A 출금 A = A - 100 // (4) B 입금 B = B + 100 UPDATE Customer SET balance = balance - 100 WHERE name='A'; UPDATE Customer SET balance = balance + 100 WHERE name='B'; //COMMIT // (5) A 계좌 잔액 저장 A = 900 // (6) B 계좌 잔액 저장 B = 1100 COMMIT
SQL
복사

ACID

트랜잭션은 데이터베이스의 무결성을 유지하기 위해 원자성, 일관성, 고립성, 지속성의 성질을 갖습니다.
Atomicity(원자성) : transaction에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 말아야 합니다.(all or nothing)
Consistency(일관성): transaction이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 송금 전후 모두 잔액의 data type은 integer이여야 한다는 것이 일관성의 한 예가 될 수 있습니다.
Isolation(고립성): 여러 Transaction은 동시에 수행됩니다. 이때 각 transaction은 다른 transaction의 연산 작업이 끼어들지 못하도록 보장하여 독립적으로 작업을 수행합니다. 따라서 동시에 수행되는 transaction이 동일한 data를 가지고 충돌하지 않도록 제어해줘야 합니다. 이를 동시성제어(concurrency control) 라고합니다.
Durability(지속성): 성공적으로 수행된 transaction은 데이터베이스에 영원히 반영되어야 함을 의미합니다. transaction이 완료되어 저장이 된 데이터베이스는 저장 후에 생기는 정전, 장애, 오류 등에 영향을 받지 않아야 합니다.

동시성 제어(concurrency control)

여러 개의 transaction이 한 개의 데이터를 동시에 갱신(update)할 때 어느 한 transaction의 갱신이 무효화 될 수 있는데 이를 갱신손실이라고 합니다. 동시성제어를 통해 갱신손실을 미리 막을 수 있습니다. 즉, transaction이 동시에 수행될 때 일관성을 해치지 않도록 transaction의 데이터 접근을 제어하는 DBMS의 기능을 동시성제어라고 합니다.
갱신손실 문제를 해결하기 위한 방법중에 하나로 데이터를 수정중에 있는 transaction은 해당 데이터를 Lock으로 잠금장치를 하여 다른 Transaction이 접근하지 못하게 하는 방법이 있습니다. Lock이 걸린 데이터는 Unlock이 될 때까지 다른 Transaction들은 접근하지 못하고 기다려야 합니다.
[꼬꼬무 문답]
Q. COMMIT과 ROLLBACK에 대해 설명해보세요.
Q. 원자성(일관성, 고립성, 지속성)이 뭔가요?