스터디 (Study)

[DB] - DB의 특징 및 트랜잭션

phanre 2023. 5. 10. 22:03

DB의 4가지 특징

 

1. 실시간 접근성

    데이터베이스는 비정형적인 질의에 대해 실시간 처리에 의한 응답이 가능해야 합니다.

2. 지속적인 변화

    데이터베이스의 상태는 동적으로, 즉 새로운 데이터의 삽입, 삭제, 갱신으로 항상 최신의 데이터를 유지해야 합니다.

3. 동시 공용

    데이터베이스는 서로 다른 목적을 가진 여러 사용자들을 위한 것이므로, 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 합니다.

4. 내용에 의한 참조

    데이터베이스에 있는 데이터를 참조할 때, 데이터 레코드의 주소나 위치에 의해서가 아니라, 사용자가 요구하는 데이터 내용으로 찾아야 합니다.

 

 

 

SQL 4가지 데이터 언어

 

1. DDL (Data Definition Language)

    데이터베이스 구조를 정의, 수정, 삭제하는 언어입니다.

    create(생성), alter(수정), drop(삭제), truncate(초기화), rename(이름 변경)이 있습니다.

 

2. DML (Data Manipulation Language)

    데이터베이스 내 자료 조회, 삽입, 수정, 삭제하는 언어입니다

    select(조회), insert(삽입), update(수정), delete(삭제)가 있습니다.

 

3. DCL (Data Control Language)

    데이터베이스에 대한 접근 권한 제어에 사용하는 언어입니다.

    grant(권한 부여), revoke(권한 회수)가 있습니다.

 

4. TCL (Transaction Control Language)

    DCL에서 트랜잭션을 컨트롤 하는 명령어로, DCL로 분류하는 경우도 있습니다.

    commit(영구 반영), rollback(복구), savepoint(복구 위한 저장점 지정)이 있습니다.

 

 

 

트랜잭션

트랜잭션이란, 여러 개의 작업을 하나로 묵은 실행 유닛이며 작업의 완전성을 보장해 주는 것입니다.

하나의 특정 작업으로 시작해서 묶여있는 모든 작업들을 다 완료해야 정상적으로 종료됩니다.

작업이 하나라도 실패하면 트랜잭션은 실패합니다.

 

트랜잭션의 종류로는 3가지가 있습니다.

 

1. 자동 커밋 트랜잭션

    데이터 변경이 성공적으로 끝나면 자동으로 commit, 실패하면 자동 rollback 처리 됩니다.

 

2. 묵시적 트랜잭션

    자동 커밋 트랜잭션과 정 반대되는 개념으로, 사용자가 commit 혹은 rollback을 입력하기 전까지의 명령어들을 하나의 트랜잭션으로 간주합니다.

 

3. 명시적 트랜잭션

    사용자가 트랜잭션의 시작과 끝을 결정 짓습니다.

 

 

 

트랜잭션의 4가지 특성 (ACID)

 

1. Atomic (원자성)

    트랜잭션이 부분적으로 성공 또는 실패하지 않는 것입니다.

    작업이 모두 반영되거나, 모두 반영되지 않음으로써 결과를 예측할 수 있어야 합니다.

    ex) 계좌이체에서 A의 통장에서 출금만 되고 B의 통장에 입금이 안되는 경우, 롤백시켜 데이터를 보호합니다.

 

2. Consistency (일관성)

    트랜잭션 이후 DB의 무결성이 유지되어야 하는 것입니다.

    다시 말해, 트랜잭션이 일어난 이후의 데이터베이스는 데이터베이스의 제약이나 규칙을 만족해야 합니다.

    ex) 모든 고객은 반드시 이름을 가져야 한다는 제약이 있을 때, 기존 고객의 이름을 삭제하는 쿼리나 이름 없는 새로운 고객을 추가하는 쿼리는 일관성에 위반됩니다.

 

3. Isolation (고립성)

    하나의 트랜잭션 사이에 다른 트랜잭션이 끼어들 수 없는 것입니다.

    모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다는 뜻입니다.

    각 트랜잭션은 철저히 독립적이기 때문에, 다른 트랜잭션의 작업 내용을 알 수 없습니다.

    ex) 만원이 있는 계좌에서 동시에 B와 C에게 8천원을 송금할 때, B에게 먼저 송금한 뒤 C에게 송금하여, B, C 모두에게 송금하는 것을 실패하게 해야 합니다.

 

4. Durability (지속성)

    트랜잭션이 영구히 데이터베이스에 반영되어야 하는 것입니다.

    하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 합니다.

    만약 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 합니다.

    ex) 은행에서 계좌이체를 성공적으로 실행한 뒤에, 해당 은행 데이터베이스에 오류가 발생해 종료되더라도 계좌이체 내역은 기록으로 남아야 합니다. 마찬가지로 계좌이체를 기록하기 전에 오류로 종료가 된다면, 이체는 실패 처리하고 각 계좌들은 이체 이전 상태로 롤백해야 합니다.