트랜잭션은 무엇일까?

권태형·2023년 3월 6일
0

지식정리

목록 보기
20/72
post-thumbnail

트랜잭션(Transaction)이란?

트랜젝션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다.

DB에 접근하는 방법은 쿼리이므로, 즉 여러 개의 쿼리들을 하나로 묶는 단위라고도 할 수 있다.

우리가 DB에 접근하는 쿼리가 동작할 때 여러가지 특징을 보이는데, 이것이 트랜잭션의 특징이다.

트랜잭션의 특징

트랜잭션은 원자성, 일관성, 격리성, 지속성 이렇게 4가지의 특징을 가진다.

원자성(Atomicity)

트래잭션은 작업의 논리적인 단위로서, 작업 내용이 모두 완료되거나, 모두 취소되어야 한다.

즉, 트랜잭션 내의 작업 중 하나라도 실패하게 된다면, 그 트랜잭션에서 실패 이전에 성공한 부분 또한 모두 실패로 처리되어 트랜잭션 내의 모든 작업이 실패로 되어야 하고, 이에 따라 성공한 부분은 다시 원래대로 롤백 되어야한다.

만약 하나의 트랜잭션(T)이 A-B-C의 동작을 한다고 하자. 이는 쿼리의 묶음인데, A는 성공하고 B에서 실패한다면 우리가 자주 접해왔듯이 오류가 날것이다. 이때 DB에 A가 반영 되는가? 우리는 아니라는 것을 이미 경험을 통해 알고 있을 것이다.

일관성(Consistency)

트랜잭션이 완료된 후에도 데이터베이스의 상태는 일관성을 유지해야 한다.

즉, 트랜잭션이 실행되기 전과 실행된 후의 데이터베이스의 상태가 일치해야 한다. 그렇다면 상태를 일치시키려면 어떻게 해야 될까? 데이터 베이스에 기록된 모든 데이터는 여러 가지 조건과 규칙. 즉, '허용된 방식'으로만 데이터를 변경하여 유효성을 가여댜 한다.

격리성(Isolation)

하나의 트랜잭션은 다른 트랜잭션의 작업에 영향을 받지 않는다.

즉, 트랜잭션이 동작을 수행하면서 서로 끼어들지 못하는 것을 말한다. 트랜잭션은 독립적으로 실행되어야 하며, 다른 트랜잭션의 변경 작업은 해당 트랜잭션이 완료될 때까지 반영되지 않는다. 만약 복수 병렬 트랜잭션이라도 동시 수행처럼 보일 수있지만, 서로 격리되어 마치 순차적으로 실행 되는 것처러므 작동되어야 하고, DB는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다.

지속성(Durability)

성공적으로 수행된 트랜잭션은 영원히 반영되어야하고 그 결과가 유지되어야 한다.

즉, 트랜잭션의 결과는 데이터베이스에 영구적으로 저장되어야 한다. 생각해보라 DB에 성공적으로 변경 저장된 데이터가 일부 오류로 인하여 다른 데이터로 변경되거나, 트랜잭션의 결과와 상관없이 변경된다면, 객관적인 데이터를 만들 수 없을 것이며, 우리는 일관성을 지키지 못한 데이터를 저장 하는 이유도 없어질 것이다.


트랜잭션이 사용되는 상황

  1. 하나 이상의 데이터베이스 테이블에서 데이터를 변경해야 할 때

  2. 여러 개의 쿼리가 실행되는데, 이 중 하나라도 실패하면 모두 취소해야 할 때

  3. 하나의 쿼리가 실행되는 도중 다른 사용자가 해당 데이터를 변경하면 문제가 발생할 가능성이 있을 때


참고자료(출처)
면접을 위한 CS전공지식 노트(도서)
ACID 트랜잭션

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글