기술면접_트랜잭션이란?

reggias·2023년 5월 9일
0

기술면접

목록 보기
11/18

트랜잭션

트랜잭션(Transaction)은 데이터베이스에서 데이터의 무결성과 일관성을 보장하기 위한 작업 단위를 의미합니다. 트랜잭션은 일련의 작업을 하나의 논리적인 작업 단위로 묶어서 처리하는 것으로, 여러 개의 쿼리나 데이터 변경 작업이 하나의 단위로 묶여 원자성을 갖습니다.

트랜잭션은 다음과 같은 특징을 가집니다.

원자성(Atomicity): 트랜잭션 내에서 수행되는 모든 작업은 전체가 성공하거나 전체가 실패해야 합니다. 즉, 트랜잭션이 실행되는동안 어떤 이유로든 중단될 경우, 이전 상태로 롤백(Rollback)됩니다.
일관성(Consistency): 트랜잭션이 수행되기 전과 후의 데이터베이스 상태가 일관성을 유지해야 합니다. 즉, 트랜잭션이 수행되기 전에 정의된 제약 조건이나 규칙이 트랜잭션 수행 후에도 만족되어야 합니다.
격리성(Isolation): 트랜잭션 수행 중에는 다른 트랜잭션에 의해 영향을 받지 않도록 격리되어야 합니다. 이를 통해, 다른 트랜잭션이 동시에 실행되는 경우 발생할 수 있는 문제를 방지할 수 있습니다.
지속성(Durability): 트랜잭션이 성공적으로 완료되면, 해당 변경 내용은 영구적으로 저장되어야 합니다.
트랜잭션은 데이터베이스에서 데이터를 안전하게 처리하기 위해 매우 중요합니다. 트랜잭션을 사용하면, 여러 개의 작업 단위가 하나의 논리적인 작업 단위로 묶여, 데이터베이스의 일관성과 무결성을 보장할 수 있습니다.

공유 락과 배타적 락

트랜잭션에서 데이터베이스의 일부를 사용하려면 락(Lock)을 걸어야 합니다. 락은 다수의 트랜잭션이 동시에 데이터베이스에 접근하지 못하도록 보호하는 기능을 합니다.

공유 락(Shared Lock)은 여러 트랜잭션이 데이터를 읽을 수는 있지만, 쓰기는 불가능한 상태를 의미합니다. 반대로 배타적 락(Exclusive Lock)은 한 트랜잭션이 쓰기 작업을 수행하는 동안 다른 트랜잭션은 해당 데이터에 접근할 수 없는 상태입니다.

낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)

트랜잭션에서 락을 거는 방식에는 낙관적 락과 비관적 락이 있습니다. 낙관적 락은 트랜잭션이 데이터를 수정할 때, 충돌이 발생하지 않을 것으로 가정하고 락을 거는 방식입니다. 즉, 트랜잭션이 커밋할 때까지 락을 걸지 않고, 커밋 직전에 충돌을 검사합니다.

반면 비관적 락은 충돌이 발생할 가능성을 고려하여 미리 락을 걸고, 작업을 수행하는 방식입니다. 이 방식은 락으로 인한 오버헤드가 크기 때문에 낙관적 락보다는 느릴 수 있습니다.

이해를 도와주는 유튜브!

https://www.youtube.com/watch?v=sLJ8ypeHGlM

profile
sparkle

0개의 댓글