데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말하며, 여러 개의 쿼리들을 하나로 묶는 단위이다.
트랜잭션과 관련하여 쿼리들이 모두 수행되거나 하나도 수행되지 않는 "All or Nothing"을 의미한다. commit과 rollback을 통해서 데이터의 무결성이 유지된다.
또 하나의 트랜잭션 안에 외부 API가 있을 경우 rollback에 어떻게 대처할지에 대한 방법이 정해져 있어야 한다.
허용된 방식으로만 데이터를 변경해야 한다는 것을 의미한다. 즉 항상 일관된 방식으로 트랜잭션 작업을 처리해야 한다.
격리성이며, 여러 트랜잭션이 동시에 진행될 때 서로 끼어들 수 없다는 것을 의미한다. 이 격리성에는 여러 수준이 존재한다.
트랜잭션을 순차적으로 진행시키는 것을 말한다. 여러 트랜잭션이 동일한 행에 동시접근 할 수 없고, 그렇기 때문에 교차 상태가 일어날 확률이 많고, 성능이 떨어진다.
하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정하지 못한다. 다만 새로운 행이 추가될 수는 있다.
다른 트랜잭션이 commit한 정보에 대해서만 조회가 가능하다. 또 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 또 수정할 수 있다. 가장 많이 사용되는 격리수준으로 MySQL8.0, PostgreSQL 등의 기본값입니다.
다른 트랜잭션이 commit하지 않은 행에 대해서도 다른 트랜잭션에 노출이 됩니다. 가장 격리 수준이 낮고, 데이터 무결성을 해칠 수 있으나, 조금의 손실을 무시하고 빠른 속도를 내기 위해서는 유용합니다.
트랜잭션이 성공적으로 완료되었을 경우, 그 결과는 영원히 반영되어야 하는 것을 의미한다. 이를 위해 체크섬, 저널링, 롤백 등의 기능을 제공한다.
DB에서 데이터를 빠르게 찾기 위한 하나의 장치이다. 특정한 데이터 필드를 기반으로 인덱스를 만들 수 있는 것 같다.(?) 인덱스를 생성하게 되면 별도 메모리 공간에 데이터와 데이터의 물리적 주소를 함께 저장하고, 이때 데이터를 오름차순 정렬!!! 한다.
참고 사항 정도로 알아두자. 일반적으로 인덱스는 B+트리라는 자료구조로 이루어져 있으며, 이는 큰 대수확장성을 지녀(깊이와 리프 수의 간의 관계) 효율적으로 index를 저장해준다.