코딩요
쉬운코드 기술 블로그
코딩요
전체 방문자
오늘
어제
  • 분류 전체보기 (54)
    • 개발자로 성장하기 (11)
    • 컴공 (25)
      • 운영체제 (12)
      • 알고리즘 (1)
      • 데이터베이스 (11)
      • 네트워크 (1)
    • 쉬운코드 (15)
      • 쉬운코드 소개 (6)
      • 쉬운코드 영상 보는 법 (3)
      • 쉬운코드 정정 보고서 (1)
      • 쉬운코드 스토리 (4)
      • 기타 이것저것 (1)
    • 면접 tip (3)

공지사항

  • 아이폰 앱에서는 슈퍼땡스 보내지 말아주세요ㅠㅠ
  • 쉬운코드 멤버십을 소개합니다
  • 쉬운코드 운영 철학

인기 글

hELLO · Designed By 정상우.
글쓰기 / 관리자
코딩요

쉬운코드 기술 블로그

DB 트랜잭션 isolation 속성과 lost update
컴공/데이터베이스

DB 트랜잭션 isolation 속성과 lost update

2022. 10. 11. 09:28

 

트랜잭션 isolation 속성의 의미 

 

트랜잭션의 속성 중에는 isolation 속성이 있다

 

우리말로 격리라는 뜻을 가진 isolation의 의미는

 

여러 트랜잭션이 동시에 실행해도 각각의 트랜잭션이 서로 다른 트랜잭션에게 영향을 받지 않고

 

격리돼서 실행되는 것처럼 동작해야 함을 의미한다

 

 

 

 

 

 

 

Lost update 현상이란?

 

isolation 속성이 없으면 여러 트랜잭션들이 동시에 실행될 때 예상했던 결과와는 다른 결과가 생긴다

 

 

 

예를 들어보겠다

 

X의 계좌에는 50이 있고

 

Y의 계좌에는 10이 있다

 

만약 X에서 Y에게 40을 이체하는 트랜잭션 1과

 

X에게 30을 입금하는 트랜잭션 2가 동시에 실행됐다고 가정해 보자

 

그러면 시간 타이밍에 따라 여러 결과가 나올 수 있는데, 아래는 그중에 한 가지 예다

 

 

 

트랜잭션1 트랜잭션2
start transaction  
  start transaction
  read(X) => 50
read(X) => 50  
  write(X = 80)
write(X = 10)  
  commit
read(Y) = 10  
write(Y = 50)  
commit  

 

 

두 개의 트랜잭션이 모두 종료됐을 때

 

정상적으로 동작했다면 X와 Y의 최종 값은

 

X = 40, Y = 50

 

이 됐을 것이다

 

 

 

하지만 위 결과는

 

X = 10, Y = 50

 

이 됐다

 

트랜잭션 2가 수행한, X에 30을 더한 결과가 사라진 것이다

 

이 현상이 바로 lost update 이다

 

 

 

 

 

lost update 발생 이유

 

트랜잭션 1과 트랜잭션 2는 모두 X를 업데이트하기 때문에

 

제대로 계산이 되려면 두 개 중에 하나는

 

상대 트랜잭션이 업데이트한 X 값을 읽어야 하는데

 

둘 다 상대 트랜잭션이 write(X)를 하기 전에 read(X)를 했기 때문이다

 

 

 

 

이렇게, 업데이트한 내용이 사라지는 현상을

 

lost update 라고 부른다

 

 

 


 

 

 

 

여러 트랜잭션이 동시에 실행되면 lost update 외에도 다양한 종류의 이상 현상들이 발생할 수 있다

 

그리고 이런 이상 현상들이 생기지 않아야 한다는 게 트랜잭션의 isolation 속성이 의미하는 바다

 

 

 

 

하지만 이 isolation 속성은 트랜잭션의 ACID 속성들 중에 가장 많이 타협되는 속성이기도 하다

 

DBMS의 성능과 연관이 있기 때문이다 

 

isolation의 엄격함과 DBMS의 트랜잭션 처리량과 사이에서 개발자가 트레이드할 수 있도록

 

isolation level을 제공하는 이유도 이것 때문이다

 

 

 

 

 

쉬운코드는 본질에 충실합니다

 

 

 

 

 

👉 " 트랜잭션 ACID 속성 간단히 정리 " 글 보러 가기

 

👉 " 트랜잭션 ACID " 영상 보러 가기

 

👉 " isolation level과 다양한 이상 현상 " 영상 보러 가기

 

저작자표시 비영리 변경금지 (새창열림)
    '컴공/데이터베이스' 카테고리의 다른 글
    • [DB] key와 functional dependency 차이
    • DB 정규화에 쓰이는 functional dependency (함수 종속)
    • MySQL 트랜잭션 serializable 격리 레벨은 MVCC인가?
    • DB 트랜잭션의 conflict serializable 이해를 위한 선수 개념
    코딩요
    코딩요
    8년차 백엔드 개발자가 이해하기 쉽게 설명합니다. 배워서 남주는 블로그! 이해하기 쉬운 기술 블로그! 쉬운코드입니다 :)

    티스토리툴바