본문 바로가기

이직중/기술면접

트랜잭션(Transaction)

데이터베이스 관련 기술 면접 질문 중에 가장 기본으로 자주 나오는 주제 중 하나는 트랜잭션이라고 할 수 있습니다. 그렇다면 기본이면서도 굳이 개념을 말하기에는 또 가물가물한 이 트랜잭션은 무엇을 의미하는 걸까요?

 

[트랜잭션]

트랜잭션이란 영어 낱말로는 거래를 뜻하지만 ATM, 데이터베이스 등의 시스템에서는 '쪼갤 수 없는 업무처리의 단위'를 말합니다. 즉, 트랜잭션은 최소한의 단위를 나타내며 어떠한 행위의 중단을 방지하기 위한 목적을 가질 때 사용되는 시스템이라고 할 수 있습니다. 만약 트랜잭션 과정이 제대로 이뤄질 경우 커밋하게 되고 과정이 제대로 이뤄지지 않을 경우 아예 처음으로 되돌아가는 롤백이 이뤄집니다. 이러한 트랜잭션을 행하기 위해서는 조건이 필요한데, 그 조건을 ACID라고 하며 아래와 같습니다.

 

- 원자성(atomicity)

원자성은 하나의 트랜잭션이 더 이상 작게 쪼갤 수 없는 최소한의 업무 단위라는 것을 나타냅니다. 즉, 트랜잭션의 모든 일련의 과정이 모두 반영되던지 아니면 모두 반영되지 않던지의 보장이 되는 것이고 일부, 부분의 실행이 되어서는 안 된다는 것을 말합니다. 따라서 만약 일부만 실행되거나 중단될 경우 트랜잭션은 롤백을 하여 아예 실행되지 않았던 이전으로 돌아가게 됩니다.

* 원자성 보장 : 만약 트랜잭션의 길이가 너무 길어 중간에 오류가 나타나 다시 처음부터 롤백을 하는 과정이 부담스러울 때 확실하게 오류가 나지 않는 지점까지를 임시 저장 영역인 롤백 세그먼트를 지정할 수 있습니다. 만약 롤백 세그먼트 영역을 지정할 경우 롤백이 처음까지 되지 않고 지정된 영역까지 롤백이 되어 다시 트랜잭션을 실행하면서도 처음부터 진행되지 않고 해당 영역부터 시작할 수 있습니다.

 

- 일관성 (consistency)

일관성은 트랜잭션이 완료될 경우 이전과 일관된 데이터베이스 상태를 유지하는 것을 말합니다. 예를 들어 트랜잭션 수행 이후에도 기본 키, 외래 키 등과 같은 제약사항은 유지되어야 하며 계산 수행 이후에도 정확한 계산 값을 유지해야 한다는 것을 의미합니다. 이때 일관성의 보장을 위해 트리거를 사용할 수 있는데, 트리거는 데이터베이스 시스템이 자동적으로 수행할 동작을 명시할 때 사용되는 시스템으로, 어떤 행위의 시작을 알리는 시스템입니다.

 

- 고립성 (isolation)

고립성이란 하나의 트랜잭션 수행 시 다른 트랜잭션의 작업에 끼어들지 못하도록 보장하는 것입니다. 즉, 트랜잭션끼리는 서로를 간섭할 수 없고 트랜잭션이 실행하는 도중에 변경한 데이터는 이 트랜잭션이 완료될 때까지 다른 트랜잭션이 참조하지 못하게 하는 특성입니다. 트랜잭션이 완료되는 건 커밋 또는 롤백의 과정이 끝났을 경우를 말합니다. OS의 세마포어와 비슷한 개념으로 lock&excute unlock을 통해 고립성을 보장할 수 있습니다. 특히 트랜잭션에서는 데이터를 읽을 때, 여러 트랜잭션이 읽을 수는 있도록 허용하는 공유 락(shared_lock)을 합니다. 즉, 공유 락은 데이터 쓰기를 허용하지 않고 오직 읽기만 허용하는 것입니다. 또한 데이터를 쓸 때는 다른 트랜잭션이 읽을 수도 쓸 수도 없도록 하는 배타 락(exclusive_lock)을 사용합니다. 그리고 읽기, 쓰기 작업이 끝나면 언락을 통해 다른 트랜잭션이 락을 할 수 있도록 데이터에 대한 잠금을 풀어줍니다. 단, 락(lock)과 언락을 잘못 사용하게 되면 데드락(deadlock) 상태에 빠질 수 있습니다. 즉, 모든 트랜잭션이 아무것도 수행할 수 없는 상태가 되는 것입니다.

 

- 지속성 (durability)

지속성은 트랜잭션이 정상적으로 종료된 다음에는 영구적으로 데이터베이스에 작업의 결과가 저장되고 이 저장된 값은 장애 발생 후에도 변함없이 보관되어야 한다는 것으로 트랜잭션이 정상적으로 완료된 경우에는 버퍼의 내용을 데이터베이스에 확실히 기록해야 하며, 부분 완료된 경우에는 작업을 취소하여야 한다는 말입니다. 즉, 정상적으로 완료 또는 부분 완료된 데이터는 DBMS가 책임지고 데이터베이스에 기록하는 성질이 지속성이며 영속성이라고 표현하기도 합니다.

 

 

'이직중 > 기술면접' 카테고리의 다른 글

'www.google.com'을 주소창에 입력하면?  (0) 2022.11.30
RDBMS와 NoSQL의 차이  (0) 2022.11.29