CS

[CS] 트랜잭션과 무결성에 대하여

chillmyh 2024. 1. 9. 23:43

  1. 트랜잭션
    • 트랜잭션이란 데이터베이스 상태를 변경하는 일련의 작업을 하나의 논리적 단위로 묶은 것입니다.
      이때, 데이터 베이스에 접근하는 방법은 쿼리이므로, 즉 여러개의 쿼리들을 하나로 묶는 단위를 말합니다. Spring에서는 @Transactional 에너테이션을 붙여 여러 쿼리 관련된 코드들을 하나의 트랜잭션으로 처리해줍니다.

  1. ACID
    • 트랜잭션의 속성을 설명하는 네 가지 원칙.
    • 원자성(Atomicity) : “all or nothing”. 모든 작업이 완전히 수행되거나, 아무것도 수행되지 않아야합니다. 작업 중 하나라도 실패하면 모든 작업은 롤백됩니다.
    • 일관성 (Consistency) : 트랜잭션이 실행 전과 후에 데이터베이스는 일관된 상태를 유지해야 합니다. 트랜잭션 전후의 데이터는 사전에 허용된 방식으로만 데이터를 변경해야하는 것을 의미합니다.
    • 격리성 (Isolation) : 여러 트랜잭션이 동시에 실행되더라도 각 트랜잭션은 다른 트랜잭션과 분리돼야 합니다. 여러 트랜잭션이 동시에 실행될 때 다른 트랜잭션에 영향을 주지 않도록 Spring에서 격리 수준을 설정하여 보장합니다. 격리 수준에 대해서는 내용이 길고 많아 따로 블로그 링크를 첨부합니다. [MySQL] 트랜잭션의 격리 수준(Isolation Level)에 대해 쉽고 완벽하게 이해하기
    • 지속성 (Durability) : 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 반영되어야 합니다.
      따라서, 트랜잭션의 수행이 지속되려면 데이터베이스에 장애가 발생하더라도 원래 상태로 복구하는 기능이 있어야 함을 뜻하며, 이를 위해 대표적으로 롤백 등의 기능을 제공합니다.
  2. 무결성
    • ACID중 일관성과 무결성은 밀접한 관련이 있습니다. 트랜잭션은 일관성을 유지하고, 데이터베이스 작업이 데이터베이스의 무결성 규칙을 준수하도록 보장해줍니다.
    • 무결성의 종류로는 개체 무결성, 참조 무결성, 고유 무결성, Null 무결성이 있습니다.
    • 개체 무결성 (Entity Integrity): 개체 무결성은 기본 키(primary key)나 유일한 식별자(unique identifier)로 지정된 열은 null이 아니며, 중복되지 않는다는 것을 보장합니다. 이는 각 레코드가 고유하게 식별되고, 기본 키 필드가 null 값이 아닌 유효한 값을 가져야 함을 의미합니다.
    • 참조 무결성 (Referential Integrity): 참조 무결성은 관계형 데이터베이스에서 테이블 간의 관계를 유지하며, 외래 키(foreign key)가 참조하는 값은 항상 유효한 것을 보장합니다. 즉, 외래 키의 값은 참조하는 테이블의 기본 키 값이거나 null이어야 하며, 외래 키가 참조하는 값이 변경되거나 삭제될 때 이를 적절하게 처리하여 데이터의 일관성을 유지합니다.
    • 고유 무결성 (Entity Integrity): 고유 무결성은 테이블의 각 행이 고유한 식별자(unique identifier)를 가지는, 즉 기본 키(primary key)를 가진 경우, 이를 통해 각 행은 식별 가능하며 고유한 값을 가져 식별될 수 있습니다.
    • Null 무결성 (Null Integrity): 특정 속성 값에 Null 이 올수 없다는 조건이 주어진 경우, 그 속성 값은 Null이 될 수 없다는 제약 조건입니다.