alt

(DB실무) Part4-SQL 기본 및 활용-5 TCL & DCL

2026년 11월 8일 공유

SQL 트랜잭션 제어(TCL)와 데이터 제어(DCL)

개요

  • **TCL(Transaction Control Language)**은 트랜잭션을 제어하는 명령어를 다룬다. 핵심은 명령어 자체보다 트랜잭션의 의미와 동작을 이해하는 것이다.
  • **DCL(Data Control Language)**은 사용자 계정을 관리하고 데이터베이스 접근 권한을 부여하거나 회수하는 명령어를 다룬다.
  • SQL 학습에서 테이블의 생성·변경은 DDL, 그 밖의 일반적인 데이터 조회·조작은 주로 DML에 해당한다.

핵심 개념

  • 트랜잭션: 의미상 분리할 수 없는 업무 단위로, 여러 SQL 문장으로 구성될 수 있다.
  • ACID 특성: 트랜잭션의 원자성, 일관성, 고립성, 지속성.
  • 격리 수준: 동시에 수행되는 트랜잭션 간 간섭을 어느 정도 허용할지 정하는 기준.
  • TCL 명령어: COMMIT, ROLLBACK, SAVEPOINT.
  • DCL 기능: 사용자 생성·변경·삭제, 권한 부여·회수, 권한을 묶은 롤 관리.

상세 노트

1. 트랜잭션과 ACID

트랜잭션은 하나의 업무를 완수하는 데 필요한 연산의 묶음이다. 모든 연산이 성공하거나, 실패 시 전체가 취소되어야 한다. 일부만 반영되면 업무 결과가 잘못될 수 있다.
예를 들어 계좌 이체는 한 계좌에서 금액을 빼고 다른 계좌에 더하는 두 연산으로 이루어진다. 한쪽에서만 금액이 변경되면 데이터의 일관성이 깨진다. 도서 주문이나 좌석 예약 역시 재고·결제·예약 내역 등 관련 연산이 함께 성공하거나 취소되어야 하는 사례다.
  • 원자성(Atomicity): 트랜잭션의 연산은 전부 성공하거나 전부 취소된다.
  • 일관성(Consistency): 트랜잭션 전후에 데이터베이스의 제약 조건과 규칙이 유지된다.
  • 고립성(Isolation): 트랜잭션 수행 중 다른 트랜잭션의 간섭을 받지 않도록 한다.
  • 지속성(Durability): 커밋된 변경 사항은 이후에도 영구적으로 보존된다.
원자성과 고립성은 일관성을 지키는 데 기여하며, 지속성은 커밋된 결과가 계속 유지되도록 한다.

2. 격리 수준과 읽기 문제

여러 트랜잭션이 병렬로 실행될 때 간섭을 제한하는 정도를 격리 수준이라고 한다. 격리를 강화하면 읽기 문제가 줄지만, 동시 처리에 제약이 생길 수 있다.
격리 수준
주요 동작 및 방지되는 문제
READ UNCOMMITTED
커밋되지 않은 데이터도 읽을 수 있어 더티 리드 등 문제가 발생할 수 있다.
READ COMMITTED
커밋된 데이터만 읽어 더티 리드를 방지한다.
REPEATABLE READ
같은 트랜잭션에서 읽은 행이 다른 트랜잭션에 의해 수정·삭제되지 않도록 해 반복 불가능 읽기를 방지한다. 팬텀 리드는 발생할 수 있다.
SERIALIZABLE
병렬 수행에도 직렬 실행과 같은 결과를 보장하는 수준으로, 더티 리드·반복 불가능 읽기·팬텀 리드를 방지한다.
주요 읽기 문제는 다음과 같다.
  • 더티 리드(Dirty Read): 다른 트랜잭션이 커밋하지 않은 변경 데이터를 읽는다. 그 변경이 나중에 롤백되면 읽은 값은 유효하지 않게 된다.
  • 반복 불가능 읽기(Non-repeatable Read): 같은 트랜잭션에서 같은 행을 다시 읽었는데, 다른 트랜잭션의 수정·삭제로 결과가 달라진다.
  • 팬텀 리드(Phantom Read): 같은 조건의 쿼리를 반복 실행했는데, 다른 트랜잭션이 행을 삽입해 결과 집합의 행 수나 내용이 달라진다.
팬텀 리드를 막으려면 병렬 트랜잭션의 결과가 직렬 실행과 같은 효과를 내도록 직렬화 가능한 스케줄을 보장해야 한다. 데이터베이스의 동시성 제어기는 주로 잠금 기반이나 타임스탬프 기반 방식 등을 사용한다.

3. COMMIT, ROLLBACK, SAVEPOINT

트랜잭션의 변경은 커밋 전에는 확정되지 않은 상태로 처리된다. 일반적으로 트랜잭션은 SQL 작업이 시작되면서 열리고, COMMIT 또는 ROLLBACK으로 종료된다. 구체적인 자동 커밋 동작은 DBMS와 설정에 따라 다를 수 있다.
  • COMMIT: 현재까지의 변경 사항을 데이터베이스에 확정하고 트랜잭션을 종료한다.
  • ROLLBACK: 마지막 커밋 이후의 변경을 취소하고 이전 상태로 되돌린다.
  • SAVEPOINT: 트랜잭션 중간에 복귀 지점을 지정한다. 해당 지점으로 롤백하면 그 이후의 변경 사항은 취소된다.
일부 DBMS에서는 DDL 실행이나 접속 종료 시 자동 커밋·롤백 동작이 적용될 수 있으므로, 세부 동작은 해당 DBMS의 설정과 문서를 확인해야 한다.

4. DCL: 사용자와 권한 관리

DCL은 사용자 계정과 데이터베이스 권한을 관리한다.
  • CREATE USER: 사용자 계정을 만든다.
  • ALTER USER: 계정 속성이나 비밀번호를 변경한다.
  • DROP USER: 사용자 계정을 삭제한다. 다른 객체가 연결되어 있다면 삭제 제한이나 연쇄 삭제 옵션이 적용될 수 있다.
  • GRANT: 권한을 부여한다.
  • REVOKE: 부여한 권한을 회수한다.
계정 생성만으로 데이터베이스에 접속하거나 객체를 사용할 수 있는 것은 아니다. 예를 들어 접속 권한과 테이블 생성 권한 등을 별도로 부여할 수 있다.
다른 사용자가 소유한 테이블에 권한을 부여할 때는 권한을 줄 대상, 권한 종류, 테이블을 지정한다. 다른 사용자의 테이블을 참조할 때는 일반적으로 소유자.테이블명 형식으로 소유자를 명시한다. 객체의 종류에 따라 부여할 수 있는 권한은 달라진다.

5. 롤(Role)

롤은 여러 권한을 묶어 사용자에게 편리하게 부여하는 단위다.
  • 권한들을 하나의 롤에 묶고, 그 롤을 사용자에게 부여할 수 있다.
  • 시스템에서 미리 제공하는 롤을 사용할 수도 있고, 직접 롤을 만들어 권한을 구성할 수도 있다.
  • 롤에 다른 롤을 포함해 권한을 계층적으로 구성할 수도 있다.
  • 롤을 활용하면 여러 사용자에게 권한을 하나씩 반복해서 부여하거나 회수하는 부담을 줄일 수 있다.
공개 노트 모두 보기