본문 바로가기

MySQL/MySQL Admin

Transaction이란?

Transaction이란?

사전적 의미로는 거래, 매매, 처리(과정)을 뜻하는데 데이터베이스에서도 최소한의 처리 단위로 쓰이게 됩니다. 그 처리를 완료를 하게 되면 commit을 하게 되고 어떠한 이유로 처리이전으로 다시 되돌아 가는 것을 rollback이라고 합니다.

좀 더 쉽게 다가가 보면 흔히 쓰는 word, ppt, 한글문서를 생각해 보면 됩니다. ms-word나 한글문서를 작성을 다하고 저장버튼을 클릭을 하게 되면? 파일이 문서로 저장이 되게 됩니다. 하나의 처리과정이 끝난 것이죠(commit). 하지만 작성 중에 어떠한 에러나 이유로 인해서 저장이 안된 채로 문서가 닫혀버리면 이전에 저장한 것만 남고 새로 작성한 것들은 사라지게 됩니다(rollback). 이런 것처럼 “transactionsave.” 라고 생각하면 됩니다. 내가 한 행위에 대해 저장을 해야 하고 내가 한 행위에 대해서 저장을 하지 않으면? 사라지게 됩니다. 또 다른 예로 console 게임이 있겠죠. 1990년대, 2000년대 제가 어릴 때 막 몇 시간 동안 집중해서 막 키워놓고 저장을 하지 않으면…… 유니크 한 아이템을 얻었는데! 저장을 하지 않으면.. ㅎㅎ.. 이런 이유로 엄청난 멘붕을 겪었던 경험이 있습니다. 데이터베이스에서도 client가 작업한 것을 commit이라는 명령어로 저장하지 않으면 commitcommit사이의 저장한 부분이 사라지게 되고 이 것은 큰 손실로 이어지게 됩니다.

 

ACID??

위에서 트랜잭션에 대해서 말을 했는데 그럼 트랜잭션의 특성은 무엇이 있는지 보겠습니다.

트랜잭션과 관련해서 가장 많이 나오는 말이 ACID 인데요. ACID는 무엇일까요?

-       Atomictiy(원자성) – 원자성이라고 불리는 이 성질은 하나의 트랜잭션은 모두 완료 되거나 모두 취소되어야 한다는 것입니다. 위에서 말한 ms-word 같은 경우 저장을 했을 때 저장 시점의 데이터가 모두 남아 있어야 한다는 것인데요. abcdefg라는 것을 저장을 했는데 def가 날아간 채로 abcg만 남아 있는 상태가 될 수 없다는 것입니다. 그리고 저장이 되지 않았는데 abcdefg라는 글자 중 하나라도 남아 있을 수 없다는 것입니다.

 

-       Consistancy(일관성) – 트랜잭션이 성공적으로 끝나면 일관성 있는 데이터를 유지해야 하는 성질입니다. 저장이 됐는데 어떤 때는 abcdefg가 다 보이고 어떤 때는 abcdeg만 보이고 이러한 상황이 발생하면 안되기 때문에 언제 어디서 누가 무엇을 조회를 해도 저장된 데이터에 대해서는 항상 같은 값을 보여주어야 합니다. 또 다른 말은 무결성을 보장해야 한다라고도 합니다.

 

-       isolation(독립성, 분리성) – 하나의 트랜잭션 실행 시 다른 트랜잭션이 이 처리 과정을 침범해서는 안 된다는 성질입니다. 이 성질은 아래에 설명을 하겠지만 engine 또는 DBMS의 종류에 따라 조금씩 달라지게 됩니다. ms-word의 경우 누군가가 쓰기 작업을 하고 있다면 읽기전용밖에 뜨지 않게끔 되어 있습니다. 이러한 것이 누군가가 처리과정을 밟고 있다면 다른 사람이 그 트랜잭션에 대한 isolation을 지켜준다는 것이죠.

 

-       durability(지속성, 영속성) – 수행된 트랜잭션은 영원히 반영하기 위해 디스크에 저장을 하게 됩니다. ms-word 파일이 memory에 올라와서 작업을 하다가 저장을 하게 되면 파일로 남아서 삭제하기 전까지는 파일이 남아 있는 것처럼 하나의 처리과정이 끝나게 되면 디스크에 남아서 지속적으로 남아있어야 하는 성질입니다.

 

우선 여기까지만 하고 다음에는 parameter에 대해 하나하나 뜯어보도록 하겠습니다 ㅎ

 

참조 : http://dev.mysql.com/doc/refman/5.7/en/mysql-acid.html