개발/개념정리

트랜잭션

ksc036 2026. 3. 19. 19:34

 


1. 트랜잭션이란?

트랜잭션은 데이터베이스에서 하나의 논리적인 실행 단위를 의미한다.
여러 작업을 하나로 묶어서, 모두 성공하거나 모두 실패하도록 보장한다.

예를 들어 계좌 이체를 생각해보면,
출금과 입금이 하나의 작업으로 묶여야 한다.
둘 중 하나만 성공하는 상황이 발생하면 데이터 정합성이 깨지기 때문이다.


2. 트랜잭션의 ACID 특성

트랜잭션은 다음 네 가지 특성을 만족해야 한다.

Atomicity (원자성)

트랜잭션에 포함된 모든 작업은 전부 성공하거나 전부 실패해야 한다.
중간 상태는 허용되지 않는다.


Consistency (일관성)

트랜잭션 실행 전과 후에 데이터는 항상 무결성 제약조건을 만족해야 한다.

예를 들어:

  • 계좌 잔액은 음수가 되면 안 된다
  • 외래키 제약조건은 항상 유지되어야 한다

Isolation (격리성)

각 트랜잭션은 서로 간섭하지 않고 독립적으로 실행되어야 한다.
다만, 이 격리 정도는 격리 수준에 따라 다르게 보장된다.


Durability (지속성)

트랜잭션이 commit된 이후에는 그 결과가 시스템 장애가 발생하더라도 유지되어야 한다.


3. 왜 격리 수준이 필요한가?

여러 트랜잭션이 동시에 실행되면 다음과 같은 문제가 발생할 수 있다.

  • Dirty Read: commit되지 않은 데이터를 읽는 경우
  • Non-repeatable Read: 같은 조회를 했는데 결과가 달라지는 경우
  • Phantom Read: 없던 데이터가 갑자기 나타나는 경우

이러한 문제를 어느 정도까지 허용할 것인지 결정하는 기준이 격리 수준이다.


4. 트랜잭션의 격리 수준

격리 수준은 성능과 데이터 정합성 사이의 균형을 조절하는 역할을 한다.


1) Read Uncommitted

가장 낮은 격리 수준이다.

  • commit되지 않은 데이터도 읽을 수 있다
  • Dirty Read가 발생할 수 있다

성능은 좋지만 데이터 신뢰성이 낮기 때문에 실제로는 거의 사용되지 않는다.


2) Read Committed

  • commit된 데이터만 읽을 수 있다
  • Dirty Read는 방지된다
  • 대신 Non-repeatable Read가 발생할 수 있다

같은 쿼리를 두 번 실행했을 때 결과가 달라질 수 있다는 특징이 있다.
PostgreSQL, Oracle의 기본 격리 수준이다.


3) Repeatable Read

  • 같은 트랜잭션 내에서는 동일한 조회 결과를 보장한다
  • Non-repeatable Read는 방지된다
  • 하지만 Phantom Read가 발생할 수 있다

핵심은 다음과 같다.

이미 조회한 데이터(row)는 변경되지 않도록 보장되지만,
조건에 해당하는 새로운 데이터가 추가되는 것까지는 막지 못한다.

MySQL(InnoDB)의 기본 격리 수준이다.


4) Serializable

가장 높은 격리 수준이다.

트랜잭션을 순차적으로 실행한 것처럼 동작하게 만들어
모든 동시성 문제를 방지한다.

다만, 락이 많이 발생하고 대기 시간이 길어지기 때문에 성능이 크게 저하된다.
실무에서는 거의 사용되지 않는다.


5. 문제 유형 정리

문제설명
Dirty Read commit되지 않은 데이터 읽음
Non-repeatable Read 같은 row의 값이 변경됨
Phantom Read 조건에 맞는 row가 추가됨

6. 정리

트랜잭션은 데이터의 정합성을 보장하기 위한 실행 단위이며,
격리 수준은 동시에 실행되는 트랜잭션 간의 간섭을 조절하기 위한 기준이다.

실무에서는 성능과 정합성의 균형을 고려하여
대부분 Read Committed 또는 Repeatable Read를 사용한다.

'개발 > 개념정리' 카테고리의 다른 글

What is a primary key? What is a foreign key?  (0) 2026.05.23
What is an index, and why do we use it?  (0) 2026.05.19
Network - OSI 5계층  (1) 2026.05.18
What are the four main principles of OOP?  (0) 2026.05.17
인증/인가 개념 정리  (0) 2026.03.21