목차
DB 동시성과 격리 수준
Transaction
- 더 이상 나눌 수 없는 작업의 최소 단위
- (DB) Query들의 집합 / (Server) 메소드들의 집합
ACID
- Atomicity - 원자성
- 트랜잭션 내의 작업들은 모두 성공하거나 모두 실패해야한다
- Consistency - 일관성
- 트랜잭션 Commit 이후 DB는 항상 일관된 상태여야한다.
- DB에 정의된 제약조건을 준수해야합니다.
- Isolation - 격리성
- 여러 트랜잭션이 동시에 진행될 때, 서로 간섭하지 않고 독립적으로 실행되어야 한다.
- Durability - 지속성
- 트랜잭션이 Commit된 결과는 영구히 저장되어야 한다.
DB 격리 수준
동시성 문제(격리를 제대로 하지 않았을 때)

- Dirty Read
- 특정 트랜잭션이 끝나지 않았음에도 불구하고 다른 트랜잭션에서 임시결과의 값을 읽어버리는 문제

- Non-Repeatable Read
- 한개의 트랜잭션 내에서 동일한 데이터를 여러번 읽었을 때 다른 트랜잭션의 결과로 인해 결과가 달라지는 문제

- Phantom Read
- 트랜잭션B가 특정 범위의 행을 읽고 다른 트랜잭션 A가 데이터를 추가 후, B가 동일 조건으로 다시 조회를 할때 새로운 데이터가 조회되는 현상
격리수준(Isolation Level) 종류

- READ UNCOMMITED
- 트랜잭션 A가 커밋하기 전에 다른 트랜잭션 B가 그 내용을 읽을 수 있다.(독립성 보장 X)
- Dirty Read, Non-Repeatable Read, Phantom Read 발생
- 트랜잭션 A가 커밋하기 전에 다른 트랜잭션 B가 그 내용을 읽을 수 있다.(독립성 보장 X)
- READ COMMITED
- 커밋이 완료된 데이터만 읽을 수 있다
- Dirty Read 방지 / Non-Repeatable Read, Phantom Read 발생
- Oracle, MSSQL, PostgreSQL 등의 기본정책
- 커밋이 완료된 데이터만 읽을 수 있다

- REPEATABLE READ(멱등성! 보장)
- 자신보다 낮은 트랜잭션 번호를 갖는 트랜잭션이 커밋한 데이터만 읽을 수 있다.
- Dirty Read, Non-Repeatable Read 방지 / Phantom Read 발생
- MySQL, InnoDB의 기본 정책
- MySQL은 MVCC정책에 의해 사실상 Phantom Read 방지
- 자신보다 낮은 트랜잭션 번호를 갖는 트랜잭션이 커밋한 데이터만 읽을 수 있다.

SERIALIZABLE
가장 높은 격리 수준Lock를 통해 모든 트랜잭션이 순차적으로 실행되도록 한다.Dirty Read, Non-Repeatble Read, Phantom Read 방지
한번에 한번씩 성능저하 안씀