반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

트랜잭션과 무결성 본문

CS/데이터베이스

트랜잭션과 무결성

5_hyun 2022. 8. 17. 21:33

트랜잭션

트랜잭션은 DB에서 하나의 논리적 기능을 수행하기 위한 작업 단위이다. 즉 DB에 접근하는 방법은 쿼리라서 이 여러 개의 쿼리를 하나로 묶는 단위이다. ACID 특징이 있고 원자성, 일관성, 독립성, 지속성을 의미한다.

 

원자성(atomicity)

원자성은 "all or nothing"이다. 즉 모두 수행되었거나 되지 않았거나이다. 따라서 트랜잭션을 커밋했는데 문제가 발생하면 롤백을 해 아무것도 수행되지 않는다.

 

-예시

강아지 잔고: 500만원, 고양이 잔고 0원, 이 때 강아지가 고양이에게 300만원을 보낸다. 

강아지 잔고 조회 -> 강아지 잔고 -300만원 -> 고양이 잔고 +300만원

 

이 경우에 작업을 취소하면 다시 강아지는 500만원, 고양이는 0원을 가져야 한다. 그렇기에 모든 작업을 실행하지 않은 것 처럼 해야 하기 때문에 all or nothing이다.

만약 트랙잭션 단위로 로직을 묶을 때, 외부 API를 호출하면 안된다. 만약 호출하면 롤백이 일어났을 때를 대비해서 관리해야 한다.

 

-커밋(commit)

커밋은 여러 쿼리가 성공적으로 처리되었다는 명령어이다.

트랜잭션 단위로 수행되고 변경 내용이 영구 저장되는 것이다. 따라서 커밋이 수행되면 하나의 트랜잭션이 성공적으로 수행됐다고도 한다.

update -> insert -> delete 이런 쿼리가 하나의 트랜잭션 단위로 수행되고 DB에 영구 저장된다.

 

-롤백(rollback)

에러나 이슈 때문에 트랜잭션을 예전 상태로 돌리는 것이 롤백이다.

 

=> 커밋과 롤백에 의해 데이터 무결성이 보장된다. 그리고 변경 사항을 쉽게 확인할 수 있고 작업을 그룹화할 수 있다.

 

-트랜잭션 전파

트랜잭션은 커넥션 단위로 수행해서 커넥션 객체를 넘겨 수행해야 한다. 하지만 매번 넘겨주면 귀찮아서 트랜잭션 관련 메서드 호출을 하나의 트랜잭션에 묶이도록 하여 전파하고 이를 트랜잭션 전파라고 한다.

일관성(consistency)

일관성은 허용된 방식으로만 데이터 변경을 하는 것을 의미한다. DB의 모든 데이터는 조건, 규칙에 따라 유효함을 가져야 한다.

ex) 강아지 잔고: 500만원, 고양이 잔고: 0원인데, 고양이가 강아지에게 돈을 입금할 수 없다.

 

격리성(isolation)

격리성은 트랜잭션 수행 시 서로 끼어들지 못하는 것이다. 복수의 병렬 트랜잭션은 서로 격리되어 순차적으로 실행되는 것처럼 작동 해야 한다. 그리고 DB는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다. 격리성은 여러 개의 수준으로 나눠서 격리성을 보장한다.

 

지속성(durability)

지속성은 성공된 트랜잭션은 영원히 반영되어야 하는 것을 의미한다. 이는 DB에 시스템 장애가 발생해도 원상태로 복구하는 기능이 있어야 한다. 이를 위해 체크섬, 저널링, 롤백 기능이 있어야 한다.

  • 체크섬: 중복 검사의 한 형태이며 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순한 방법
  • 저널링: 커밋 전에 로깅하여 트랜잭션 등 변경 사항에 로그를 남기는 것

무결성

무결성은 데이터의 정확성, 일관성, 유효성을 유지하는 것이다. 무결성을 유지하려면 DB 값과 현실 값이 일치하는지 확인해야 한다.

  1. 개체 무결성: 기본기로 선택된 필드는 빈 값을 허용하지 않는다.
  2. 참조 무결성: 서로 참조 관계에 있는 두 테이블 데이터는 항상 일관된 값을 유지해야 한다.
  3. 고유 무결성: 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우 그 속성 값은 모두 고유한 값을 가진다.
  4. NULL 무결성: 특정 속성 값에 NULL이 올 수 없다는 조건이 있으면 그 속성 값은 NULL이 될 수 없다.
728x90
반응형

'CS > 데이터베이스' 카테고리의 다른 글

인덱스  (0) 2022.12.20
데이터베이스의 종류  (0) 2022.08.27
ERD와 정규화 과정  (0) 2022.08.04
관계, 키  (0) 2022.07.19
데이터베이스-엔티티, 릴레이션, 속성, 도메인, 필드와 레코드  (0) 2022.07.10
Comments