[DB] 트랜잭션 이란 무엇일까?

728x90

안녕하세요🖐

 

오늘은 트랜잭션에 대해서 공부를 해봤습니다.

 

트랜잭션에 내용은 여러분들이 DB를 배우게 되면 제일 맨처음 배우는 내용이 아마 트랜잭션일 것이라고 생각합니다.

저는 단어에 대한 개념이 생소했어서, 제가 배웠던 내용이 트랜잭션인지도 모르고 공부를 했습니다.

 

제가 무엇을 말하는지 예상이 가시나요?

 

바로 "CRUD" 가 트랜잭션에 기본 입니다.

 

 

🖐 그러면 트랜잭션은 개념에 대해서 알아보겠습니다

 

(Transaction) -> 데이터베이스 상태를 변화시키기 위해 수행하는 작업의 단위 

 

데이터베이스 상태를 변화시킨다는 뜻을 보면 뭐가 생각이 나나요??

 

저는 Update, Delete 이 두개의 쿼리부터 생각이 났습니다.

 

즉 어떻게 보면 db 상태를 변화시킨다는 것은, 데이터를 조작하는 행위라고 볼수있겠죠?

결국 db를 컨트롤 하는 것은 개발자닌까요.

 

그런의미에서 SQL분류(DML,DDL,DCL) 이 3가지중

 

DML(Data Manipulation Language)

에 속합니다.

 

간단하게 설명을 하면은 데이터를 조작(선택,삽입,삭제,수정) 하는데 사용되는 언어입니다. 

즉 데이터를 변화시키는 것은 DML이고 DML을 사용한다는 것은 즉, 트랜잭션을 발생시킨다는 것 입니다.

 

그리고 트랜잭션의 특징은 우리 눈으로 보기에는 insert, update, delete 쿼리를 사용하면은 바로 db에 적용이 된 것처럼 보이긴 하지만, 이것은 임시 저장 형태로 저장된 것입니다.

(select는 트랜잭션을 발생시키기는 하지만 다른 쿼리랑은 성격이 달르다는 점을 참고하셔야 합니다)

자세한 내용이 궁금하시면

 

그래서 이 임시 저장 을 장점으로 이용할 수 있습니다.

 

어떻게? 

=> 임시저장을 함으로써, 완전히 적용된게 아니기 때문에, 취소를 시킬 수 있다.

 

 

그렇다면 트랜잭션의 예시를 한번 들어보겠습니다.

START TRANSACTION;

위 쿼리를 인터넷에서 사용한다는 글을 많이 읽어보았습니다.

그러나 제가 사용하는 MySQL 은 자동으로 트랜잭셔으로 처리하므로, 위 쿼리를 실행하지 않아도 된다고 합니다.

하지만 때에 따라서는 실행을 해야할수도 있으니, 일단은 알고있으면 좋을 것 같다는 생각이 듭니다.

 

1) select

select * from board; -- 조회 트랜잭션 발생

select는 애매한 것 같습니다. 어떠한 부분에서는 db를 변화시키는 Join? 같은 것을 사용하면은 트랜잭션이 발생되는 것이고, 아니면은 발생을 안한다고 저는 생각을 합니다.. 틀렸다면 죄송합니다.

나중에 한번 찾아보고 수정하겠습니다.

 

2) insert

INSERT INTO 테이블 (컬럼1, 컬럼2) VALUES (값1, 값2);

insert 트랜잭션의 예시 입니다.

 

3) update

UPDATE 테이블 SET 컬럼 = 새로운값 WHERE 조건;

update 트랜잭션의 예시 입니다.

 

4) delete

DELETE FROM 테이블 WHERE 조건;

Delete 트랜잭션의 예시입니다.

 

 

그리고 트랜잭션은 '임시 저장' 이라고 했습니다.

그렇다면 완벽하게 저장시키기 위한 쿼리와, 임시 저장을 원래 상태로 돌리기 위한 쿼리 또한 당연히 존재할 것 입니다.

그에 대해서 한번 알아보겠습니다.

출처 : Inpa.tistory

 

1) commit

INSERT INTO 테이블 (컬럼1, 컬럼2) VALUES (값1, 값2); -- 트랜잭션 발생

commit -- 저장

 

하나의 트랜잭션이 성공적으로 끝나고, db가 일관성 있는 상태일 경우, commit 을 사용하여 트랜잭션 실행 결과를 영구 저장한다고 이해하면 될 것 입니다.

 

 

2) rollback

INSERT INTO 테이블 (컬럼1, 컬럼2) VALUES (값1, 값2); -- 트랜잭션 발생

ROLLBACK; -- 되돌리기

 

하나의 트랜잭션 처리가 실수로 잘못되었을 때, 즉 트랜잭션의 원자성이 깨진경우, 트랜잭션 처리 과정에서 발생한 변경사항을 취소하는 쿼리 입니다. 즉 트랜잭션 실행 전으로 돌아갑니다.

 

즉 commit을 완료하여 영구저장 된 시점 기준으로, 그 이후에 트랜잭션을 발생시키고, 돌려야 하는 상황에서 Rollback을 하게된다면, commit을 완료한 방금시점으로 돌아간다는 뜻 입니다.

 

 

 

 

트랜잭션 특징(ACID)

1) 원자성

  • 트랜잭션이 db에 모두 반영되거나, 아니면 전혀 반영되지 않아야 함.

트랜잭션은 논리적인 작업 단위로, 일 처리는 작업 단위 별로 이루어져야 한다. 

만약 트랜잭션 단위로 데이터가 처리되지 않는다면, 설계한 사람은 데이터 처리 시스템을 이해하기 힘들 뿐만 아니라, 오작동 했을시 원인을 찾기가 매우 힘들어집니다.

 

 

2) 일관성

  • 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다.

트랜잭션 실행 동안 db내용이 변경되어도, 업데이트 된 db로 트랜잭션이 수행되는게 아닌, 업데이트 이전 db로 실행이 됨을 의미합니다.

 

 

3) 독립성

  • 둘 이상의 트랜잭션이 동시에 실행이 될 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.

즉 다시 말하면 하나의 트랜잭션이 수행완료 되기전 까지, 다른 트랙잭션은 실행이 될수 없음.

 

4) 지속성

  • 트랜잭션이 성공적으로 완료되었을 때, 결과는 영구정으로 반영되어야 한다.

 

이상 트랜잭션 관련 포스팅 마치겠습니다. 감사합니다.

 

 

728x90