트랜잭션(Transaction)이란?
데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위이다. 다시 말해 여러 쿼리를 논리적으로 하나의 작업으로 묶어주는 것이다.

Atomicity(원자성)
트랜잭션은 DB에 모두 반영되거나, 아예 반영되지 않아야 한다.
-> 완료되지 않은 트랜잭션을 DB에 반영하면 안된다.
Consistency(일관성)
트랜잭션 작업처리결과는 항상 일관성 있어야 한다. (DB의 제약이나 규칙을 어겨서는 안된다.)
-> DB는 항상 일관된 상태로 유지돼야 한다.
Isolation(독립성)
둘 이상의 트랜잭션이 동시 실행되고 있을 때 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
-> 각 각의 트랜잭션은 서로 간섭 없이 독립적으로 이루어져야 한다.
Durability(지속성)
트랜잭션이 성공적으로 완료됐으면 결과는 영구적으로 반영돼야 한다.

: 커밋 전의 트랜잭션의 데이터 변경 내용을 다른 트랜잭션이 읽는 것을 허용
(Dirty Read / Non-Repeatable Read / Phantom Read 문제 발생)
: 커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회 가능
(Non-Repeatable Read / Phantom Read 문제 발생)
Non-Repeatable Read는 같은 트랜잭션 내에서 셀렉트 쿼리를 날렸을 때 결과 값이 다르게 나오는 문제
: 트랜잭션 범위 내에서 조회한 내용이 항상 동일함을 보장
Phantom Read 문제 발생
: 한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서 접근 불가

