본문 바로가기
CS

[DB] 인메모리 데이터베이스, 트랜잭션의 특징 (ACID)

by 민죠미 2022. 7. 28.

인메모리 데이터베이스란

  • 디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스
  • 디스크 검색보다 자료 접근이 빠른 것이 장점

 

영구 데이터베이스와 인메모리 데이터베이스

영구 데이터베이스

  • 실제 메모리에 데이터를 유지하므로 데이터베이스 서버가 반송 되더라도 다시 사용 가능
  • 디스크에 저장된 데이터를 대상으로 쿼리를 수행
  • Oracle, Mysql, Postgres 등
    => 
    Mysql, MariaDB는 MEMORY 엔진을 이용하면 인메모리 DB로 사용 가능

인메모리 데이터베이스

  • 시스템 메모리에 데이터가 저장되며 프로그램을 닫으면 데이터가 손실됨(휘발성)
  • 메모리상에 색인(인덱스)을 넣어 필요한 모든 정보를 메모리상의 색인(인덱스)을 통해 빠르게 검색
  • 서버가 꺼져서 날아가도 상관 없는 임시 데이터에 주로 쓰임(ex.로그인 세션)
  • 데이터에 비해 RAM 용량이 넉넉하지 않을 경우 가상 메모리를 쓰게 되어 역효과가 일어나기도 함
  • POC(Proof Of Concept)에 사용되며 프로덕션 응용 프로그램에서는 권장하지 않음
  • DBMS의 속성 중 하나인 Durability(지속성)를 보장하기 위하여 메모리에 NSERT/UPDATE/DELETE된 값들은 모두 디스크에 로그로 기록, DBMS가 재구동될 때 디스크로부터 로그 파일을 읽어와 메모리에 DBMS 구조를 모두 재구축하기도 함
  • Redis, H2, SQLite 등
    => SQLite에서는 파일명을 :memory:로 설정하면 인메모리 DB로 사용 가능

 

트랜잭션의 특징 (ACID)

ACID는 데이터의 유효성을 보장하기 위한, 트랜잭션의 성질이다.
트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.

  1. Atomicity (원자성)
  2. Consistency (일관성)
  3. Isolation (독립성)
  4. Durability (지속성)

Atomicity (원자성)

  • 트랜잭션을 구성하는 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 한다는 all-or-nothing 방식을 의미.
  • 트랜잭션을 수행하다가 장애가 발생하여 작업을 완료하지 못했다면, 지금까지 실행한 연산들 모두 취소하고 데이터베이스를 트랜잭션 작업 전의 상태로 되돌려 트랜잭션의 원자성을 보장.
  • 이처럼 트랜잭션의 원자성을 보장하려면 장애가 발생했을 때 데이터베이스의 원래 상태로 복구하는 회복 기능이 필요.

Consistency (일관성)

  • 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관성 있는 상태를 유지해야 함을 의미.
  • 즉, 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태였다면 트랜잭션의 수행이 완료된 후 결과를 반영한 데이터베이스도 또 다른 일관된 상태를 되어야 한다.
  • 예시 : 계좌 이체 진행 시 진행 전의 돈의 합과 진행 후의 돈의 합이 같아야 함.

Isolation (독립성)

  • 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없을 의미.
  • 시스템에서 여러 트랜잭션이 동시에 수행되지만 각 트랜잭션이 독립적으로 수행될 수 있도록 다른 트랜잭션의 중간 연산 결과에 서로 접근하지 못하게 한다.
  • 이를 통해 사용자들은 트랜잭션들이 동시에 수행되는 거처럼 느끼면서도 순서대로 하니씩 수행되는 것처럼 정확하고 일관된 결과를 얻을 수 있게 된다.
  • 예시: A가 B에게 500원을 보내고 있는데 다른 트랜잭션이 끼어들어 B에게 돈을 보낼 수 없음. A가 먼저 B에 대한 트랜잭션을 완료한 후에 시행이 됨.

Durability (지속성)

  • 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 함을 의미.
  • 시스템에 장애가 발생하더라도 트랜잭션 작업 결과는 없어지지 않고 데이터베이스에 그대로 남아있어야 한다.
  • 트랜잭션의 지속성을 보장하려면 시스템에 장애가 발생했을 때 데이터베이스를 원래 상태로 복구하는 회복 기능이 필요.

댓글