Transaction에 대해 설명해주세요.
면접용 답변
트랜잭션은 데이터베이스에서 하나의 논리 작업 단위로, 여러 개의 연산이 하나의 묶음으로 실행되는 개념입니다.
트랜잭션은 데이터 정합성을 보장하고, 작업이 일부만 적용되는 문제를 방지하기 위해 사용됩니다. 또한, 원자성, 일관성, 고립성, 지속성으로 이루어진 ACID 원칙을 따르고 이 원칙을 통해 모든 연산이 하나의 단위로 처리되며 데이터의 무결성이 유지됩니다.
트랜잭션이 끝나면 Commit 또는 Rollback을 수행할 수 있으며, 효율적인 트랜잭션 관리를 위해 트랜잭션 범위를 최소화하고 격리 수준을 적절히 조정하는 것이 중요합니다.
개념 설명
트랜잭션(Transaction)이란?
트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위이며, 연산들이 하나의 작업처럼 실행되도록 보장하는 기능이다. 사용자의 관점에서는 하나의 작업 단위, 시스템의 관점에서는 데이터 변경을 수행하는 프로그램의 단위로 볼 수 있다.
예를 들어, 계좌 이체를 수행할 때 한 계좌에서 돈이 빠져나가고 다른 계좌로 돈이 입금되는 과정이 있다. 이 두 개의 작업은 반드시 함께 실행되거나, 함께 실행되지 않아야 한다. 하나의 작업이 실패하면 전체 작업을 취소해야 하며, 이를 보장하는 것이 트랜잭션의 역할이다.
트랜잭션의 4가지 특성 (ACID)
트랜잭션은 ACID 특성을 만족해야 한다.
원자성 (Atomicity)
트랜잭션 내의 모든 작업이 완전히 실행되거나, 전혀 실행되지 않아야 한다.
중간에 문제가 발생하면 롤백(Rollback) 되어야 한다.
예시) 계좌 이체 중 한쪽 계좌에서 돈이 빠져나갔는데, 다른 계좌로 입금되지 않으면 안 된다.
일관성 (Consistency)
트랜잭션이 수행된 후에도 데이터의 무결성이 유지되어야 한다.
데이터베이스의 제약 조건(외래키, UNIQUE 등)을 위반하면 안 된다.
예시) 계좌 잔액이 음수가 되지 않아야 한다.
고립성 (Isolation)
동시에 여러 트랜잭션이 실행될 때 서로 간섭하지 않아야 한다.
특정 트랜잭션이 완료되기 전까지 다른 트랜잭션에서 해당 데이터를 볼 수 없어야 한다.
지속성 (Durability)
트랜잭션이 성공적으로 완료(Commit)되면 그 변경 사항이 영구적으로 반영되어야 한다.
시스템 장애가 발생하더라도 Commit된 데이터는 손실되지 않아야 한다.
트랜잭션의 상태
트랜잭션은 수행 중에 여러 상태를 거친다.
Partially Committed와 Committed 차이점
트랜잭션과 Lock의 차이
역할
데이터 정합성 보장
동시성 제어
적용 대상
논리적 작업 단위
특정 레코드 또는 테이블
동작 방식
모든 작업이 성공하면 Commit, 실패하면 Rollback
여러 프로세스가 같은 데이터를 동시에 변경하지 못하도록 제어
예제
계좌 이체(송금 & 입금 동시 수행)
동일한 데이터에 여러 사용자가 동시에 접근하지 못하도록 제한
트랜잭션을 효과적으로 관리하는 방법
트랜잭션의 실행 시간을 최소화하여 데이터베이스 리소스 점유를 방지한다.
트랜잭션 중간에 Savepoint를 설정하여 부분 롤백이 가능하도록 한다.
오류 발생 시 즉시 Rollback을 처리하여 데이터 정합성을 유지한다.
Last updated