본문 바로가기
데이터베이스

(오라클/oracle/Transaction) 트랙젝션 에 대한 생각

by 언제나초심. 2009. 9. 8.
반응형

개요

트랜젝션에 대한 주저리 글 입니다.



본문

오라클 DB를 사용할때에 트랜젝션 처리를 상당히 까다로운 문제입니다.

제가 사용했던 환경에서는 JAVA단 으로 트랙젝션 처리를 넘겨주어서, 

DB 자체에서는 트랙젝션을 처리하지 않게 하였었죠.


트랙젝션은 쉽게 말하면,

작업의 한 단계 입니다.


더 쉽게 얘기하겠습니다. 제가 글을 쓰고 있는데, 쓰기 시작한 시점에서 저장할때까지가 

하나의 트랜젝션이라고 할수 있겠습니다.


이 과정에서 쓰던 글을 날려버리면, 복구 할수가 없겠죠?


하나의 작업단위를 말하는게 트랜젝션이고, 다른 개념적으로 생각을 해보면,


하나의 작업을 종료 해버렸을 때가, 시작과 연결되어있는 하나의 트랜젝션 과정이 되는 겁니다.


제가, 여기서 글을 날리는 것이 두려워서, 임시저장을 했다고 하면, 임시저장 하는 과정까지가 하나의 트랜젝션이 되는 것입니다. 이해가 쉬우신가요? 

웹이라는 특성상과, DB와의 처리를 매끄럽게 하기 위하여서 트랜젝션 처리는 매우 중요하며, 직감적으로 파악하고 있어야 하는 부분입니다. (제 생각은 그렇습니다)

이러한 개념을 잘 이해하고 있으면, 다른 웹사이트를 돌아다닐때에도 유용합니다. 갑자기 느려지면, 아아 뭔가 작동하고 있구나. 라고 생각을 하게 되고, 너무 느려지면. 자연스럽게...


'트랜젝션 강제 종료 되어서, 글이 날라갔을수가 있겠네 ㅜㅜ'


라는 사고 가 가능해집니다. ㅎㅎ


오라클 내부에서도 트랜젝션을 처리하는 다양한 기능들이 있습니다. 그만큼 트랜젝션 처리라는 것은 굉장히 중요한 문제이기 때문입니다.


여러명이 하나의 DB에서 작업을 처리하게 되었을때. 누군가는 읽고, 누군가는 수정을 하고 있다면. (아예 삭제를 해버렸다고 가정을 하면) 문제가 발생합니다. 

누가 먼저 트랙젝션의 단계를 가지고 있는가? 이것이 핵심이 되겠지요?

상황이 골치아픈 지경까지 가게 된다면, DB에서는 dead-lock (데드락) 을 시켜버립니다.

둘다 강제 종료를 시켜버리는 겁니다.


그냥 확 익스플로러가 꺼지거나, 갑자기 로그아웃이 되거나, 뭐 다양한 처리가 가능하겠지요.

DB마다 다른 처리와 각각의 특성에 따른 면을 보여주기 때문에, 

그리고 아직 수양이 부족해서 ㅜㅜ 

여기서 이에 대한 설명을 줄이도록 하겠습니다. 


PLSQL 용어로 트랜젝션을 처리할 때에는

COMMIT (트랜젝션 완료 처리) 와 ROLLBACK (되돌림, 트랙젝션 시작 이전으로) 이 있습니다.


프로시저를 생성해서, 작성 도중에 강제적으로

COMMIT 구문을 넣어주면 그 전까지 되었던 작업을 완료 시켜버립니다.


다시 한번, 트랜젝션의 이해를 돕기 위해 설명을 더 해보겠습니다.


TABLE 에 데이터를 하나 INSERT(신규입력) 시켰습니다. 그리고 종료를 해버리면, 실제적으로 이 데이터는 들어가 있지 않습니다. 본인한테는 보일수 있으나, 실질적으로 작업이 완료가 안 되었기 때문에, 데이터가 안 들어가 있는 것으로 간주가 됩니다. 타인이 볼 때에는 신규입력한 내용이 보이지 않게 되는 겁니다.


하지만 COMMIT 을 해주면, 완전히 작업이 종료가 되면서, 타인도 볼수 있고, 실질적으로 데이터가 들어가게 됩니다.


만약 이 과정에서 ROLLBACK 을 하게 된다면, 데이터는 입력되지 않으며, 그 이전 COMMIT을 한 이후의 시점으로 돌아가 버립니다. 시간이 돌아가는 개념은 아니며, 작업과정을 취소 한다는 개념으로 이해를 하셔야 합니다.


그래서, 일반적으로 게시판이나 이런데에서 글을 적고 저장을 누르시면, INSERT 구문과 함께 자동으로 COMMIT 을 처리해주게 됩니다. 일반적으로 처리의 매끄러움을 위해서, 자동으로 COMMIT 을 해주는 경우가 많지요.


일단은 잘 모르시는 분이시라면, 쉽게 쉽게 생각하시길 바랍니다. 그리고, 점차 익숙해지면서, 트랜젝션에 대해서 점차 이해가 가기 시작할 것입니다.

반응형