전체 목록
데이터베이스Hard#307

트랜잭션 격리 수준은 동시성 문제를 어떻게 제어하나요?

#데이터베이스#Transaction#Isolation#동시성

답변 포인트

dirty read, non-repeatable read, phantom read를 어떤 수준에서 막는지 비교해보세요.

정답 및 해설

빠른 요약

트랜잭션 격리 수준은 동시에 실행되는 트랜잭션이 서로의 변경을 어느 정도 볼 수 있는지 정하는 규칙입니다. READ COMMITTED, REPEATABLE READ, SERIALIZABLE처럼 수준이 높아질수록 이상 현상을 더 많이 막지만, 잠금과 충돌이 늘어 성능과 동시성이 떨어질 수 있습니다.

트랜잭션 격리 수준은 동시에 실행되는 트랜잭션이 서로의 변경을 어느 정도 볼 수 있는지 정하는 규칙입니다. READ COMMITTED, REPEATABLE READ, SERIALIZABLE처럼 수준이 높아질수록 이상 현상을 더 많이 막지만, 잠금과 충돌이 늘어 성능과 동시성이 떨어질 수 있습니다.

핵심 개념

핵심 기준은 정합성과 동시성 사이의 균형입니다. 이 개념은 단순히 용어를 외우는 것보다, 어떤 문제를 줄이기 위해 등장했는지와 실제 코드나 운영 환경에서 어떤 trade-off를 만드는지 함께 이해하는 것이 중요합니다.

데이터베이스는 여러 요청을 동시에 처리하면서도 데이터 정합성을 지켜야 합니다. 격리 수준은 읽기 일관성, 잠금, MVCC 전략과 연결되며 비즈니스 요구에 따라 적절한 수준을 선택해야 합니다.

동작 흐름

  1. 트랜잭션이 동시에 같은 데이터를 읽거나 수정합니다.
  2. 격리 수준에 따라 다른 트랜잭션의 미커밋/커밋 변경을 볼 수 있는 범위가 결정됩니다.
  3. DB는 잠금이나 MVCC로 이상 현상을 줄입니다.
  4. 정합성 요구와 성능 비용을 비교해 격리 수준을 선택합니다.

실제 예시

SQL
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

START TRANSACTION;
SELECT stock FROM products WHERE id = 1;
UPDATE products SET stock = stock - 1 WHERE id = 1;
COMMIT;

재고처럼 정합성이 중요한 작업은 격리 수준과 갱신 조건을 함께 설계해야 합니다.

실무에서 주의할 점

  • 격리 수준 이름이 같아도 DBMS마다 구현 세부 동작이 다를 수 있습니다.
  • 격리 수준을 높인다고 모든 경쟁 조건이 자동으로 사라지는 것은 아닙니다.
  • 성능 저하나 deadlock 가능성을 모니터링해야 합니다.

함께 연결해서 보면 좋은 키워드

데이터베이스, Transaction, Isolation, 동시성

면접에서 짚으면 좋은 포인트

  • 격리 수준은 이상 현상을 줄이는 수단이지만 DBMS별 구현 차이가 있다는 점을 함께 말해야 합니다.
  • 재고 차감처럼 중요한 작업은 격리 수준뿐 아니라 조건부 update, lock, unique constraint를 함께 설계합니다.

정리

한 줄로 정리하면, 트랜잭션 격리 수준은 동시 실행 중 발생할 수 있는 읽기 이상 현상을 제어하며, 정합성과 성능 사이의 trade-off를 만듭니다. 실무에서는 개념을 적용하는 조건과 적용하지 않았을 때 생기는 문제까지 함께 이해하는 것이 중요합니다.

관련 질문

같은 카테고리/태그 기준