Computer Science/Database

[Database] 트랜젝션

ooeunz 2020. 3. 23. 15:00
반응형

트랜잭션이란?

한번 쿼리를 실행하면 모두 수행되거나, 모두 수행되지 않는 작업 수행의 논리적인 단위를 이야기 합니다.

 

 


트랜잭션의 4가지 특징이란?

트랜잭션에는 4가지 특징이 있습니다. 이를 앞글자만 따서 ACID라고 부릅니다. acid는 정보처리기사 시험이나 면접에서도 자주 출제되는 중요한 특성이니 꼭 기억해두는 것이 좋습니다.

 


Atomicity(원자성)
어떤 트랜젝션 안의기능들이 모두 수행되거나 모두 수행되지 않아야 합니다.


Consistency(일관성)
트랜젝션 발생 전후로 DB의 일관성이 깨지지 않아야 합니다.


Isolation(독립성)
각 트랜젝션은 독립적으로 이루어져 서로에게 간섭할 수 없습니다.

 

Durability(지속성)
트랜젝션 발생 후 디비의 변경 사항은 지속적으로 유지되어야 합니다.

 


commit과 rollback이란?

 

 

commit
하나의 논리적 단위에 대한 작업이 성공적으로 끝났을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산입니다.


rollback
하나의 트랜잭션 처리가 비정상적으로 종료되어 DB의 일관성을 깨뜨렸을 때, 모든 연산을 취소 시키는 연산입니다.

 


트랜잭션의 격리성 관련 문제점은 어떤게 있나요?

 

Dirty Read
한 트랜잭션이(T1)이 데이터에 접근하여 'A'를 'B'로 변경하고 아직 커밋 하지 않았을 때, 해당 데이터를 다른 트랜잭션(T2)이 Read하게 될 경우, T2가 읽은 데이터는 'B'가 될 것입니다. 하지만 T1이 최종 커밋을 하지 않고 종료된다면 T2가 가진 데이터는 꼬이게 됩니다.


Non-Repeatable Read
한 트랜잭션(T1)이 Read하는 사이에 다른 트랜잭션이 값을 변경하고가면 T1은 변경된 데이터를 찾게 Read하게 됩니다.


Phantom Read
한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던(Phantom) 레코드가 두 번째 쿼리에서 나타나는 현상을 말합니다.

 

 


트랜잭션의 격리성 수준에는 어떤 것들이 있나요?

 

Read Uncommitted
SELECT 문장이 수행되는 동안 해당 데이터에 Lock이 걸리지 않는 레벨입니다.
즉, 커밋하지 않은 데이터를 읽을 수 있습니다.

 

Read Committed
SELECT 문장이 수행되는 동안 해당 데이터에 Lock이 걸리게 되는 레벨입니다.

 

Repeatable Read
트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회할 수 있는 레벨입니다.
때문에 트랜잭션 내에서 한번 조회한 데이터를 반복해서 조회해도 같은 데이터가 조회됩니다.

 

Serializable
트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Lock이 걸립니다.
즉 Read 작업 역시 모두 Lock이 걸리게되고 동시 처리 성능이 급격히 떨어질 수 있습니다.

 


NoSQL에선 트랜잭션 처리를 어떻게 하나요?

NoSQL은 자체적으로 트랜젝션 기능을 지원해주지 않지만, Application 단에서 트랜젝션 처리를 해줄 수 있습니다.

 

 


로그 선행 기입

로그 선행 기입(write-ahead logging, WAL)은 데이터베이스 시스템에서 ACID의 특성 가운데 원자성 내구성을 제공하는 기술의 한 계열입니다. WAL을 사용하는 시스템에서 모든 수정은 적용 이전에 로그에 기록됩니다. 하나의 예로 어느 프로그램이 특정 작업을 수행하는 동안 컴퓨터에 정전이 일어났을 때, 다시 시작할 때 프로그램은 어느 작업이 수행을 성공적으로 마쳤는지, 절반 성공했는지, 아니면 실패했는지를 잘 알고 있어야 합니다. 로그 선행 기입이 사용된다면 프로그램은 이러한 로그를 검사하여 예기치 않은 정전 시 해야할 일과 실제로 했던 일을 비교하게 됩니다.

반응형