본문 바로가기

부스트캠프/챌린지

[부스트캠프 웹모바일 9기] 챌린지 Day16 학습정리

트랜잭션

데이터베이스 관리 시스템(DBMS)에서 하나의 논리적 작업 단위를 구성하는 일련의 연산들

트랜잭션은 ACID 속성(Atomicity, Consistency, Isolation, Durability)을 만족해야 한다.

 

Atomicity(원자성)

트랜잭션 내의 모든 연산이 완벽하게 수행되거나, 전혀 수행되지 않은 것처럼 처리되어야 한다.

모든 작업이 성공적으로 완료되면 그 결과가 데이터베이스에 반영되야 한다.

하나라도 실패하면 모든 변경이 취소된다.

이를 통해 데이터의 일관성무결성이 보장된다.

 

예시 : 은행 계좌 이체

 

위 상황에서 트랜잭션은 1, 2번을 완벽하게 수행하거나, 전혀 수행하지 말아야 한다.

1번만 실행하거나, 2번을 실행하는 경우는 없어야 한다.

이러한 개념이 바로 Atomicity(원자성)

 

 

 

 

Consistency(일관성)

트랜잭션이 성공적으로 완료된 후 데이터베이스가 일관된 상태를 유지해야 한다는 원칙

일관성 : 데이터베이스의 무결성 제약 조건(예: 외래 키 제약, 유니크 제약, 데이터 타입 제약 등)이 트랜잭션 전후에도 항상 만족된다는 것

 

예시 : 은행 계좌 잔고 제약 조건

 

1. 트랜잭션 시작 전: A 계좌의 잔고가 100달러, B 계좌의 잔고가 50달러라고 가정

2. 트랜잭션 수행: A 계좌에서 120달러를 출금하여 B 계좌로 이체하려는 시도가 트랜잭션으로 발생

3. 일관성 검증: 트랜잭션을 수행하기 전, 데이터베이스는 일관성 조건(계좌 잔고가 음수가 될 수 없음)을 검증. 이 경우, A 계좌에서 120달러를 출금하면 잔고가 -20달러가 되어 일관성 조건을 위반하게 된다.

4. 트랜잭션 실패 및 롤백: 일관성 조건이 위반되기 때문에 이 트랜잭션은 실패하고 롤백되어, 데이터베이스는 트랜잭션 전의 상태로 돌아감. 따라서 A 계좌의 잔고는 여전히 100달러, B 계좌의 잔고는 50달러로 유지됨.

 

 

 

 

 

Isoloation(고립성)

여러 트랜잭션이 동시에 실행될 때 각 트랜잭션이 독립적으로 수행되며, 다른 트랜잭션의 중간 결과를 볼 수 없도록 보장하는 원칙

트랜잭션이 고립성을 유지한다 : 동시에 실행되는 트랜잭션들이 서로 간섭하지 않으며, 결과적으로 트랜잭션들이 순차적으로 실행된 것과 동일한 결과를 얻을 수 있다.

 

예시: 은행 계좌 이체와 동시에 잔고 확인

 

상황: 트랜잭션 A가 A 계좌에서 100달러를 출금하고 B 계좌로 이체하는 도중에, 트랜잭션 B가 A 계좌의 잔고를 조회하려고 한다고 가정

  • 고립성이 낮은 경우: 트랜잭션 B는 트랜잭션 A가 완료되기 전에 A 계좌에서 100달러가 빠져나간 중간 상태의 잔고를 읽을 수 있다. 이 경우 잔고가 예상과 다를 수 있다.
  • 고립성이 높은 경우: 트랜잭션 B는 트랜잭션 A가 완료될 때까지 A 계좌의 잔고를 읽지 못하거나, 이전 커밋된 상태의 잔고를 읽는다. 따라서 트랜잭션 A가 완료되기 전까지 B 계좌의 잔고를 확인할 수 없다.

고립성은 트랜잭션 간의 간섭을 최소화하여 데이터의 일관성을 유지하는 중요한 요소다.

 

 

 

 

 

Durability(지속)

트랜잭션이 성공적으로 커밋된 후에는 시스템 오류나 장애가 발생하더라도 그 결과가 영구적으로 데이터베이스에 반영되어야 한다는 원칙

즉, 트랜잭션이 완료된 이후에는 어떠한 시스템 장애가 발생하더라도 데이터의 손실 없이 안정적으로 보존되어야 한다.

 

예시: 은행 계좌 이체 후 시스템 장애

 

Durability 보장: 시스템이 다시 시작된 후에도 A 계좌에서 100달러가 출금되고 B 계좌에 100달러가 입금된 상태가 그대로 유지되어야 한다.

즉, 커밋된 트랜잭션의 결과가 손실되지 않고 그대로 반영된다.

이를 위해 데이터베이스는 트랜잭션이 커밋될 때 변경된 데이터를 디스크에 안전하게 기록하거나, 로그 파일을 통해 복구할 수 있는 정보를 저장해둔다.

Durability는 트랜잭션이 완료된 후 그 결과가 영구적으로 보존되는 것을 보장하여, 시스템의 신뢰성을 높이는 중요한 속성이다.

 

 

 

 


데이터베이스 메타데이터는 어떻게 저장할까?

미션 중에 갑자기 "데이터베이스 내 속성들의 자료형은 어떻게 저장할까?"라는 궁금증이 생겼다.

그래서 슬랙을 찾아본 결과, 한 분께서 새로운 지식을 알려주셨다.

(오!)

 

바로 Information schema라는 개념이었다.

Mysql의 경우에는 해당 뷰의 "columns" 테이블을 조회하면 된다고 한다.

그래서 나는 Information schema가 무엇인지 조사해보았다.

 

 

 

Information Schema

데이터베이스 관리 시스템(DBMS)에서 메타데이터를 저장하고 관리하는 시스템 데이터베이스다.

여기에는 데이터베이스, 테이블, 열, 인덱스, 사용자 권한 등 데이터베이스 구조와 관련된 정보가 테이블 형식으로 저장되어 있다.

이를 통해 데이터베이스 관리자나 사용자가 데이터베이스 구조를 조회하고 관리할 수 있게 된다.