트랜잭션과 ACID

강준호·2024년 1월 29일
0

기술면접

목록 보기
7/9

트랜잭션과 ACID

ACID 원칙이란?

  • 데이터의 유효성을 보장하기 위한, 트랜젝션의 특징들!

Atomicity(원자성)

의미

  • All or nothing(전부 반영되거나, 아무것도 반영되지 않아야 한다.)

  • 원자성은 트랜잭션의 일부가 실패할 경우 전체 트랜잭션이 실패.

  • 데이터베이스 상태가 변경되지 않은 상태로 유지되도록 보장합니다.

  • 즉, 일부만 성공하는 상태는 존재해서는 안된다.

책 쇼핑 예시

  • 책 구매는 1. 책 비용을 지불. 2. 판매를 반영하도록 상점의 재고를 업데이트하는 2가지 단계.

  • 원자성은 이 두 단계가 함께 완료되도록 보장합니다.

  • 어떤 이유로 결제가 완료되었으나 재고 업데이트가 실패하는 경우(시스템이 충돌할 수 있음) 전체 거래가 전혀 발생하지 않은 것처럼 롤백됩니다. 즉, 계정에 비용이 청구되지 않으며 도서는 재고 목록에 그대로 남아 있습니다.

Consistency(일관성)

의미

  • 트랜잭션 이전과 이후에 데이터베이스는 항상 일관된 상태여야 한다는 규칙.

  • 데이터는 미리 정의된 규칙에서만 수정이 가능해야한다.

  • Ex) 숫자컬럼에 문자열값을 저장이 안되도록 보장해줍니다.

도서관 데이터베이스 관리 예시

  • If) 새 도서가 추가 => 전체 도서 수, 사용 가능한 도서 목록, 특정 카테고리의 도서 잔액 등 정보가 업데이트되어야한다.

  • 일관성은 새 책이 추가될 때마다 이러한 모든 업데이트가 도서관의 규칙을 준수하도록 보장합니다.

  • 업데이트의 일부가 이러한 규칙을 위반하는 경우 트랜잭션이 완료되지 않는다.

  • 대변 차변

  • Ex) 총량이 늘어나거나 하는 사고는 안돼

  • 데이터베이스를 어지럽히는건 안돼

Isolation(독립성)

의미

  • 여러 트랜잭션이 동시에 실행될 때에도, 혼자 실행되는 것처럼 동작하게 만들어야 한다.

  • 즉, 동시에 실행되는 여러 트랜잭션은 서로 영향을 주지 않고 독립적으로 실행되는 것처럼 보여야 한다. => 연속으로 실행된것과 동일한 결과

  • 격리성을 지키는 각 트랜젝션은 철저히 독립적이기 때문에 다른 트랜젝션의 작업 내용을 알 수 없으며, 트랜잭션이 동시에 실행될 때와 연속으로 실행될 때의 데이터베이스 상태가 동일해야 한다.

  • 일반적으로 시스템이 격리를 유지하기 위해 처리해야 하는 dirty read , 반복 불가능한 읽기, 팬텀 읽기 등 여러 현상을 유발할 수 있는 락 메커니즘을 사용하여 구현됩니다.

티케팅 예시

  • 두 사람이 동시에 "구매"를 클릭하더라도 데이터베이스는 거래를 차례로 처리하므로 티켓이 이중 판매되는 상황을 방지할 수 있습니다.

  • 각각의 상태가 독립되어있다


Durability(지속성)

  • 한번 반영(커밋)된 트랜젝션의 내용은 데이터베이스에 영원히 적용되는 특성을 의미

  • 영구적 저장이란 => 비휘발성 메모리(HDD, SSD 등)에 저장

  • 정전, 충돌 또는 오류 등 DB 에 문제가 생겨도 커밋 결과는 쭉 남아있어야하도록!

항공편 예시

  • 온라인으로 항공편을 성공적으로 예약 => 예약 세부정보가 항공사 데이터베이스에 저장.
  • 내구성은 예약이 확정되고 확인 이메일을 받으면 항공사 시스템이 잠시 중단되더라도 예약이 손실되지 않도록 보장합니다.
  • 시스템이 다시 시작되어도 예약 상태는 유지되어 비행기 좌석 확보가 보장!

ACID 트랜잭션의 장점

데이터 무결성

  • ACID 속성은 데이터베이스의 무결성을 유지합니다.
    => 데이터 손상을 방지하고 시스템 오류, 오류 등 이상 현상이 발생하더라도 데이터가 시간이 지나도 정확하고 안정적이며 일관성을 유지하도록 보장합니다.

신뢰성

  • ACID 트랜잭션은 데이터 손실이나 데이터베이스를 일관성 없는 상태로 두지 않고 데이터베이스 시스템이 오류로부터 복구할 수 있도록 하는 프레임워크를 제공합니다.

  • 이러한 신뢰성은 데이터 정확성과 가용성이 가장 중요한 은행, 의료, 전자 상거래 등의 산업에서 매우 중요합니다.

단순화된 프로그래밍

  • ACID 보장을 통해 개발자는 부분 오류를 관리하거나 데이터 일관성을 보장하기 위해 복잡한 오류 처리 코드를 작성할 필요가 없습니다. => DBMS 가 알아서 처리해주기 때문

안정성

동시성 제어

  • ACID 속성 중 특히 격리는 여러 트랜잭션이 서로 간섭하지 않고 동시에 발생하도록 허용하여 데이터베이스가 일관된 상태를 유지하도록 보장합니다.
  • 수많은 사용자나 애플리케이션이 데이터베이스에서 동시에 읽고 쓰는 트래픽이 많은 데이터베이스에 필수적입니다.

acid 를 부시지 않는 한에서 DB 를 커스텀해서
락을 느슨하게해서 성능을 올려.

Ex) 리드일때는 락 걸지말고, 업데이트일때도 연관된 레코드만 락을 걸고.

데이터 무결성을 지키기 위해서 ACID 로 무결성 가져가면서 + 성능도 챙겨야해 => 동시성 이슈

ex) 낙관적락, 비관적락.


JPA
@Transactional 은 락이 발생하기때문에 조심해서 써야해.


카프카

  • 반드시 한번과 단한번.
  • 카프카를 쓰면서도 무결성을 지킬수 있는.

Quiz

1.

ACID 트랜잭션의 지속성(D) 속성의 목적은 모든 트랜잭션이 지연 없이 실시간으로 실행되도록 하는 것이다.(O/X)


2.

일단 트랜잭션이 완료되면 그 효과가 영구적이며 시스템이 즉시 충돌하더라도 손실되지 않도록 보장하는 속성은?

  • C ,D

  • 내구성 속성은 트랜잭션이 커밋되면 해당 변경 사항이 영구적이고 시스템 오류가 발생해도 유지되도록 보장

0개의 댓글