CS Transaction
업데이트:
카테고리: CS
/태그: Transaction
트랜잭션
DB에서 하나의 논리적 기능을 수행하기 위한 작업의 단위 DB에 접근을 쿼리로 진행하므로 트랜잭션은 여러개의 쿼리로 이뤄진 쿼리문이라고 할 수 있다.
원자성 - all or nothing
트랜잭션과 관련된 일이 모두 수행됬거나 되지 않았거나를 보장하는 특징 → 완료 / 실패
트랜잭션을 수행하는 중에 문제가 발생하여 중간에 멈췄을 경우 아예 건들이기 전으로 돌아간다.
A가 B에게 500만원을 이체한다
- A의 잔고를 확인한다.
- A의 통장에서 500만원을 뺀다.
- B의 통장에 500만원을 넣는다.
3가지의 작업을 수행하게 되고 우리는 이 중간과정을 볼 수 없고 오직 500만원을 이체했다는 결과만 알 수 있다.
만약 이 작업을 중간에 취소한다면 A의 통장에서는 500만원이 빠져나가지 않는다. 2번 항목이 실행된 후 결과인 500만원이 빠진 상태로 멈추는 것이 아니라 아예 실행되기 전으로 돌아간다.
수행된 트랜잭션이 DB에 영구적으로 저장 = 커밋이 수행
쿼리 수행 중 문제가 생기면 실행되기 전으로 돌림 = 롤백
트랜잭션 전파 : A 트랜잭션이 동작중인 과정에서 B 트랜잭션을 실행하는 것
일관성
허용된 방식
으로만 데이터를 변경해야되는 것
돈이 들어있는 통장에서만 들어있는 금액 한도내로 출금이 가능함, 0원 통장에서 돈이 나갈 수 없음
격리성
트랜잭션 수행시 서로 끼어들지 못하게 하는 것
복수의 병렬 트랜잭션이 있을 때, 트랜잭션들 끼리는 서로 격리되어 순차적으로 실행되는 것 처럼 보여야 하고, DB는 여러 사용자가 같은 데이터에 접근할 수 있어야함
마냥 순차적으로 실행하면 성능이 안좋게 된다.
격리성으로 인해 문제[팬텀리드, 반복가능하지 않은 조회, 더티 리드]가 발생한다.
-
팬텀리드(Phantom read)
한 트랜잭션 내에서 동일한 쿼리를 실행했을 때, 조회결과가 다르게 나온 경우
A →
나이가 12이상인 회원을 조회
= 3개의 테이블이 조회B →
나이가 15인 회원 레코트 삽입
, 이 이후에는 4개의 테이블이 조회된다.자기가 선택한 값과 다른 행이 선택될 수 있음
-
반복가능하지 않은 조회 (Non-Repeatable read)
한 트랜잭션 내에서 같은 행에 두 번이상 조회를 했는데, 그 값이 다른경우
A →
큰돌, 100
로 조회B →
큰돌, 1
로 변경 후 커밋A →
큰돌, 1
로 조회내가 선택한 값의 데이터가 변경
-
더티 리드 (Dirty Read)
한 트랜잭션이 실행 중일 때 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 행의 데이터를 읽을 수 있을 때 발생
A →
큰돌, 100
로 조회B →
큰돌, 1
로 변경A →
큰돌, 1
로 조회B → 변경사항 커밋
격리수준에 따라서 발생하는 문제 유형이 다르며 아래의 수준이 있다.
-
SERIALIZABLE
트랜잭션을 순차적으로 진행 여러 트랜잭션이 동시에 같은 행에 접근할 수 없기때문에 데드락이 일어날 확률이 높고, 성능이 가장 나쁘다.
-
REPEATABLE_READ
하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막지만, 추가에 대해서는 막지 않기 때문에 이후에 추가적인 행이 발견될 수 있다.
-
READ_COMMIT
커밋하지 않은 행의 정보는 읽을 수 없음, 커밋이 완료된 데이터에 한해서만 조회를 허용함 A 트랜잭션에서 수정한 행을 B 트랜잭션이 수정할 수 있음
뒤늦게 커밋한 정보가 실제 데이터 베이스에 반영
-
READ_UNCOMMIT
아직 커밋되지 않은 수정사항도 읽을 수 있음 읽기 성능을 우선시 하는 상황에서 사용, 데이터의 정확성보다는 실시간성이 우선인 경우에 사용됨
지속성
성공적으로 수행된 트랜잭션은 영원히 반영되어야 함 데이터베이스에 에러가 발생해도 원래 상태로 복구 가능함
-
체크섬
중복 검사의 한 형태로, 오류 정정을 통해 송신된 자료의 무결성을 보호하는 방법 데이터가 수정되지 않았는지 확인하는 용도로 사용 → 일치하지 않으면 무언가 문제가 생겼다는 것을 알 수 있음
-
저널링
파일 / 데이터베이스에 변경사항을 commit 하기전에 로깅하는 것, 트랜잭션 반영전에 로그를 남김
그래서 커밋이 되면 로그정보가 데이터 베이스에 영구적으로 저장되고, 오류가 생겨 롤백이 된다면 로그정보도 함께 사라진다.
무결성
데이터의 정확성, 일관성, 유효성을 유지, 무결성이 유지되어야 현실세계에서 데이터가 일치하는지에 신뢰를 줄 수 있음
- 개체 무결성 : 기본키로 선택된 필드는 NULL 값을 허용하지 않음
- 참조 무결성 : 서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지
- 고유 무결성 : 특정 속성에 대해 고유한 값을 가지도록 조건이 있는경우, 그 속성값은 모두 고유한 값을 가짐
- NULL 무결성 : 특정 속성값이 필수로 들어가야 된다면 그 속성은NULL이 될 수 없음