Finn.ian
article thumbnail

기술 면접의 단골 질문인 데이터베이스의 기초인 트랜잭션(Transaction) 특성(ACID)에 대해 작성해보려 한다.

01. 트랜잭션(Transaction)이란 무엇일까?  🙄 

트랜잭션(Transaction)은 데이터베이스의 상태를 변경 시키기 위해 수행되는 작업 단위라는 의미를 갖는다.

 

그렇다면, 데이터베이스의 상태를 변경시킨다는 의미는 무엇일까?

간단히 말하면 아래의 질의어(DML, 데이터 조작어)를 활용해 데이터베이스에 접근한다는 의미이다.

 

- SELECT : 데이터베이스에 들어있는 데이터들을 조회하거나 검색하기 위한 명령어

- INSERT : 데이터베이스에 들어있는 데이터를 추가하기 위한 명령어

- UPDATE : 데이터베이스에 들어있는 데이터들을 갱신하기 위한 명령어

- DELETE : 데이터베이스에 들어있는 데이터들을 삭제하기 위한 명령어

 

쉽게 말해, 데이터베이스 질의(SQL)에서 한 번에 처리되어야 하는 하나 또는 둘 이상의 처리 작업의 모음으로 DBMS에서 실행되는 논리적인 단위 작업이라고 보면 된다.

 

그러나, 작업의 단위는 질의어 한 문장이 아니라, 사람이 정하는 기준에 따라 작업단위가 정해진다는 것이다.

데이터를 추가한 후 갱신하고 조회하는 질의를 했다고 한다면, 3가지의 트랜잭션이 수행된다고 생각하면 마음 편한다.

 

트랜잭션(Transaction)은 하나 또는 두 개 이상의 여러 연산들로 이루어지며, 이 중 하나의 연산 실패 시, 전체 트랜잭션(Transaction)은 롤백(Rollback)되어 이전 상태로 되돌아간다.  
이러한 특징으로 트랜잭션(Transaction)은 데이터베이스의 일관성과 무결성을 유지하는 데 매우 중요한 역할을 하며, 필수적이다.

 

예시 

돈을 타인에게 이체한 경우, 이체에 대한 작업은 여러 연산으로 이루어지고, 이러한 연산들은 모두 트랜잭션으로 묶인다. 이렇게 묶인 트랜잭션은 원자성을 보장받으며, 모든 연산이 성공적으로 수행될 시에 이체 완료되며 그렇지 않으면 이전 상태로 돌아간다.

이렇게 이전 상태로 돌아가는 것을 Rollback이라 한다.

트랜잭션(Transaction) 은 데이터베이스에서 데이터의 정합성일관성보장하기 위한 매우 중요한 개념

02. 이러한 트랜잭션(Transaction)은 어떠한 특성을 가지고 있을까? 🤔 

위에 트랜잭션 개념에 대해 간략히 작성해보았다. 그럼 데이터베이스에서 이렇게 중요한 트랜잭션(ACID)은 어떠한 특징을 가지고 있을까?

데이터의 무결성 을 보장하기 위한 DBMS의 트랜잭션이 가져야 할 특성은 4가지로 아래와 같다.

원자성(A), 일관성(C), 고립성(I), 지속성(D)

 

아래는 특성별 특징과 그 특성에 따른 보장기법에 대해 간략히 작성한 내용이다.

트랜잭션 처리 과정

1. 원자성(Atomicity)

원자성은 트랜잭션에서 정의된 연산들 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않는 상태로 남아있어야 된다는 의미이다.
연산 처리는 작업 단위별로 이루어져야 사람들이 다루기에 무리가 없다.

만약, 트랜잭션 단위로 데이터가 처리되지 않는다면, 데이터베이스를 설계한 사람은 데이터 처리 시스템에 대한 이해가 힘들 뿐 아니라, 오작동한 경우 이에 대한 원인을 찾기가 어려울 것이다.

 

원자성에 대한 보장기법은 Rollback, Commit, Transaction begin, End. 총 5가지이다.

2. 일관성(Consistency)

일관성은 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것이다. 이는 트랜잭션이 실행되기 전의 데이터베이스에 내용이 잘못되어 있지 않다면, 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다는 의미이다.

 

트랜잭션이 진행되는 동안 데이터베이스가 변경되더라도 갱신된 데이터베이스로 트랜잭션이 진행되는 것이 아닌 트랜잭션을 진행하기 위해 참조한 데이터베이스로 진행된다. 이러한 특성으로 인해 각 사용자는 일관성 있는 데이터를 확인할 수 있는 것이다.

 

일관성에 대한 보장 기법은 아래와 같다.
- 도메인, 관계 무결성 처리로 NOT NULL, Foreign key, check, unique key 등

3. 고립성(Isolation)

고립성은 트랜잭션이 실행되는 중에는 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.

 

데이터베이스는 혼자서 다루는 것이 아닌 여러 사람들이 조회하거나, 정보를 수정 또는 삭제를 동시에 진행된다. 이 때, 둘 이상의 트랜잭션이 동시에 실행된 경우, 어떠한 하나의 트랜잭션이라도, 다른 트랜잭션 연산 중간에 끼어들 수 없다는 점 이다.

 

결국, 하나의 특정 트랜잭션이 완료될 때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다는 것이다.

 

고립성의 보장기법은 Locking(2 Phase Locking), Timestamp Ordering, MVCC, Isolation Level 등이 있다.

4. 지속성(Durability)

지속성은 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장되어야 한다는 것이다.

 

지속성의 보장기법은 DBMS 회복으로 redo, undo, 로그 기반, 체크리스트 회복 등이 있다.

트랜잭션의 특성 4가지 기억해두자.
성공하려면 다 같이 성공하고, 실패하면 다 실패해야 하는 원자성
처리 결과는 항상 일관성을 가지며,
실행중엔 다른 트랜잭션의 영향을 받지 않아야 하는 고립성,
트랜잭션 성공 시 영구 저장되어야 하는 지속성이 있다.

03.  트랜잭션(Transaction)Commit, Rollback은 무엇일까?🧐 

트랜잭션의 Commit, Rollback, Savepoint에 대한 자세한 내용과 예시는 추후 다룰 예정이다.

 

그러면 트랜잭션이 성공하거나 실패되는 연산에는 Commit과 Rollback이 있는데 이는 무엇이 있을까?

Commit과 Rollback은 쉽게 말해 제어 명령어(Transaction Control Language, TCL)이며 내용은 아래와 같다.

 

Commit
입력, 수정, 삭제된 자료에 대해 문제가 없다고 판단된 경우 COMMIT 명령어를 통해 트랜잭션을 완료시킨다.
즉, 하나의 트랜잭션이 성공적으로 끝나 변경사항을 영구적으로 적용된 상태로 데이터베이스가 일관성이 있는 상태에 있음을 의미한다.

예시  작성된 엑셀 시트에서 수정한 내용이 있는 경우, 저장 버튼을 눌러 수정된 내용이 파일에 모두 반영되어 영구적으로 저장된 것

 

Rollback

Commit 이전에는 변경 사항을 취소하거나, 비정상적으로 종료되어 트랜잭션의 원자성이 깨진 상태를 의미한다.

 

트랜잭션의 원자성을 지키기 위해 해당 트래잭션이 행한 모든 연산을 재시작하거나 취소시키는 것이다. 이런 기능으로 데이터 변경 사항이 취소되어 데이터가 이전 상태로 복구되며, 관련 행에 대한 잠금이 풀려 다른 사용자들이 해당 데이터를 변경할 수 있다.

트랜잭션(Transaction)의 Commit영구 저장!, Rollback영구 저장 시키기 전 취소!

04. 트랜잭션(Transaction)의 상태를 표현해보자! 🌝

이렇게 트랜잭션에 대한 내용을 작성했는데 그러면 트랜잭션의 상태는 어떻게 표현할 수 있을까?

트랜잭션의 상태는 아래의 그림을 참고하면 다음과 같다.

- Active(활동) : 트랜잭션이 실행중인 상태

- Failed(실패) : 트랜잭션 실행에 오류가 발생하여 중단된 상태

- Aborted(철회) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태

- Partially Committed(부분 완료) : 트랜잭션의 마지막 연산까지 실행, 그러나 Commit 연산은 실행되기 전

- Committed (완료) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태


여기까지 트랜잭션(Transaction)의 개념, 특성, Commit과 Rollback, 상태까지 알아보았다.

트랜잭션(Transaction)은 DBMS에서 병행 제어 및 회복 작업 시 처리되는 작어브이 논리적 단위이며, 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변화 과정의 작업 단위라고 생각하면 될 것 같다.

 

지금까지 공부와 구글링을 통해 얻은 지식을 조금씩 작성하는 중으로 틀린 내용이 있으면 언제든 수정할 예정이다.

 

📜 REFERENCE

 

트랜잭션 ACID 특성과 Isolation Level

안녕하세요! BE 직방부동산팀에서 근무중인 Jeff 입니다. 이번 포스팅에서는 기술면접의 단골 질문인 트랜잭션의 ACID 특성과 격리 수준 (Isolation Level)에 대해 알아보려 합니다. 그럼 시작해 볼까요

medium.com

 

[데이터베이스] Transaction, 트랜잭션이란?

Transaction, 트랜잭션 트랜잭션(Transaction) 이란, 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위이다. 데이터베이스의 상태를 변경시킨다는 이야기는 SELECT, UPDATE, INSERT, DELETE 와 같은

wonit.tistory.com

 

 

[Database] 트랜잭션(Transaction)이란?

📖 트랜잭션(Transaction)이란? 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 여기서 데이터베이스의 상태를 변화시킨다는 의미는 질의어(SQL : SELECT, INSERT,

cocoon1787.tistory.com

 

[DATABASE] TCL 이란? COMMIT, ROLLBACK, SAVEPOINT

TCL 이란? TRANSACTION CONTROL LANGUAGE 로 트랜잭션을 제어하는 언어입니다. 트랜잭션은 데이터베이스의 논리적 연산단위입니다.하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함되며 분할할 수 없는

mozi.tistory.com

 

profile

Finn.ian

@Finn_

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

검색 태그