[Database] 트랜잭션과 ACID 원칙에 대해 정리해보자

2025. 3. 10. 15:44·공부하기/Database

Transcation 개념  

▶︎ 정의

사용자 관점에서 트랜잭션은, 데이터베이스에서 수행되는 작업의 논리적 단위이다. 

예를 들어 ``내 계좌로의 입급``, ``다른 계좌로의 출금`` 등이 있겠다.

 

그렇다면 개발자 관점에서 트랜잭션은? 작업의 동시성 제어, 그리고 회복의 단위라고 말할 수 있다.

여러 개의 쿼리문이 모여 하나의 트랜잭션을 이룬다.

▶︎ 주요 명령어

BEGIN, ROLLBACK, COMMIT 이 있다.

☑️ BEGIN / START

트랜잭션의 시작을 선언한다.

☑️ ROLLBACK

트랜잭션의 중단을 선언한다. 모든 변경 사항을 되돌려 원래 상태로 복구한다.

  • 트랜잭션이 시작(BEGIN)되기 전으로 데이터가 복구된다.
✓ SAVEPOINT (선택적 롤백)
트랜잭션 내에서 save point를 지정하여 특정 시점까지만 롤백할 수 있다.

☑️ COMMIT

트랜잭션의 완료를 선언한다. 변경된 데이터를 데이터베이스에 영구적으로 저장한다.

  • 트랜잭션 결과로 변경된 데이터가 확정되어, 다른 트랜잭션에서도 변경 사항을 볼 수 있게 된다.

Transcation의 원칙

흔히 ACID라고 잘 알려져 있는 트랜잭션의 원칙에 대해 알아보자. 모든 트랜잭션은 아래 원칙들을 보장하여야 한다.

▶︎ Atomicity, 원자성

All or Nothing.

트랜잭션을 이루는 쿼리문들이 모두 반영되거나, 모두 취소되어야 한다.

ex) 중간에 장애가 발생할 경우, 전체가 취소되어야 한다.

▶︎ Consistency, 일관성

트랜잭션 전후로 데이터베이스의 무결성이 유지되어야 한다.

ex) A가 50만원을 B의 계좌로 이체했다면, A의 계좌에서 정확히 50만원이 빠지고 B의 계좌에 정확히 50만원이 추가되어야 한다.

▶︎ Isolation, 고립성

동시에 실행되는 트랜잭션들이 서로 간섭하지 않도록 보장하여, 각 트랜잭션이 순차적으로 실행되는 것처럼 보여야 한다.

즉, 한 트랜잭션이 완료되기 전에는 그 변경사항을 다른 트랜잭션이 볼 수 없도록 한다.

  • 제대로 보장되지 않는다면 데이터 불일치 문제가 발생한다. (ex. Dirty Read, Unrepeatable Read, Phantom Read, ...)
  • ``동시성 제어(Concurrency Control)``를 통해 고립성을 보장한다.

▶︎ Durability, 영속성

성공적으로 완료된 트랜잭션의 결과는 데이터베이스에 영구적으로 반영되어야 한다.

 

 


 

저작자표시 비영리 변경금지 (새창열림)

'공부하기 > Database' 카테고리의 다른 글

Redis에 대해 정리해보자  (0) 2025.03.05
[MySQL] DATE 데이터 다루기  (2) 2025.01.16
SQL 기본 문법 복기 (2)  (3) 2024.12.27
SQL 기본 문법 복기 (1)  (0) 2024.12.26
'공부하기/Database' 카테고리의 다른 글
  • Redis에 대해 정리해보자
  • [MySQL] DATE 데이터 다루기
  • SQL 기본 문법 복기 (2)
  • SQL 기본 문법 복기 (1)
다섯자두
다섯자두
All I need is 💻 , ☕️ and a dash of luck
  • 다섯자두
    subbni
    다섯자두
  • 전체
    오늘
    어제
    • 전체 글 (89)
      • 개발 이야기 (0)
      • 만들어보기 (17)
        • FromBookToBook (5)
        • Spring (5)
        • Node.js & React (3)
        • TroubleShooting (4)
      • 공부하기 (72)
        • Network (3)
        • Cloud (1)
        • Database (5)
        • Java (13)
        • Javascript (0)
        • Spring (9)
        • React (18)
        • Algorithm (8)
        • 자료구조 (7)
        • ETC (8)
      • 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • velog
  • 공지사항

  • 인기 글

  • 태그

    aws
    자료구조
    Database
    java
    로그인
    프로젝트
    SQL
    outbox 패턴
    mysql
    network
    SQS
    서명알고리즘
    알고리즘
    pdf 자동 다운로드
    알림 기능
    redis
    JPA
    오블완
    티스토리챌린지
    실시간 데이터 전송 기술
    재시도 로직
    pdf 프리뷰 실패
    최단거리
    outbox
    SSE
    Til
    HTTP
    Express
    Spring
    springboot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
다섯자두
[Database] 트랜잭션과 ACID 원칙에 대해 정리해보자
상단으로

티스토리툴바