[Transaction] 2022_10_21

HWANGKYOJIN·2022년 10월 21일
0

Database

목록 보기
3/6

What is Transaction ?

A database transaction symbolizes a unit of work, performed within a database management system (or similar system) against a database. A transaction generally represents any change in a database.

트랜잭션은 작업의 단위인데 그 작업은 데이터베이스 안에서 상태를 변화 시키기위해 수행하는 작업의 단위라고 설명하고 있다.
우리가 SQL 쿼리문을 이용하여 데이터베이스에 명령어를 수행 하는 일련의 과정들이다. 우리가 돈을 누군가에게 송금한다고 가정해보면 현재 내 계좌에 있는 돈이 다른사람에게 송금이 되면 내 계좌에 있는 돈의 잔고는 새롭게 업데이트 되야 하고, 돈을 받은 사람의 잔고도 새롭게 갱신되어야 할 것이다. 이 일련의 과정들을 트랜잭션이라 하고 트랜잭션은 정의에 따라 원자성, 일관성, 독립성, 지속성으로 나눌수 있다. 이를 각 단어의 앞글자만 따와서 원자성(Atomicity) 일관성(Consistency) 독립성(Isolation) 지속성(Durability) ACID라고 부른다.

트랜잭션의 정의 중에서 일관성 독립성 지속성이라는 단어는 직관적으로 이해가 됬는데
일관성 = 데이터베이스가 중간에 변경되더라도 중간중간 업데이트가 진행되는것이 아닌 처음에 실행 된 데이터베이스를 기준으로 결과값이 나오게 된다.
독립성 = 위와 관련된 용어로 둘 이상의 트랜잭션이 동시에 실행되면 하나의 트랜잭션이 다른 트랜잭션에 끼어 들 수 없다.
지속성 = 트랜잭션이 성공하게되면 그 결과는 지속적으로 반영되어야 한다라고 정의하고있다.
하지만 원자성이라는 단어는 트랜잭션이 데이터베이스에 모두 반영되거나, 또는 전혀반영되지 않아야 된다고 설명되어 있는데 어디에서 유래가 된 단어인지 궁금해서 찾아봤다. 구글에서 atomic mean in programming 이라고 검색해보면 제일 상단에서 해답을 찾아 볼 수 있었다. 우선 atomic 하다는 건 프로그래밍에서 한번에 하나씩이라는 의미를 지니고 있고, 이는 물리학에서 원자라는 단위가 더이상 쪼갤수 없는 가장작은 단위에서 유래된 단어라고 설명되어있다. 프로그래밍에서 Atomic한 Operation 이란 한번에 모두 실행되거나 / 아예 실행되지 않거나 둘중 하나이며, 진행중인 작업이라는 상태는 없다고 했다. 자원을 공유하는 상황에서 non-atomic한 작업이 이루어지게 되면 치명적인 오류가 발생 할 수 있다.

데이터를 공유하고 있는 상황에서 각각의 트랜잭션에 원자성이 결여되고 동시에 진행된다고 한다면 겨울이가 통장 잔고를 조회했을때 10,000원이 있었으니 겨울이는 10,000원짜리 개껌을 살 수 있고, 반달이도 조회했을 때 통장 잔고가 10,000원이 있으니 5,000원짜리 사료를 구매 할수 있게된다. 하나의 트랙잭션이 발생했을 때 다른 트랙잭션이 중간에 끼어들지 못하게 Lock을 해줘야 한다.

겨울이가 개껌을 구매하고 있을때 반달이는 사료를 구매 할 수 없다. 겨울이가 10,000원짜리 개껌을 구매하고 통장의 잔고가 0원으로 업데이트 된 후에 반달이는 통장잔고를 조회해볼수 있고 새롭게 업데이트된 0원의 잔고로는 반달이는 5,000원짜리 사료를 구매 할 수 없게 된다.

0개의 댓글