Transaction

KimJinkYU·2021년 8월 1일

개발 기록

목록 보기
2/8

회사에서 업무를 할 때 계속 들려오는 트랜잭션이라는 단어가 궁금해서 찾아보게 되었다.

트랜잭션이란?

Transaction은 거래라는 뜻을 가지고 있다. 아마 거래에서 물건을 주고 받는 것을 하나의 단위로 보기 때문에 이러한 이름을 쓴게 아닐까 싶다.
내가 이해한 바에 따르면 트랜잭션이란 데이터베이스에서 하나의 행위가 이루어지기 위해 필요한 여러개의 작업의 집합으로 하나의 작업단위이다.
이렇게 말하면 알아듣기 힘들테니 간단히 설명하자면 거래에서는 주는 것과 받는 것이 존재한다. 주기만 하는 것은 거래가 아니고 받기만 하는 것 또한 마찬가지로 거래가 아니다. 거래란 주고 받는 것이 모두 행해졌을 때 거래가 이루어졌다고 한다. 이때 거래는 트랜잭션에 해당하고 주고 받는 행위는 각각 집합에 속해있는 작업에 해당한다.

트랜잭션의 특징

트랜잭션의 특징으로는 크게 4가지가 존재한다.
1. 원자성(Atomicity)
2. 일관성(Consistency)
3. 독립성(Isolation)
4. 지속성(Durability)

1. 원자성(Atomicity)

트랜잭션 단위로 작업이 이루어져야 함을 뜻한다. 하나의 트랜잭션 작업들이 이루어 질 때 작업들이 모두 성공하거나 모두 실패하거나 둘 중 하나를 해야한다는 것이다. 예를 들자면 계좌 송금을 했을 때 보내는 사람의 계좌에서 출금만 되어서도 안되고 받는 사람의 계좌에 입금만 되어서도 안되는 것처럼 출금과 입금이 모두 이루어지거나 모두 이루어지지 않거나 해야 한다는 것이다.

2. 일관성(Consistency)

트랜잭션의 작업 처리 결과가 항상 일관성 있어야 함을 뜻한다. 트랜잭션이 진행되는 동안에 참조하는 데이터베이스가 변경 되더라도 변경된 데이터베이스가 아닌 처음에 트랜잭션을 진행 하기 위해 참조한 데이터베이스로 진행된다. 쉽게 생각하면 주거래계좌를 신한은행으로 설정하고 주거래 계좌에서 송금을 실행한 뒤 송금이 이루어지기 전에 우리은행으로 주거래 계좌를 바꾸더라도 출금은 신한은행에서 이루어진다고 보면 될 것 같다.(예시가 좀 이상한 것 같긴한데 충분히 알아들었을 것이라 생각한다.)

3. 독립성(Isolation)

둘 이상의 트랜잭션이 동시에 실행되고 있는 경우 각각의 트랜잭션은 서로의 연산에 끼어들 수 없다는 것을 뜻한다. 하나의 트랜잭션이 완료될 때까지 다른 트랜잭션이 결과를 참조할 수 없다. 10000원에서 1000원 출금이 처리되기전에 다른 2000원 출금이 일어난다면 계좌에 남아 있는 돈은 7000원이 아니라 8000원이 될 수 있기 때문에 독립성이 지켜져야 한다.

4. 지속성(Durability)

트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 한다는 것을 뜻한다.

트랜잭션의 Commit, Rollback 연산

Commit

Commit이란 하나의 트랜잭션이 성공적으로 끝났고, 데이터 베이스가 일관성 있는 상태에 있을 때, 하나의 트랜잭션이 끝났다는 것을 알려주기 위해 사용하는 연산이라고 한다. 이 연산을 사용하면 트랜잭션이 로그에 저장되고 Rollback 연산을 통해 트랜잭션 단위로 되돌릴 수 있다. 은행 어플에서 송금이 완료되었습니다. 페이지가 나오는 것과 동일하다고 보면 될 것 같다.

Rollback

Rollback이란 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진 경우, 트랜잭션의 부분적으로 이루어진 작업을 다시 취소시켜 원자성을 유지하는 것이다. 출금만 이루어지거나 입금만 이루어 졌을 때 송금에 실패했습니다가라는 창이 나오고 모두 되돌려졌을 떄와 동일하다고 보면 될 것 같다.

참고한 곳들

https://anaque.tistory.com/entry/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%B4%EB%9E%80-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%95%EC%9D%98-Transaction%EC%9D%B4%EB%9E%80-DB-SQL
https://mommoo.tistory.com/62

profile
I'll do my best

0개의 댓글