트랜잭션이란 한꺼번에 수행되어야 하는 업무 단위를 의미한다.
트랜잭션에 대한 내용은 해당 포스팅에서 확인 >
2025.08.22 - [CS/데이터베이스] - [DB] 트랜잭션(Transaction)
동시성 제어
트랜잭션 속성 중 하나인 일관성은 트랜잭션 전후로 무결성을 만족해야 한다.
하지만 무결성을 엄격히 지킬수록 여러 트랜잭션이 동시에 DB 접근하는 것은 오히려 어려워진다.

따라서 여러 트랜잭션이 동시에 실행되더라도 데이터의 일관성을 유지할 수 있도록 트랜잭션의 실행을 제어하는 것을 동시성 제어라고 한다.
동시성 문제로 인한 이상 현상은 해당 포스팅에서 확인 >
2025.09.19 - [Computer Science/데이터베이스] - [DB] 트랜잭션 고립 수준(Transaction Isolation Level)
트랜잭션 락(Transaction Lock)의 정의
트랜잭션 락(Transaction Lock)은 위와 같은 동시성 제어를 구현하기 위한 수단으로,
하나의 트랜잭션이 커밋 또는 롤백으로 종료될 때까지 해당 트랜잭션이 접근한 데이터(자원)에 대해서는
다른 트랜잭션의 읽기나 쓰기 작업이 제한되도록 잠금을 거는 것이다.
또한 트랜잭션이 종료되면 잠금이 해제된다.
트랜잭션 락(Transaction Lock)의 수행 과정
먼저 트랜잭션 락이 필요한 상황에 대해 살펴보자!
만약 두 사람이 재고가 n개 남아 있는 A 상품을 거의 동시에 구매한다고 가정해보자.
두 트랜잭션이 각각 A 상품의 재고를 조회하여 n개만큼의 결제를 진행한 뒤 커밋된다면,
재고를 초과하여 상품이 판매되는 문제가 발생할 것이다.
❓ 위와 같은 동시성 문제를 제어하려면 ?
❗️ A 상품의 재고를 확인하고 결제하는 과정은 하나의 트랜잭션을 통해 순차적으로 처리되어야 한다.
즉,
- 트랜잭션 1이 시작된다.
- 트랜잭션 1이 특정 자원에 접근하는 SQL을 실행한다.
- DB는 해당 SQL이 접근하는 자원에 대해 필요한 락을 획득한다.
(다른 트랜잭션은 락이 해제될 때까지 해당 자원에 대한 변경이 제한된다.) - 트랜잭션 1이 종료되면, DB는 트랜잭션이 보유한 락을 해제하여 다른 트랜잭션이 해당 자원에 접근할 수 있도록 한다.
트랜잭션 락(Transaction Lock)의 종류
트랜잭션 락은 접근 방식에 따라 공유 락, 배타 락, 업데이트 락, 의도 락으로 나뉘어 진다.
공유 락(Shared Lock)
한 트랜잭션이 공유 락을 획득하면, 해당 트랜잭션이 락을 보유하는 동안 다른 트랜잭션은 해당 자원을 변경할 수 없다.
배타 락(Exclusive Lock)
한 트랜잭션이 배타 락을 획득하면, 해당 트랜잭션만 자원을 읽거나 변경할 수 있으며
다른 트랜잭션은 해당 자원에 대한 읽기 및 변경이 제한된다.
업데이트 락(Update Lock)
공유 락을 가진 여러 트랜잭션들이 자원을 변경하기 위해 배타락으로 전환할 때 발생길 수 있는 충돌을 방지하는 락이다.
만약 트랜잭션 A가 먼저 업데이트 락을 획득한 경우 트랜잭션 B는 업데이트 락을 획득하지 못하고 대기하게 된다.
따라서 배타 락으로의 전환은 하나의 트랜잭션에서만 순차적으로 이루어지므로, 교착 상태가 발생하지 않는다.
의도 락(Intent Lock)
의도 락은 하위 자원(row 등)에 락을 획득할 의도가 있음을 상위 자원(테이블 등)에 미리 표시하기 위한 락이다.
의도 락의 종류는 IS(하위 자원에 공유 락), IX(하위 자원에 배타 락), SIX(상위 자원에 공유 락, 하위 자원에 배타 락) 가 있다.
테이블의 하위 row에 공유 락이 걸려 있는지 알고 싶을 때, 테이블에 걸린 IS 락만 확인하면
모든 row의 락 상태를 직접 확인하지 않고도 하위 자원에 공유 락이 존재함을 알 수 있다.
👏
참고
'Computer Science > 데이터베이스' 카테고리의 다른 글
| [DB] 뷰(View) (0) | 2026.02.22 |
|---|---|
| [DB] 인덱스(Index) (0) | 2025.10.31 |
| [DB] 정규화(Normalization) / 1NF, 2NF, 3NF, BCNF (0) | 2025.10.24 |
| [DB] 트랜잭션 고립 수준(Transaction Isolation Level) (0) | 2025.09.19 |
| [DB] 공통 테이블 식(CTE) (0) | 2025.09.19 |