본문 바로가기

면접 질문지 소스

면접 질문 : 트랜잭션에 대해 설명해주세요

728x90

트랜잭션(Transaction) 

질의를 하나의 묶음 처리해서 수행하는 작업 수행의 논리적 단위이다.

 

계좌이체 예시로 A라는 인물이 10000원을 가지고 있고, B도 10000원을 가지고 있고, A가 B에게 2000원을 보내야 되는 상황이라면, A의 계좌에서 2000원이 차감되야하고, B의 계좌에서는 2000원이 증가되야한다. 하나의 상황에서 여러 작업이 수행되야 한다. 이를 트랜잭션이라고 한다.

 

트랜잭션 사용이유

DB서버에 여러 개의 클라이언트가 동시에 접근하거나, 응용프로그램이 갱신을 처리하는 과정에서 데이터 부정합을 방지하기 위해 사용된다. 

 

트랜잭션 특징은 4가지로 나뉜다.

 

-Atomicity(원자성)

트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장합니다. All or Nothing의 개념으로 작업 단위의 일부분만 실행하지 않습니다.

원자성 보장은??

수행하고 있는 트랜잭션에 의해 변경된 내역을 유지하면서, 이전에 commit된 상태를 임시 영역에 따로 저장합니다. 트랜잭션 길이가 길어진다면, 중간 저장 지점인 Save point를 지정할 수 있습니다.

 

-Consistency(일관성)

트랜잭션이 성공적으로 완료되면, 일관적인 DB 상태를 유지해야 한다. 여기서 말하는 일관성이란 데이터 타입이 정수형에서 갑자기 문자형으로 되지 않는 것을 말한다.

일관성 보장은??

트랜잭션 수행 전과 후에 데이터 모델의 모든 제약 조건(기본키, 외래키, 도메인, 도메인 제약조건) 을 만족하는 것을 통해 보장합니다. 그렇다면 어떻게 일관성을 보장할까? 어떤 이벤트와 조건이 발생했을때 트리거를 통해 보장합니다.

 

-Isolation(독립성)

어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다.

고립성 보장은??

 

a) 병행 처리

- CPU가 여러 프로세스를 처리하는 것처럼 트랜잭션이 정해진 시간을 할당하여 작업을 하다가 부여된 시간이 끝나면 다른 트랜잭션을 실행하는 방식으로 트랜잭션들을 처리하는 것을 말합니다.

- 병렬로 처리하면 많은 트랜잭션이 데이터를 처리하는 과정에서 공통된 데이터를 조작하게 되어, 혼란을 야기할 수 있다.

- 공통된 데이터가 처리되거나 간섭되면, 갱실분실, 오손판독, 반복불가, 팬텀 문제 등 여러 문제를 야기할 수 있다.

- 그렇기에 트랜잭션에 고립성 보장은 필수적이다.

 

b) 고립성 보장

- lock과 Excute unlock을 통해 고립성을 보장할 수 있다.

- 데이터를 읽거나 쓸 때 문을 잠궈서 다른 트랜잭션이 들어오지 못하게 하고, 수행을 마치면 unlock을 통해 데이터를 다른 트랜잭션이 접근할 수 있도록 허용하는 방식이다.

- 트랜잭션에서는 데이터를 읽을 때 여러 트랜잭션이 읽을 수 있도록 허용하는 shared_lock을 한다.

- 데이터를 쓸 때는 다른 트랜잭션이 읽을 수도 쓸 수도 없도록 하는 exclusive_lock을 한다.

- 모든 읽기, 쓰기 작업이 끝난다면, unlock을 통해 다른 트랜잭션이 lock할 수 있도록 데이터에 대한 lock을 풀어준다.

- 유의해야할 점은 lock과 unlock을 잘못사용한다면 데드락 상태에 빠질 수 있다.

 

 

c) 2PL 프로토콜(2 phase locking protocol)

- 데드락을 방지하기 위해 2PL 프로토콜을 이용합니다.

- 2PL 프로토콜은 여러 트랜잭션이 공유하고 있는 데이터에 동시에 접근하는 것을 제한하는 프로토콜입니다.

- 해당 프로토콜은 (1) growing phase, (2) shrinking phase 라는 2가지 단계의 locking이 존재한다.

- growing phase는 read_lock, write_lock을 의미하고, shrinking phase는 unlock을 의미합니다.

 

- 2PL 프로토콜은 growing phase, shrinking phase가 섞이면 안된다는 규칙이다.

- 즉 lock과 unlock이 번갈아 수행되지 않고, lock이 수행된 후 unlock이  쭉 수행되어야 한다.

 

-Durablity(영구성)

결과는 영구적으로 반영되어야 한다.