Skip to main content

트랜잭션

시작하기에 앞서

주의

해당 블로그의 모든 문서는 학습한 내용을 제 방식으로 정리하여 작성하고 있습니다.
순수 창작물도 아니고, 틀린 내용이 있을 수 있으므로 참고하고 읽어주시면 감사하겠습니다.


트랜잭션

트랜잭션은 데이터베이스 내에서 수행되는 작업의 최소 단위를 의미합니다. 자주 사용되는 은행 거래로 예시를 들어보겠습니다. 올라프가 엘사에게 만원을 빌렸고, 갚고있는 시나리오로를 생각해 보겠습니다. 그러면 올라프의 통장에서는 -10,000원의 연산이 수행될 것이고, 엘사의 통장에서는 +10,000원의 연산이 수행될 것입니다.

  • (A) 올라프 통장에서 -10,000원 연산 수행 (성공)
  • (B) 엘사 통장에서 +10,000원 연산 수행 (성공)
  • 데이터베이스에 A와 B 모두 정상적으로 반영

그런데 만약 이 과정에서 전산오류가 발생해서 두 개의 연산 중 하나라도 실패했을 경우를 생각해 보겠습니다. 올라프의 통장에서는 -10,000원의 연산이 정상적으로 수행되었지만, 모종의 이유로 엘사의 통장에서는 +10,000원의 연산이 수행되지 않은 것입니다.

  • (A) 올라프 통장에서 -10,000원 연산 수행 (성공)
  • (B) 엘사 통장에서 +10,000원 연산 수행 (실패)
  • A는 데이터베이스에 반영되었지만 B는 반영되지 않음

즉, 올라프의 통장에서는 돈이 빠져나갔지만, 엘사의 통장에는 입금이 되지 않은 것이지요. 반대의 경우도 문제가 됩니다. 올라프의 통장에서는 돈이 빠져나가지 않았지만, 엘사의 통장에는 정상적으로 돈이 입금된다면 이 역시도 문제가 될 것입니다.

이런 경우에 올라프 통장에서의 -10,000원의 연산과 엘사 통장에서의 +10,000원의 연산을 하나의 작업 단위, 즉 트랜잭션으로 묶을 수 있습니다. 트랜잭션으로 묶인 연산은 하나라도 실패하면 데이터베이스에 반영되지 않습니다. 전부 수행되거나 전부 수행되지 말아야한다는 특성인데 이를 원자성이라고 합니다.

  • (A) 올라프 통장에서 -10,000원 연산 수행 (성공)
  • (B) 엘사 통장에서 +10,000원 연산 수행 (실패)
  • B가 실패했으므로 A와 B 모두 데이터베이스에 반영되지 않음