배니스트의 개발추적기

[데이터베이스] 트랜잭션(Transaction)이란? 본문

Database

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

배니스트 2020. 8. 24. 21:50

 

1. 트랜잭션 정의

트랜잭션은 데이터베이스의 상태를 변화시키기 위해서 수행하는 하나의 논리적인 작업 단위이다.

 

 

우선 어원으로 따져보면 Transaction은 접두사 trans-와 단어 action이 조합된 파생어다. trans-가 '다른 장소 혹은 상태로의 변화, 이전'(네이버 영어사전), action이 행동, 행위를 뜻하는 단어이다. 데이터베이스에서 트랜잭션은 데이터베이스 상태 변화를 일으키는 작업이라는 것이 자연스럽게 이해된다.

 

 

하나의 논리적인 작업 단위라는 건 무엇일까? 데이터베이스에 접근하거나 내부 데이터를 수정하는 작업은 SQL문*으로 수행된다. 트랜잭션은 여러 SQL문들이 조합되어 하나의 작업 덩어리를 이룬 것을 뜻한다. 그래서 하나의 '논리적인' 작업 단위가 된다. (* SELECT, INSERT, DELETE, UPDATE)

 

 

그런데 굳이 트랜잭션을 써야할까? 각각의 SQL문을 데이터베이스로 즉각 날려주어도 되지 않을까? UPDATE, DELETE와 같은 명령어들은 데이터베이스 상태 변화를 크게 일으키는 질의어들이다. 먄약 잘못 사용되었을 경우 그 이전 상태로 복구가 필수적이다. 트랜잭션으로 작업하지 않았을 경우 복구가 힘들어진다.

 

 

 

2. 트랜잭션 연산

❝ 하나의 트랜잭션은 Commit되거나 Rollback된다.

🪐 커밋(Commit)

    커밋 연산은 트랜잭션(하나의 논리적 작업 단위)이 성공적으로 끝났고 데이터베이스가 다시 일관된 상태에 있을 때, 트랜잭션이 끝났다는 것을 관리자에 알리는 연산이다. 곧, 트랜잭션의 작업이 성공적으로 데이터베이스에 반영되었음을 뜻한다.

 

 

🪐 롤백(Rollback)

    롤백이란 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 트랜잭션을 처음부터 다시 시작하거나, 부분적으로 처리된 트랜잭션의 결과를 취소하는 연산이다.

 

 

3. ACID Property

산성 아니다.

🔥 원자성(Atomicity)

    - 트랜잭션 내 모든 명령어들은 반드시 완벽히 수행되어야 하며, 어느 하나라도 오류가 발생하면

      트랜잭션 전체가 취소되어야 한다.

    - 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.

 

 

🔥 일관성(Consistency)

    - 트랜잭션이 성공적으로 처리된 후에는 항상 일관성 있는 데이터베이스 상태로 변환한다.

    - 그 이외 시스템 고정요소는 트랜잭션 수행 전후가 바뀌지 않아야 한다.

 


🔥 격리성(Isolation)

    - 둘 이상의 트랜잭션이 동시에 실행되는 경우 서로 다른 트랜잭션의 연산은 독립적으로 수행된다.

    - 곧, 하나의 트랜잭션은 절대 다른 트랜잭션에서의 수행 결과를 참조할 수 없다.

 

 

🔥 지속성(Durability)

    - 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 데이터베이스에 영구적으로

      반영되어야 한다.

 

 

4. 트랜잭션의 상태

롤백은 가차없다.

💥 Active : 트랜잭션이 실행 중인 상태

💥 Partially Committed : 트랜잭션의 마지막 명령어까지 실행한 상태

💥 Failed : 정상적인 실행이 더 이상 진행될 수 없음을 확인한 상태

💥 Aborted : 트랜잭션이 롤백되고 데이터베이스가 해당 트랜잭션이 시작되기 이전 상태로 복구하는 상태

💥 Committed : Commit 연산을 실행한 후의 상태로, 트랜잭션이 성공적으로 종료된 상태

 

 


위 내용은 다음 블로그들의 내용을 참고하였다.

[개발자로 홀로 서기]: https://mommoo.tistory.com/62

[코딩 팩토리]:  https://coding-factory.tistory.com/226