[2024.05.24 TIL] 내일배움캠프 28일차 (트랜젝션)

My_Code·2024년 5월 26일
0

TIL

목록 보기
36/113
post-thumbnail

본 내용은 내일배움캠프에서 활동한 내용을 기록한 글입니다.


💻 TIL(Today I Learned)

📌 Today I Done

✏️ 트랜젝션(Transaction)이란?

  • 트랜젝션작업의 완전성을 보장해주기 위해 사용되는 개념

  • 특정 작업을 전부 처리하거나, 전부 실패하게 만들어 데이터의 일관성을 보장해주는 기능


✏️ 트랜젝션을 사용하는 이유

  • 트랜젝션을 이용해 다양한 문제를 해결할 수 있음

    1. A 고객의 계좌에서 1,000원을 차감
    2. B 고객의 계좌에서 1,000원을 추가
  • 만약 1번 작업이후 2번 작업이 실행되던 중에 에러가 발생하면 A 고객의 계좌에서 1,000원이 차감되기만 하는 문제가 발생함

  • 그렇기에 이러한 부분 업데이트에서 발생하는 문제를 방지하기 위해 트랜젝션이라는 개념을 사용함

  • 즉, 데이터의 일관성을 유지해야하는 다양한 상황에서 사용됨


✏️ 트랜젝션의 특징(ACID)

  • 트랜젝션의 특징(ACID)은 데이터베이스 트랜젝션이 안전하게 수행되도록 보장하기 위한 특징들을 나열해 놓은 개념

  • ACID는 트랜젝션의 4가지 특성을 의미

    • 원자성(Atomicity)
    • 일관성(Consistency)
    • 독립성(Isolation)
    • 지속성(Durability)

✏️ 원자성(Atomicity)

  • Atomicity(원자성)은 트랜젝션이 데이터베이스에 완전히 반영되거나 전혀 반영되지 않아야 한다는 속성

  • 동시에 실행해야 하는 여러 개의 쿼리를 묶어서 관리

  • 비즈니스 로직을 전체적으로 관리할 수 있음


✏️ 일관성(Consistency)

  • Consistency(일관성)트랜젝션 완료 후 데이터베이스가 일관성 있는 상태를 유지해야 한다는 속성

  • 즉, 트랜젝션 내의 데이터가 일관되어야 하고, 에러가 발생하더라도 데이터의 상태가 일관성을 유지해야 한다는 의미

  • 작업이 실패하더라도 작업을 진행하던 도중 실패한 상태로 데이터를 방치하지 않고 트랜젝션 시작 전 상태로 복구


✏️ 독립성(Isolation)

  • Isolation(독립성)은 동시에 실행되는 트랜젝션들이 서로 독립적으로 수행해야 한다는 속성

  • 트랜젝션이 실행 중인 경우 다른 트랜젝션에 의해 데이터가 변경되는 것을 방지

  • 완전히 수행되거나 완전히 수행되지 않은 상태를 외부에서 참조할 수 있지만, 트랜젝션의 중간 과정이나 중간 결과를 볼 수 없도록 함

  • 즉, 사용중인 데이터베이스의 데이터에 대해서는 락(Lock)을 통해 다른 클라이언트가 읽거나 사용할 수 없도록 방지하여, 데이터의 무결성을 보장


✏️ 지속성(Durability)

  • Durability(지속성)은 트랜젝션 완료 후 그 결과는 영구적으로 데이터베이스에 저장되어야 한다는 속성

  • 트랜젝션이 성공적으로 커밋된 후, 해당 트랜젝션에 의해 생성 또는 수정된 데이터는 어떠한 상황에도 보존됨

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


✏️ MySQL의 트랜잭션

  • MySQL 트랜젝션 문법
-- 트랜잭션을 시작합니다.
START TRANSACTION;

-- 성공시 작업 내역을 DB에 반영합니다.
COMMIT;

-- 실패시 START TRANSACTION이 실행되기 전 상태로 작업 내역을 취소합니다.
ROLLBACK;
  • MySQL 트랜젝션 예제
-- 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)

  • 트랜젝션의 격리 수준(Isolation Level)은 여러 트랜젝션이 동시에 처리될 때 다른 트랜젝션에서 변경 및 조회하는 데이터를 읽을 수 있도록 허용하거나 거부하는 결정하기 위해 사용하는 것

  • READ UNCOMMITTED

    • 가장 낙은 수준의 격리 수준, 락을 걸지 않아 동시성이 높지만 일관성이 쉽게 깨질 수 있음
  • READ COMMITTED

    • 다른 트랜젝션이 데이터를 수정하고 있는 중에는 데이터를 읽을 수 없어 커밋되지 않은 읽기 현상이 발생하지 않음
  • REPEATABLE READ

    • 읽기를 마치더라도 공유락을 풀지 않으며, 트랜젝이 완전히 종료될 때까지 락을 유지
  • SERIALIZABLE

    • 가장 높은 수준의 격리 수준, 데이터를 읽는 동안 다른 트랜젝션이 해당 데이터를 읽거나 삽입할 수 없고, 새로운 데이터를 추가하는 것도 불가


📌 Tomorrow's Goal

✏️ 개인 과제 진행

  • 강의 시청 및 정리가 끝났기에 개인 과제 진행

  • 강의에서 진행한 프로젝트 기반으로 각종 미들웨어 및 API 구현하기



📌 Today's Goal I Done

✔️ 노드 숙련 강의 시청하기

  • 예비군으로 밀린 강의를 시청함

  • 원래는 2주차를 오늘 안에 다 시청하려고 했으나, 생각보다 내용이 어려웠음

  • 완전히 막힌다기 보다는 내용이 어려워서 검색하면서 이해하느라 진행이 느렸음

  • 주말을 이용해서 결국 강의 시청 완료함


profile
조금씩 정리하자!!!

0개의 댓글