본 내용은 내일배움캠프에서 활동한 내용을 기록한 글입니다.
트랜젝션은 작업의 완전성을 보장해주기 위해 사용되는 개념
특정 작업을 전부 처리하거나, 전부 실패하게 만들어 데이터의 일관성을 보장해주는 기능
트랜젝션을 이용해 다양한 문제를 해결할 수 있음
만약 1번 작업이후 2번 작업이 실행되던 중에 에러가 발생하면 A 고객의 계좌에서 1,000원이 차감되기만 하는 문제가 발생함
그렇기에 이러한 부분 업데이트에서 발생하는 문제를 방지하기 위해 트랜젝션이라는 개념을 사용함
즉, 데이터의 일관성을 유지해야하는 다양한 상황에서 사용됨
트랜젝션의 특징(ACID)은 데이터베이스 트랜젝션이 안전하게 수행되도록 보장하기 위한 특징들을 나열해 놓은 개념
ACID는 트랜젝션의 4가지 특성을 의미
Atomicity(원자성)은 트랜젝션이 데이터베이스에 완전히 반영되거나 전혀 반영되지 않아야 한다는 속성
동시에 실행해야 하는 여러 개의 쿼리를 묶어서 관리
비즈니스 로직을 전체적으로 관리할 수 있음
Consistency(일관성)은 트랜젝션 완료 후 데이터베이스가 일관성 있는 상태를 유지해야 한다는 속성
즉, 트랜젝션 내의 데이터가 일관되어야 하고, 에러가 발생하더라도 데이터의 상태가 일관성을 유지해야 한다는 의미
작업이 실패하더라도 작업을 진행하던 도중 실패한 상태로 데이터를 방치하지 않고 트랜젝션 시작 전 상태로 복구함
Isolation(독립성)은 동시에 실행되는 트랜젝션들이 서로 독립적으로 수행해야 한다는 속성
트랜젝션이 실행 중인 경우 다른 트랜젝션에 의해 데이터가 변경되는 것을 방지
완전히 수행되거나 완전히 수행되지 않은 상태를 외부에서 참조할 수 있지만, 트랜젝션의 중간 과정이나 중간 결과를 볼 수 없도록 함
즉, 사용중인 데이터베이스의 데이터에 대해서는 락(Lock)을 통해 다른 클라이언트가 읽거나 사용할 수 없도록 방지하여, 데이터의 무결성을 보장함
Durability(지속성)은 트랜젝션 완료 후 그 결과는 영구적으로 데이터베이스에 저장되어야 한다는 속성
트랜젝션이 성공적으로 커밋된 후, 해당 트랜젝션에 의해 생성 또는 수정된 데이터는 어떠한 상황에도 보존됨
트랜젝션의 안전성을 보장하며, 데이터 손실 없이 시스템의 안전성을 유지하는데 중요한 역할을 함
-- 트랜잭션을 시작합니다.
START TRANSACTION;
-- 성공시 작업 내역을 DB에 반영합니다.
COMMIT;
-- 실패시 START TRANSACTION이 실행되기 전 상태로 작업 내역을 취소합니다.
ROLLBACK;
-- 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;
트랜젝션의 격리 수준(Isolation Level)은 여러 트랜젝션이 동시에 처리될 때 다른 트랜젝션에서 변경 및 조회하는 데이터를 읽을 수 있도록 허용하거나 거부하는 결정하기 위해 사용하는 것
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
강의 시청 및 정리가 끝났기에 개인 과제 진행
강의에서 진행한 프로젝트 기반으로 각종 미들웨어 및 API 구현하기
예비군으로 밀린 강의를 시청함
원래는 2주차를 오늘 안에 다 시청하려고 했으나, 생각보다 내용이 어려웠음
완전히 막힌다기 보다는 내용이 어려워서 검색하면서 이해하느라 진행이 느렸음
주말을 이용해서 결국 강의 시청 완료함