트랜잭션

  • 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
  • ACID 특징을 가짐
    • 원자성
    • 일관성
    • 독립성
    • 지속성

원자성

  • 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았음을 보장하는 특징
  • 트랜잭션 단위로 여러 로직들을 묶을 때 외부 API를 호출하는 것이 있으면 안된다.
    • 만약 있다면 롤백이 일어났을 때 어떻게 해야 할 것인지에 대한 해결 방법이 있어야 하고 트랜잭션 전파를 신경써서 관리해야 한다. → 스프링의 @transactional이 이를 지원해줌
  • commit
    • 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령
  • rollback
    • 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 (취소)명령
  • 트랜잭션 전파
    • 트랜잭션을 수행할 때 커넥션 단위로 수행하기 때문에 커넥션 객체를 넘겨서 수행해야 한다.
      • 하지만 이를 매번 넘겨주기가 어렵고, 귀찮다.
    • 이를 넘겨서 수행하지 않고 여러 트랜잭션 관련 메서드의 호출을 하나의 트랜잭션에 묶이도록 하는 것을 트랜잭션 전파라고 한다.

일관성

  • 허용된 방식으로만 데이터를 변경해야 하는 것을 의미

격리성

  • 트랜잭션 수행 시 서로 끼어들지 못하는 것을 의미한다.
  • 복수의 병렬 트랜잭션은 서로 격리되어 마치 순차적으로 실행되는 것처럼 작동되어야 하고 데이터베이스는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다.
  • 순차적으로 하면 쉽게 되겠지만 성능이 나빠진다.
  • 격리성은 여러 개의 수준으로 나뉘어 격리성을 보장한다.

 💡 격리성 높음, 동시성 낮음

  1. SERIALIZABLE
  2. REPEATABLE_READ
  3. READ_COMMITTED
  4. READ_UNCOMMITTED

 💡 격리성 낮음, 동시성 높음

  • 밑으로 갈수록 동시성이 강해지지만 격리성은 약해지고 위로 갈수록 동시성은 약해지고 격리성은 강해진다.

격리 수준에 따라 발생하는 현상

  • 팬텀 리드
    • 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우
  • 반복 가능하지 않은 조회
    • 한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 경우를 가리킨다.
    • 팬텀 리드와 다른 점은 행 값이 달라질 수 있지만 팬텀리드는 다른 행이 선택될 수도 있다는 점이다.
  • 더티 리드
    • 한 트랜잭션이 실행 중일 때 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 행의 데이터를 읽을 수 있을 때 발생

격리 수준

  • SERIALIZABLE
    • 트랜잭션을 순차적으로 진행시키는 것
    • 동시에 같은 행에 접근 불가
    • 성능이 가장 떨어지는 격리 수준
  • REPEATABLE_READ
    • 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아준다.
    • 새로운 행을 추가하는 것은 막지 않는다.
  • READ_COMMITTED
    • 가장 많이 사용되는 격리 수준
    • 다른 트랜잭션이 커밋하지 않은 정보는 읽을 수 없다.
      • 커밋 완료된 데이터에 대해서만 조회를 허용한다.
    • 어떤 트랜잭션이 접근한 행을 다른 트랜잭션이 수정할 수 있다.
  • READ_UNCOMMITTED
    • 가장 낮은 격리 수준
    • 하나의 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출되는 문제가 있다.
      • 하지만 가장 빠르다.
    • 되도록 사용하지 않는 것이 이상적이다.
      • 어림잡아 집계하는 데에 사용하면 좋다.

지속성

  • 성공적으로 수행한 트랜잭션은 영원히 반영되어야 하는 것을 의미한다.
    • 이를 위해 체크섬, 저널링, 롤백 기능을 제공

무결성

  • 데이터의 정확성, 일관성, 유효성을 유지하는 것을 말한다.

개체 무결성

  • 기본키로 선택된 필드는 빈 값을 허용하지 않는다.

참조 무결성

  • 서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지해야 한다.

고유 무결성

  • 특성 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우 그 속성 값은 모두 고유한 값을 가진다.

NULL 무결성

  • 특정 속성 값에 NULL이 올 수 없다는 조건이 주어진 경우 그 속성 값은 NULL이 될 수 없다는 제약조건

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

인덱스 / 조인  (1) 2023.09.07

+ Recent posts