Developing Myself Everyday

트랜잭션이란?


트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다. 즉 여러 개의 작업을 하나로 묶은 실행 유닛이다. 트랜잭션은 데이터베이스의 일관성과 무결성을 보장하기 위해 사용된다.

 

트랜잭션은 ACID 원칙에 기반을 두고 있다.

 

Atomicity (원자성)

트랜잭션은 작업의 모든 단계가 완료되거나 아무 것도 수행되지 않은 상태를 보장하는 특징이다. 트랜잭션을 커밋했는데, 문제가 발생해 롤백하는 경우 그 이후에 모두 수행되지 않음을 보장하는 것을 말한다.

 

예를 들어 내가 마트에서 물건을 사려고 한다고 가정해보자. 나는 지금 100만원이 있고 내가 사려는 물건은 50만원이다. 이 때 물건을 구매하기 위해서는 3단계의 과정을 거친다.

 

 1) 내가 얼마를 가지고 있는지 확인한다.

 2) 지갑에서 50만원을 꺼낸다.

 3) 마트에 50만원을 지불한다.

 

여기서 거래을 취소한다고 했을 때 나는 100만원을, 마트는 0원을 가져야 한다. 하지만 위의 3단계에서 일부만 적용이 된다면 나는 50만원을 마트는 0원을 가지고 있는 상황이 발생할 수도 있다. 이를 방지하기 위해서 원자성을 보장해야 한다.

 

Consistency (일관성)

트랜잭션이 실행되기 전과 실행된 후에도 데이터베이스는 일관된 상태를 유지해야 한다. 즉, 트랜잭션은 데이터베이스의 일관성 제약 조건을 위반하지 않도록 보장해야 한다. 이 말은 '허용된 방식' 으로만 데이터를 변경해야 한다는 것을 의미한다.

 

예를 들어 만약 내가 마트에 물건을 사는데 100만원을 소비해서 돈이 없다고 가정해보자. 소비한 금액이 0원인데 물건을 더 구매할 수 있을까? 이건 일관성을 위반하게 된다.

 

Isolation (격리성)

동시에 실행되는 여러 개의 트랜잭션은 서로 영향을 주지 않고 독립적으로 실행되는 거처럼 보이도록 보장되어야 한다. 트랜잭션은 다른 트랜잭션의 중간상태를 볼 수 없어야 한다. 복수의 병렬 트랜잭션은 순차적으로 실행되는 것처럼 작동되어야 하고, 데이터베이스는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다.

 

예를 들어 내가 마트에서 어떤 물건이 하나 남아있는 것을 보고 그 물건을 구매하기로 했다. 그래서 점원이 물건을 가지러 간 사이에 다른 사람이 물건을 구매한 것이다. 그래서 점원이 물건을 가져올 수가 없었다. 이런 상황을 격리성을 위반했다고 본다.

 

Durability (지속성)

트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 유지되어야 한다. 트랜잭션이 반영되면 그 결과는 영구적으로 데이터베이스에 반영되어야 한다. 이는 데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 함을 뜻하며, 데이터베이스는 이를 위해 체크섬 ,저널링, 롤백 등의 기능을 제공한다.

 

※ 체크섬
중복 검사의 한 형태로, 오류 정정을 통해 송신된 자료의 무결성을 보호하는 방법

※ 저널링
파일 시스템 또는 데이터베이스 시스템에 변경 사항을 반영하기 전에 변경 사항에 대한 로그를 남기는 것

 

 

무결성


데이터베이스 무결성은 데이터베이스에서 저장된 데이터가 정확하고 일관된 상태를 유지하는 것을 의미합니다. 무결성은 데이터의 유효성, 정확성, 일관성, 완전성을 보장하여 데이터의 신뢰성을 유지하는 데 중요한 역할을 한다.

 

데이터베이스 무결성은 크게 네 가지 유형으로 구분할 수 있다.

 

Entity Integrity (개체 무결성)

개체 무결성은 기본 키의 유효성을 보장한다. 기본 키는 각 행을 고유하게 식별하는 역할을 하며, 중복이나 NULL값이 허용되지 않는다. 개체 무결성은 기본 키가 지정된 행에 대해서만 유효한 데이터가 저장되도록 한다.

 

Referential Integrity (참조 무결성)

참조 무결성은 외래 키(foreign key)와 참조되는 테이블(primary key) 간의 일관성을 보장한다. 외래 키는 다른 테이블의 기본 키를 참조하는 역할을 한다. 참조 무결성은 외래 키가 참조하는 테이블의 기본 키 값과 일치하거나 NULL 값을 가질 수 있으며, 외래 키와 기본 키 간의 관계가 정확하게 유지되도록 한다.

 

Domain Integrity (도메인 무결성)

도메인 무결성은 각 열(column)에 저장되는 데이터의 유효성을 보장한다. 도메인은 열이 가질 수 있는 값의 범위를 정의하는 데이터 타입이나 제약 조건을 의미한다. 도메인 무결성은 지정된 도메인에 맞는 유효한 데이터만 저장되도록 한다.

 

Transaction Integrity (트랜잭션 무결성)

트랜잭션 무결성은 데이터베이스의 트랜잭션 처리에 관련된 무결성을 보장한다. ACID 원칙에 따라 트랜잭션은 원자성, 일관성, 격리성, 지속성을 유지해야 한다. 트랜잭션 무결성은 트랜잭션이 제대로 수행되거나 롤백되어 이전 상태로 복원되도록 한다.

 

 

 

profile

Developing Myself Everyday

@배준형

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!