트랜잭션

  • 트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다. 즉 여러 개의 쿼리들을 하나로 묶는 단위를 말한다.
  • 이에 대한 특징은 원자성, 일관성, 격리성, 지속성이 있으며 이를 한꺼번에 ACID 특징이라고 한다.

원자성

  • 원자성은 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징이다.
  • 트랜잭션 단위로 여러 로직들을 묶을 때 외부 API를 호출하는 것이 있으면 안 된다. 만약 있다면 롤백이 일어났을 때 어떻게 해야 할 것인지에 대한 해결 방법이 있어야 하고 트랜잭션 전파를 신경 써서 관리해야 한다.

일관성

  • 일관성은 '허용된 방식'으로만 데이터를 변경해야 하는 것을 의미한다.
  • 예를 들어 성별 컬럼에 대해 도메인이 남,여로 나뉘어져 있을 때 '무'와 같은 데이터가 존재하면 안 된다.

격리성

  • 격리성은 여러 트랜잭션 수행 시 서로 관여하지 못하는 것을 말한다.
  • 복수의 병렬 트랜잭션은 서로 격리되어 마치 순차적으로 실행되는 것처럼 작동되어야 하고, 여러 사용자가 같은 데이터에 접근할 수 있어야 한다. 

  • 격리 수준은 위 사진과 같다.
    • SERIALIZABLE: 트랜잭션을 순차적으로 진행시키는 것을 말한다. 즉, 여러 트랜잭션이 동시에 같은 행에 접근할 수 없다.
    • REPEATABLE_READ: 하나의 트랜잭션이 접근한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만 새로운 행을 추가하는 것은 막지 않는다. 이는 MySQL8.0의 innoDB 기본값이다
    • 팬텀 리드: 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우를 말한다. 예를 들어 조회된 데이터의 개수가 달라질 수 있다.
    • READ_COMMITTED: PostgreSQL에서 기본값으로 설정되어 있다. 다른 트랜잭션이 커밋하지 않은 정보는 읽을 수 없다. 즉, 커밋 완료된 데이터에 대해서만 조회를 허용한다. 하지만 어떤 트랜잭션이 접근한 행을 다른 트랜잭션이 수정할 수 있다.
    • 반복 가능하지 않은 조회: 한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 경우를 가리킨다.
    • READ_UNCOMMITTED: 하나의 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출되는 문제가 있어, 데이터 무결성이 위배될 수 있지만 가장 빠르다.
    • 더티 리드: 커밋되지 않은 내용이 조회되는 것을 말한다.

지속성

  • 지속성은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미한다.
  • 이는 데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 함을 뜻하며, 데이터베이스는 이를 위해 저널링, 롤백 등의 기능을 제공한다.
    • 저널링: 트랜잭션 등 변경 사항에 대한 로그를 남기는 것

무결성

  • 무결성이란 데이터의 정확성, 일관성, 유효성을 유지하는 것을 말한다.
  • 무결성 종류
    • 개체 무결성: 기본키로 선택된 필드는 null 값을 허용하지 않는다.
    • 참조 무결성: 부모 테이블에 존재하는 기본키 값 또는 null 값만을 가져야 한다.
    • 고유 무결성: 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우 그 속성 값은 모두 고유한 값은 가져야 한다. null이 들어갈 수 있다.
    • null 무결성: 특정 속성 값에 null이 올 수 없다는 조건이 주어진 경우 그 속성 값은 null이 될 수 없다는 제약 조건이다.

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

조인의 원리  (0) 2025.02.28
인덱스  (0) 2025.02.27
데이터베이스의 종류  (0) 2025.02.26
ERD와 정규화 과정  (0) 2025.02.19
데이터베이스의 기본  (0) 2025.02.18

+ Recent posts