본문 바로가기

항해 99

Database Transation

트랜잭션

데이터베이스와 데이터 스토리지 시스템이라는 맥락에서 트랜잭션이란 한 단위의 작업으로 취급되는 모든 작업을 말한다.

트랜잭션은 완전히 완료되기도 하고 전혀 완료되지 않을 수도 있으며, 스토리지 시스템을 한결같은 상태로 둔다.

 

ACID

ACID(Atomicity, Consistency, Isolation, Durability)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다.

 

데이터베이스 작업에 ACID 속성이 있다면 이를 ACID 트랜잭션이라고 부르면 되고, 이런 작업을 적용하는 데이터 스토리지 시스템을 트랜잭션 시스템이라고 한다.

 

원자성 : Atomicity

  • All or Nothing : 트랜잭션은 모두 실행하거나 모두 실행하지 않음 두 가지 상태만 있다.

단일 데이터베이스 트랜잭션의 모든 단계가 완전히 완료되거나 원래 상태로 되돌려지도록 한다.

예를 들어 예약 시스템에서는 좌석 예약과 고객 세부 정보 업데이트라는 두 작업을 단일 트랜잭션으로 완료해야 하며, 고객 프로필이 불완전한 경우에는 좌석을 예약할 수 없다. 트랜잭션의 일부만 실패해도 데이터가 변경되지 않는다.

 

이 속성은 작업 중 오류가 발생해도 데이터 손실과 손상을 방지할 수 있다.

 

일관성 : Consistency

  • 트랜잭션 이전과 이후에 데이터베이스는 항상 consistent한 상태여야 한다.

데이터가 사전 정의된 무결성 제약 조건 및 비즈니스 규칙을 충족하도록 보장한다. 여러 사용자가 동시에 유사한 작업을 수행하더라도, 모든 사용자에게 데이터가 일관되게 유지된다.

예를 들어 일관성은 한 계좌에서 다른 계좌로 자금을 이체할 때 거래 전후의 총 잔액이 동일하게 유지되도록 보장한다.

계좌 A의 잔액이 200 USD이고 계좌 B의 잔액이 400 USD인 경우 총 잔액은 600 USD이다. A에서 B로 100 USD를 송금하면 A의 잔액은 100 USD, B의 잔액은 500 USD가 된다. 총 잔액은 여전히 600 USD이다.

 

트랜잭션 일관성이 확보되면 데이터 손상이나 오류 때문에 테이블 무결성에 의도하지 않는 결과가 생기지 않는다.

 

격리 : Isolation

  • 여러 트랜잭션이 동시에 실행될 때도,서로 영향을 주지 않고 독립적으로 실행되는 것처럼 보여야 한다.

특정 레코드에 액세스하는 새 트랜잭션이 이전 트랜잭션이 이전 트랜잭션이 완료될 때까지 기다렸다가 작업을 시작하도록 보장한다.

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

예를 들어 다중 사용자 인벤토리 관리 시스템에서 한 사용자가 제품 수량을 업데이트하면 동일한 제품 정보에 액세스하는 다른 사용자는 업데이트가 완료될 때까지 진행 중인 업데이트의 영향을 받지 않으면서 일관되고 분리된 데이터 뷰를 볼 수 있다.

 

영속성(내구성) : Durability

  • 커밋된 트랜잭션의 결과는 데이터베이스에 영구적으로 저장되어야 한다(비휘발성 메모리에 저장).

시스템에 장애가 발생하더라도 커밋된 모든 레코드가 데이터베이스에서 유지하도록 한다.

ACID 트랜잭션이 커밋될 때 모든 변경 사항이 영구적으로 적용되고 이후 발생하는 시스템 장애에 영향을 받지 않도록 보장한다.

예를 들어 메시징 애플리케이션에서 사용자가 메시지를 전송하고 전송 성공 확인을 받을 때, 내구성은 메시지가 손실되지 않도록 보장한다.

 

애플리케이션이나 서버에 장애가 발생하더라도 내구성이 보장된다.

 

ACID 트랜잭션이 있으면 좋은 이유

ACID 트랜잭션은 가능한 최대한의 데이터 안정성과 무결성을 보장해준다. 작업 하나가 일부분만 완료되는 바람에 데이터가 일관적이지 않은 상태가 되는 불상사가 일어나지 않도록 방지해 준다.

 

ACID DB 와 BASE DB의 차이점

ACID와 BASE는 데이터베이스가 데이터를 구성하고 조작하는 방법을 결정하는 데이터베이스 트랜잭셕 모델이다.

 

ACID 데이터베이스는 가용성보다 일관성을 우선시한다. 따라서 트랜잭션의 어느 단계에서든 오류가 발생하면 전체 트랜잭션이 실패한다.

BASE 데이터베이스는 일관성보다 가용성을 우선시한다. 트랜잭션이 실패하는 것이 아니라, 사용자가 일관되지 않은 데이터에 일시적으로 액세스하게 된다. 데이터 일관성은 달성되지만, 즉시 달성되지는 않는다.

 

ACID와 BASE가 중요한 이유

현대적 데이터베이스는 네트워크로 연결된 여러 노드에 데이터를 복제하는 분산 데이터 스토어로 사용자가 단일 트랜잭션에서 읽기 및 쓰기와 같은 여러 데이터 조작 작업을 수행할 수 있다.

 

사용자는 트랜잭션이 끝날 때 모든 노드에서 데이터가 일관되게 유지되기를 기대하는데 모든 분산 데이터 스토어는 다음 세 가지 보장 중 두 가지만 제공할 수 있다.

  • 일관성 : 모든 읽기 작업에서 가장 최근에 업데이트된 데이터 또는 오류를 수신한다.
  • 가용성 : 모든 데이터베이스 요청에서 가장 최근에 업데이트된 데이터가 포함되어 있는지 확인하지 않고도 성공 응답을 수신한다.
  • 파티션 내성 : 분산 노드 간에 메시지가 삭제되거나 지연되더라도 시스템이 계속 작동한다.

예를 들어 고객이 전자 상거래 웹 사이트에서 카트에 품목을 추가한 경우 다른 모든 고객은 해당 제품의 재고가 줄어드는 것을 확인할 수 있다. 고객이 카트에 해당 품목의 마지막 남은 하나를 추가한 경우 다른 모든 사용자에게는 해당 품목이 품절된 것으로 표시된다.

데이터 베이스 설계자는 트랜잭션 내에서 작업이 실패할 경우 어떻게 할지 선택해야 한다. 데이터베이스는 다음 중 하나를 수행할 수 있다.

  1. 트랜잭션을 취소하고 오류를 반환하면 가용성은 떨어지지만 일관성은 보장된다. 카트에 추가하기가 성공할 때까지 고객이 카트에 품목을 추가할 수 없거나 다른 고객이 모든 제품에 대한 세부 정보를 로드할 수 없다.
  2. 작업을 계속 진행하면 가용성이 제공되지만 불일치가 발생할 수 있다. 고객이 카트에 품목을 추가했지만 다른 고객에게는 적어도 일시적으로 잘못된 재고 수준이 표시된다.

일부 사용 사례에서는 일관성이 중요하며 ACID 데이터베이스가 선호되지만, 일관성이 주용하지 않은 사용 사례도 있다.

예를 들어 소셜 미디어에서 친구 요청을 수락할 때 일시적으로 소셜 미디어 프로필에 다른 사용자의 친구 수가 잘못 표시되어도 상관 없다. 하지만 데이터가 업로드 되는 동안 소셜 미디어 피드에 액세스하지 못하게 되어서는 안 된다. 이러한 시나리오에서는 BASE가 중요해진다.

 

BASE 주요 원칙

기본 가용성 : Basically Available

사용자가 언제든 데이터베이스에 동시에 액세스할 수 있음을 의미한다. 사용자가 레코드를 업데이트하기 위해 다른 사용자가 거래를 완료할 때까지 기다릴 필요가 없다.

 

예를 들어 전자 상거래 플랫폼에서 트래픽이 갑자기 급증하는 경우 시스템은 제품 목록 제공 및 주문 수락을 우선시할 수 있다. 재고 수량 업데이트가 약간 지연되더라도 사용자는 계속해서 항목을 체크아웃할 수 있게 된다.

 

소프트 상태 : Soft State

외부 트리거 또는 입력이 없더라도, 데이터가 시간 경과에 따라 변할 수 있는 일시적 상태 또는 임시 상태를 가질 수 있다는 개념이다. 여러 애플리케이션이 동시에 레코드를 업데이트할 때의 레코드의 전환 상태를 설명한다. 레코드 값은 모든 트랜잭션이 완료된 후에만 최종적으로 확정된다.

 

예를 들어 사용자가 소셜 미디어 게시물을 편집하는 경우 변경 사항이 다른 사용자겡게 즉시 표시되지 않을 수 있다. 하지만 나중에 사용자가 트리거하지 않았더라도 게시물이 저절로 업데이트 된다(이전 변경 사항 반영).

 

최종 일관성 : Eventually  Consistent

모든 동시 업데이트가 완료되었을 때 레코드의 일관성이 유지된다는 것을 의미한다. 이 시점에 레코드를 쿼리하는 애플리케이션은 동일한 값을 얻게 된다.

 

예를 들어 여러 사용자가 동시에 문서를 편집할 수 있는 분산 문서 편집 시스템에서 사용자 A와 사용자 B가 문서의 동일한 섹션을 동시에 편집하는 경우, 변경 내용이 전파되고 동기화될 때까지 로컬 사본이 일시적으로 서로 달라질 수 있다. 하지만 시간이 지남에 따라 시스템은 여러 사용자가 변경한 내용을 전파하고 병합하여 최종 일관성을 보장한다.

 

ACID 와 BASE 주요 차이점

확장

ACID 데이터베이스 트랜잭션 모델은 일관성에 초점을 맞추기 때문에 규모를 조정하기가 더 어렵다. 어떤 레코드든 항상 하나의 트랜잭션만 허용되므로 수평적 규모 조정이 더 어렵다.

 

BASE 데이터베이스 모델의 경우 엄격한 일관성을 유지할 필요가 없으므로, 수평적으로 규모를 조정할 수 있다. 데이터베이스 클러스터에 여러 노드를 추가하면 BASE 모델이 데이터베이스 아키텍처를 구동하는 원칙인 데이터 가용성을 개선할 수 있다.

 

유연성

ACID 데이터베이스는 데이터를 처리할 때 유연성이 떨어진다. 즉각적인 일관성을 보장해야 하며, 네트워크나 정전이 발생할 경우 일부 애플리케이션에 대한 액세스가 제한될 수 있다.

마찬가지로, 다른 소프트웨어 모듈에서 특정 레코드를 처리 중인 경우 애플리케이션이 데이터를 업데이트할 차례를 기다려야한다.

 

BASE 데이터베이스는 보다 유연하다. BASE는 엄격한 제한을 적용하는 대신 애플리케이션이 레코드를 사용할 수 있게 되었을 때 레코드를 수정할 수 있도록 한다.

 

성능

대용량 데이터 또는 동시 처리 요청을 처리할 때 ACID 데이터베이스에서 성능 문제가 발생할 수 있다. 데이터가 엄격한 순서로 처리되기 때문에 각 트랜잭션의 오버헤드로 인해 레코드에 액세스하는 몯느 애플리케이션에 영향을 미치는 지연이 발생한다.

 

BASE 데이터베이스에 액세스하는 애플리케이션은 언제든지 레코드를 처리할 수 있다. 따라서 과도한 지연 시간이 줄어들고 데이터베이스 처리향이 향상된다.

 

동기화

ACID 데이터베이스에는 트랜잭션의 변경 사항을 커밋하고 모든 관련 레코드에 이를 반영하기 위한 동기화 메커니즘이 필요하다. 그와 동시에, 트랜잭션이 완료되거나 폐기될 때까지 상대방이 액세스하지 못하도록 특정 레코드를 잠가야 한다.

 

BASE 데이터베이스는 레코드를 잠그지 않고 실행되므로, 시간이 보장되지 않은 채 이후에 동기화된다. 개발자는 BASE 데이터베이스로 작업할 경우 특정 레코드를 처리할 때 불일치가 발생할 수 잇다는 사실을 감안하여 애플리케이션에서 필요한 예방 조치를 취한다.

 

사용 사례

ACID 및 BASE 데이터베이스 시스템은 모두 다양한 응용 분야에 활용된다.

ACID는 데이터 일관성, 신뢰성 및 예측 가능성이 요구되는 엔터프라이즈 애플리케이션에 이상적인 옵션이다.

예를 들어 은행의 경우 데이터 무결성이 무엇보다 중요하므로 ACID 데이터베이스를 사용하여 고객 거래를 저장한다.

 

BASE 데이터베이스는 구조화되지 않은 대용량 데이터의 온라인 분석 처리에 더 적합한 옵션이다.

예를 들어 전자 상거래 웹 사이트에서는 BASE 데이터베이스를 사용하여 자주 변경되는 제품 가격을 업데이트 한다. 이 경우 가격 정확성보다는 모든 고객이 제품 가격에 실시간으로 액세스할 수 있도록 하는 것이 더 중요하다.

 

데이터베이스가 ACID와 BASE를 모두 충족할 수 있는지?

CAP 정리에 따르면 데이터베이스는 일관성, 가용성 및 파티션 내성이라는 세 가지 특성 중 두 가지를 보장할 수 있다.

ACID 및 BASE 데이터베이스 모델 모두 파티션 내성을 제공한다. 따라서 높은 일관성과 상시 가용성을 모두 제공할 수는 없다.

 

즉, 데이터베이스는 ACID 또는 BASE 중 하나에 치우치게 되고, 두 가지 모두를 충족할 수는 없다.

예를 들어 SQL 데이터베이스는 ACID 기반으로 구조화되는 반면 NoSQL 데이터베이스는 BASE 아키텍쳐를 사용한다. 반면, 일부 NoSQL 데이터베이스는 특정 ACID 특성을 나타낼 수 있지만 ACID 적격 데이터베이스로는 작동하지 않는다.

 

차이점 요약 : ACID & BASE

 

  ACID BASE
확장 가능 수직적으로 규모를 조정한다. 수평적으로 규모를 조정한다.
유연성 유연성이 떨어진다. 처리 시 다른 애플리케이션의 특정 레코드를 차단한다. 더 유연하다. 여러 애플리케이션이 동일한 레코드를 동시에 업데이트할 수 있다.
성능 대용량 데이터를 처리할 때는 성능이 저하된다. 높은 처리량으로 대용량의 비정형 데이터를 처리할 수 있다.
동기화 동기화 시 지연 시간이 늘어난다. 데이터베이스 수준에서 동기화가 이루어지지 않는다.

'항해 99' 카테고리의 다른 글

Proxy  (0) 2024.05.04
TCP / UDP  (0) 2024.05.01
OSI 7계층  (0) 2024.04.29
WIL - 12  (0) 2024.04.28
멀티 프로세스 & 멀티 스레드  (1) 2024.04.26