[데이터중심 어플리케이션 설계] 트랜잭션이 제공하는 안전성 보장

김영상 (dudtkd1221)·2024년 6월 24일
0

트랜잭션이란?

트랜잭션은 어플리케이션에서 몇 개의 읽기와 쓰기를 하나의 논리적 단위로 묶는 방법이다.

트랜재션은 전체가 성공하거나 실패하기 때문에 트랜잭션을 쓰면 어플리케이션에서 오류 처리를 하기가 훨씬 단순해진다는 이점이 있다.

트랜잭션이 제공하는 안전성 보장

트랜잭션이 제공하는 안전성 보장은 흔히 ACID라고 불리는 4가지가 있다.

  • 원자성(Atomicity)
  • 일관성(Consistency)
  • 격리성(Isolation)
  • 지속성(Durability)

위와 같은 ACID표준을 따르지 않는 시스템은 BASE라고 불린다.

  • 가용성 제공(Basically Available)
  • 유연한 상태(Soft state)
  • 최종적 일관성(Eventual consistency)

Eventual consistency란?

Eventual consistency는 항목이 새롭게 업데이트되지 않는다는 전제하에 항목의 모든 읽기 작업이 최종적으로는 마지막으로 업데이트된 값을 반환한다는 것을 이론적으로 보장합니다. 인터넷 DNS(도메인 이름 시스템)는 eventual consistency 모델이 사용된 시스템의 예로 잘 알려져 있습니다.

참조

MSA기반의 분산시스템 환경에서는 eventual consistency

를 보장하기기가 굉장히 어렵다고 한다

원자성 (Atomicity)

원자성이란?

원자성은 일반적으로 더 작은 부분으로 쪼갤 수 없는 것을 가리키며, ACID원자성은 여러 쓰기 작업이 하나의 원자적인 트랜잭션으로 묶여있는 것을 의미함.

원자성이 필요한 이유

클라이언트가 쓰기작업 몇 개를 실행하려고 할떄, 프로세스가 죽거나 네트워크 연결이 끊긴다면 결함이 생기는(제악조건 위반) 상황이 생길 수 있다.

이때 원자성이 보장되지 않는다면 어떤 변경은 효과가 있고 어떤 것은 그렇지 않은지 알기가 어렵다. 어플리케이션에서 재시도를 시도해 볼 수 있디만 동일한 변경이 두 번 실행돼서 중복되거나 잘못된 데이터가 만들어지기 쉽다.

원자성이 해결하는 것

위와 같이 오류가 생겼을때 트랜잭션을 abort하고 해당 트랜잭션에서 기록한 모든 내용을 취소함으로써 잘못된 데이터가 만들어지는 것을 방지한다.

일관성 (Consistency)

일관성이란?

ACID서의 일관성의 아이디어는 데이터에 관한 불변식이 있다는 것을 가정으로 한다.

ex)

  • 회계 시스템에서 모든 계좌에 걸친 대변과 차변은 항상 맞아떨어져야한다.
  • 성별은 남, 여 둘 중 하나의 값만 들어가야한다.

이런 일관성의 아이디어는 데이터베이스가 보장하기 어려운 부분이다, 따라서 어플리케이션의 불변식 개념에 의존하고, 일관성을 유지하도록 트랜잭션을 올바르게 정의하는 것은 어플리케이션의 책임이다.

이런 이유로 원자성, 격리성, 지속성은 데이터베이스의 속성인 반면, 일관성은 어플리케이션의 속성이다. 따라서 C는 실제로는 ACID에 속하지 않는다

격리성

격리성이란?

ACID에서 격리성은 동시에 실행되는 트랜잭션은 서로 격리되는 것을 의미하며, 트랜잭션은 다른 트랜잭션을 방해할 수 없다.

격리성이 필요한 이유

클라이언트들이 동일한 데이터베이스 레코드에 접긓나면 동시성 문제(경쟁 조건)에 맞닥뜨리게 된다.

위 상황에서 카운터의 값은 원래 44가 되었어야 하는데 실제로는 경쟁조건 때문에 43이 됐다.

격리성이 해결하는 것

이때 ACID의 격리성이 트랜잭션이 동시에 실행되는 것을 막음으로서 결과가 트랜잭션이 순차적으로 실행됐을 때 결과와 동일하도록 보장한다.

지속성

지속성이란?

트랜잭션이 성공적으로 커밋됐다면 하드웨어 결합이 발생하거나 데이터베이스가 죽더라도 트랜잭션에서 기록한 모든 데이터는 손실되지 않는다는 보장이다.

지속성이 필요한 이유

하드웨어 결합등으로 인해 데이터베이스가 오염될 수 있음

profile
아직 배고프다

0개의 댓글