[TIL] 트랜잭션

sooyoung choi·2023년 11월 29일
1

Javascript, Node.js

목록 보기
28/37
post-thumbnail

트랜잭션

  • 작업의 완전성을 보장해주기 위해 사용되는 개념
  • 특정 작업 전부 처리하거나, 전부 실패하게 만들어 데이터의 일관성을 보장해주는 기능
  • 사용하는 대표적인 이유는 작업의 단위를 하나의 쿼리에 종속하는 것이 아닌
    , 여러개의 작업(쿼리)을 묶어 하나의 작업 단위로 그룹화하여 처리하는 작업을 뜻한다.
  • 사용자가 항상 어플리케이션 실행을 완료하도록 구성할 수 있게되고, 실행을 중단할 만한 치명적인 오류가 발생하더라도, DB에 피해가 가지않아 더욱 안전하게 어플리케이션을 구성할 수 있게 된다.


트랜잭션의 특징(ACID)

트랜잭션의 특징(ACID)

  1. 원자성(Atomicity)
  • 명령들을 하나의 묶음으로 처리하여, 내부에서 실행된 명령들이 전부 성공하거나, 아니면 모두 실패해야한다는 특징 -> “원자성”이란, 나눠질 수 없는 단일 작업이라는 것을 의미
  1. 일관성(Consistency)
  • 트랜잭션 내부에서 처리되는 데이터의 일관성을 유지해야하는 특징
  • 만약 작업이 성공할 경우 아무런 문제가 발생하지 않고, 실패하더라도 작업을 진행하던 도중 실패한 상태로 데이터를 방치하지 않는다.
  • 트랜잭션 내의 데이터는 일관되어야하며, 에러가 발생하더라도 데이터의 상태가 일관성을 유지해야 한다.
  1. 격리성(Isolation)
  • 트랜잭션이 실행 중인 경우 다른 트랜잭션에 의해 데이터가 변경되는 것을 방지하는 특징
  • 트랜잭션이 완전히 수행되거나 완전히 수행되지 않은 상태를 외부에서 참조할 수는 있지만, 트랜잭션의 중간 과정이나 중간 결과를 볼 수 없도록 한다.
  1. 지속성(Durability)
  • 트랜잭션이 성공적으로 커밋된 후, 해당 트랜잭션에 의해 생성 또는 수정된 데이터가 어떠한 상황에서도 보존되는 특징

  • 트랜잭션이 완료되면 결과는 데이터베이스에 영구적으로 저장되며, 이후 시스템에 어떠한 문제가 생기더라도 데이터는 손상되지 않는다.

  • 트랜잭션의 안전성을 보장하며, 데이터 손실 없이 시스템의 안정성을 유지하는데 중요한 역할을 담당



트랜잭션이 성공적으로 완료되면, 해당 트랜잭션에 의해 생성 또는 변경된 데이터는 데이터베이스에 COMMIT 명령을 통해 영구적으로 저장된다.
하지만, 트랜잭션 수행 도중 시스템이 비정상 종료되더라도, 시스템은 트랜잭션 로그(Transaction Log)를 통해 아직 커밋되지 않은 트랜잭션을 복구할 수 있다.

-- SPARTA 테이블을 생성합니다.
CREATE TABLE IF NOT EXISTS SPARTA
(
    spartaId      INT(11)      NOT NULL PRIMARY KEY AUTO_INCREMENT,
    spartaName    VARCHAR(255) NOT NULL,
    spartaAddress VARCHAR(255) NOT NULL
);

-- 1번째 트랜잭션을 실행합니다.
START TRANSACTION;

-- SPARTA 테이블에 더미 데이터 3개를 삽입합니다.
INSERT INTO SPARTA (spartaName, spartaAddress)
VALUES ('SPARTA1', 'SEOUL'),
       ('SPARTA2', 'BUSAN'),
       ('SPARTA3', 'DAEGU');

-- 1번째 트랜잭션을 DB에 적용합니다.
COMMIT;


-- 2번째 트랜잭션을 실행합니다.
START TRANSACTION;

-- SPARTA 테이블에 더미 데이터 3개를 삽입합니다.
INSERT INTO SPARTA (spartaName, spartaAddress)
VALUES ('SPARTA4', 'SEOUL'),
       ('SPARTA5', 'BUSAN'),
       ('SPARTA6', 'DAEGU');

-- 2번째 트랜잭션을 롤백합니다.
ROLLBACK;

-- 테이블의 상태를 확인합니다.
SELECT * FROM SPARTA;


참고자료: 스파르타 코딩클럽 노드 숙련주차 강의

2개의 댓글

comment-user-thumbnail
2023년 12월 1일

정보 감사합니다😊

1개의 답글