이오이오이오
코딩하는헬린이
이오이오이오
전체 방문자
오늘
어제
  • 분류 전체보기 (39)
    • 기타 (2)
      • 잡다한 (2)
      • 헬스 (0)
    • 개발 (21)
      • Sql (3)
      • Java (2)
      • Spring (8)
      • OAuth (4)
      • node.js (1)
      • AWS (1)
      • Linux (2)
    • 이론 (11)
    • Dev Tool (1)
      • IntelliJ IDEA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • reactive streams
  • nft
  • webflux
  • Ipfs
  • 블록체인지갑
  • kakaologin
  • pos
  • springboot
  • bip
  • java
  • Spring Boot
  • 블록체인
  • blockchain
  • 니모닉
  • oauth
  • restfulapi
  • 카카오로그인
  • POW
  • Spring
  • RESTful
  • db 성질
  • 로이필링
  • isolation level

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
이오이오이오

코딩하는헬린이

Transaction Isolation Level
이론

Transaction Isolation Level

2022. 11. 8. 16:21
반응형

안녕하세요

코딩하는헬린이입니다. 

면접을 진행하면서 isolation Level에 대하여 따로 고민하거나 생각해두질 않아 포스팅합니다.

 

일단 트랜젝션의 성질부터 알아보는게 좋을듯합니다.

 

트랜잭션의 성질 (ACID)

  • 원자성(Atomicity)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
  • 일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.
  • 격리성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다. 
  • 지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.

하지만 격리성을 높이면 트랜잭션을 순차적으로 처리해야하는 방면에 있어서 성능이 나빠지게 됩니다.

그래서 이러한 문제로 인하여 격리성을 4단계로 분리합니다.

Isolation Level (4단계)

  • READ UNCOMMITTED(커밋되지 않은 읽기) --> level0
    - A라는 데이터를 B로 바꾸는 동안 B가 완료되지 않은 상태에서 Dirty Read(다른 트랜잭션이 완료되지 않은 상태에서 읽는것) 가 가능하다.
  • READ COMMITTED(커밋된 읽기) --> level1
    - 커밋이 완료된 데이터가 확정된 시점에 읽는게 가능하다.
  • REPEATABLEREAD(반복 가능한 읽기) --> lovel2
    - 트랜잭션이 발생하기 전 데이터에 대해서만 조회가 가능하다. 
  • SERIALIZABLE(직렬화 가능) --> level3
    - 가장 높은 일관성을 보이며, 읽기 작업중에도 Lock 을 걸어버린다. 고로 가장 엄격한 단계이다

 

 

  • Dirty Read 
    - 트랜잭션이 완료되지 않은 상태에서 중간에 데이터를 읽어들이는 행위

  • Non-Repeatable Reads
    - 한 트랜잭션안에서 조회 쿼리를 두번 요청했을경우 다른 데이터가 나오는 현상이며 다른 트랜잭션에서 업데이트를 진행 했을경우 이러한 현상이 발생한다.

 

  • Phantom reads
    - 한 트랜잭션내 두번의 조회하는 경우 없었던 Row 생기는 행위이며, Insert에 인하여 생긴다.

 

 

ref 

https://medium.com/geekculture/transaction-isolation-levels-f438f861e48a

 

Transaction Isolation Levels

ACID Properties / Concurrency issues and Transaction Isolation Levels In Databases

medium.com

https://zzang9ha.tistory.com/381

 

[MySQL] - 트랜잭션의 격리 수준(Isolation level)

📎 글또 6기 포스팅 1. 미치도록 더웠던 7월의 회고 2. 사용자가 게시물을 작성할 때의 트랜잭션 처리 3. Spring AOP - (1) 프록시 패턴, 데코레이터 패턴 4. [MySQL] - 트랜잭션의 격리 수준(Isolation level) 5

zzang9ha.tistory.com

 

반응형

'이론' 카테고리의 다른 글

RESTfull API 설계를 위한 규칙  (0) 2022.11.02
[BlockChain] IPFS (파일 분산 시스템)  (0) 2022.10.14
[BlockChain] BIP-32 / BIP-39 / BIP-44 는 무엇인가 ?  (0) 2022.10.12
CI(Continuous Integration), CD(Continuous Delivery / Deployment) 란 무엇일까?  (0) 2020.08.03
DevOps 란 무엇일까?  (0) 2020.07.28
    '이론' 카테고리의 다른 글
    • RESTfull API 설계를 위한 규칙
    • [BlockChain] IPFS (파일 분산 시스템)
    • [BlockChain] BIP-32 / BIP-39 / BIP-44 는 무엇인가 ?
    • CI(Continuous Integration), CD(Continuous Delivery / Deployment) 란 무엇일까?
    이오이오이오
    이오이오이오

    티스토리툴바