코드로 우주평화

트랜젝션이란? 본문

나는 이렇게 학습한다/DB

트랜젝션이란?

daco2020 2022. 3. 18. 21:51

트랜젝션은 무엇인가요?

트랜젝션은 데이터베이스에서 수행하는 작업의 최소 단위로 데이터베이스의 ‘무결성’을 유지합니다. 트랜젝션은 하나 의상의 쿼리를 포함하고 ACID라는 원자성, 일관성, 고립성, 지속성의 4가지 규칙을 만족해야합니다.

 

*무결성이란? 데이터의 일관성과 정확성을 지키는 것

 

 

원자성 Atomicity

: 트랜젝션은 all or nothing, 전부 수행되거나 아니면 전부 수행되지 않거나 둘 중 하나여야 합니다. 즉, 원자성은 더 이상 쪼개질 수 없는 최소의 작업 단위를 의미합니다.

 

 

일관성 Consistency

: 트랜젝션이 성공하면 언제나 일관성 있는 데이터베이스 상태를 유지해야함을 의미합니다.

ex. 두 잔액의 합이 변하는 경우, 숫자필드가 문자필드로 변하는 경우 일관성이 없다고 할 수 있다.

 

 

고립성 Isolation

: 여러 트랜젝션은 동시에 작업을 수행하는데 다른 트랜젝션의 작업에 끼어들지 않도록 독립적으로 작업을 수행하는 것을 의미합니다. 트랜젝션이 동일한 데이터를 가지고 충돌하지 않도록 제어해야하고 이를 ‘동시성 제어’라고 합니다.

 

*동시성 제어란? 여러 개의 트랜젝션이 한 개의 데이터를 동시에 갱신(업데이트)하면 어느 한 트랙젝션은 갱신이 무효화 됩니다.. 이를 갱신손실이라고 하며 동시성 제어는 갱신손실을 미리 막을 수 있습니다. 갱신손실을 막는 방법으로 lock을 걸어 다른 트랜젝션이 접근하지 못하도록 막을 수 있습니다.

 

*갱신손실이란? 후에 접근한 트랙젝션의 작업으로 직전 작업을 수행한 트랜젝션의 작업내용이 사라지는 현상입니다.

 

 

 

지속성 Durability

: 트랜젝션이 성공하면 그 내용은 데이터베이스에 영원히 반영되어야 하는 것을 의미합니다.

 

 


 

추가. commit과 rollback은 무엇인가요?

데이터베이스는 '커밋'과 '롤백' 명령어를 통해 데이터 무결성을 보장합니다.

'커밋'이란 트랜젝션 작업을 완료했음을 확정하는 명령어이고 실제 데이터베이스가 변경됩니다.

'롤백'은 트랜젝션 작업 중 문제가 발생했을 때, 도중에 작업한 변경사항을 취소하고 이전 커밋 상태로 되돌립니다.

 

 

 

추가. 데드락이란?

두 트랜잭션이 서로의 lock이 걸린 데이터에 접근하려고 할 때, 계속해서 대기하는 '교착상태'를 말합니다.

데드락을 해결하는 방법은 다음과 같습니다.

  1. 예방기법 : 각 트랜잭션이 실행되기 전에 필요한 데이터를 모두 locking하는 것입니다. (해당 트랜젝션의 모든 데이터를 locking하는 것) 하지만 locking 데이터가 많다면 트랜젝션의 병행성을 보장할 수 없게됩니다.
  2. 회피기법 : 자원을 할당할 때 time stamp를 사용하여 데드락을 회피하는 방법입니다. (타임스탬프 기준으로 동시성 제어를 하나 롤백 발생률이 높고 연쇄 복귀를 초래할 수 있음)
  3. 탐지/회복기법 : 데드락이 발생하면 이를 감지하고 회복시키는 방법입니다.