# non-repeatable read
격리성 수준과 발생하는 문제
.o { color: #CD853F; } .b { color: #5F9EA0; } 들어가기전에.. 예제의 편의를 위해 위와 같은 약어를 사용하겠다. 오늘 하루동안 격리성 수준을 이해하기 위해 부단히도 애를 먹었다. 아직까지 전부 제대로된 이해를 하진 못했지만, 이 부분은 코드를 직접 작성하면서 경험을 하면서 익혀나가야 할 것 같다. 많이 부족해보일 수도 있겠지만, 이거 한번 이해해보려고 발버둥 쳤던 기록을 남기고 싶어서 이 글을 작성한다. READ UNCOMMITTED 가장 낮은 단계의 격리수준이다. Commit 되지 않은 데이터를 읽을 수 있다. 이 단계에서는 Dirty Read라는 데이터 일관성이 깨지는 문제가 발생하기 때문에 거의 모든 RDBMS에서는 사용하지 않는다. Dirty Read - Case 1 Dirty Read란, 트랜잭션 A가 진행되는 도중에 트랜잭션 B가 그 값을 변경하는 경우

트랜잭션 격리 수준(Isolation level)
트랜잭션 격리 수준 트랜잭션 격리 수준이란, 동시에 여러개의 트랜잭션이 수행될 때 각 트랜잭션이 얼만큼의 고립성을 가지는지 나타내는 것. 즉, 특정 트랜잭션이 다른 트랜잭션에 변경된 데이터를 보여줄것인지에 대한 여부를 나타내는 것. 격리 수준은 4가지로 나뉜다. Read UnCommited Read Commited Repetable Read Serializable Read UnCommited 특정 트랜잭션에서 변경된 데이터를 트랜잭션이 commit(), Rollback 여부와 상관없이 다른 트랜잭션에게 보여지는 격리 수준. 참조 : https://nesoy.github.io/articles/2019-05/Database-Transa
트랜잭션
트랜잭션이란? DBMS에서 데이터를 다루는 논리적인 작업의 단위 보통 단일 SQL문을 사용하기도 하지만, 여러개의 SQL문을 순차적으로 수행하여 다루기도 한다. 트랜잭션을 이용하는 이유 데이터베이스에서 장애가 일어나는 경우, 데이터를 복구하는 작업의 단위로 사용할 수 있다. 데이터베이스에서 여러 작업이 동시에 같은 데이터를 다룰 경우에 작업을 분리하는 단위로 트랜잭션을 사용할 수 있다. 트랜잭션 문법 트랜잭션은 "TODO에 해당하는 쿼리를 '모두 실행시키거나', '모두 실행시키지 않게' 한다." 트랜잭션의 성질 원자성(Atomicity) : 트랜잭션에 포함된 작업은 "전부 수행되거나", "전부 수행되지 않아야 한다." 트랜잭션 수행중 오류가 발생할 경우, 회복(Recovery) 알고리즘을 통해 변경한 내용을 취소한다. 일관성(Consistency) : 트랜잭션을 수행하기 전이나 수행한 후나 "데이터베이스는 항상

[JPA & Hibernate] Transaction Management
✔ 깃허브 소스코드 > ✔ Udemy 강의영상 🚀 트랜잭션이란? > 데이터베이스의 상태를 변환시키는 하나의 논리적인 작업 단위를 구성하는 연산들의 집합입니다. 예를 들어 A 계좌에서 B 계좌로 일정 금액을 이체한다고 가정합시다. A 계좌의 잔액을 확인한다. A 계좌의 금액에서 이체할 금액을 빼고 다시 저장한다. B 계좌의 잔액을 확인한다. B 계좌의 금액에서 이체할 금액을 더하고 다시 저장한다. 이러한 과정들이 모두 합쳐져서 "계좌 이체" 라는 하나의 작업 단위를 구성하게 됩니다. ✔ 하나의 트랜잭션은 Commit 되거나 Rollback 됩니다 Commit 연산 하나의 논리적 단위(트랜