개발공부/데이터베이스

패스트캠퍼스 환급챌린지 32일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기

Rrrrrrrring 2025. 8. 1. 16:58
반응형

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

Ch 2. 데이터베이스 개론 - 트랜잭션과 동시성

 

데이터베이스 트랜잭션과 락(Lock)의 관계: 안정적인 데이터 관리의 핵심

데이터베이스에서 트랜잭션과 락(Lock)은 떼려야 뗄 수 없는 관계입니다. 트랜잭션은 데이터의 무결성을 보장하는 논리적인 작업 단위이고, 락은 여러 트랜잭션이 동시에 실행될 때 데이터의 일관성을 깨뜨리지 않도록 보호하는 물리적인 메커니즘입니다. 이 두 개념을 이해하는 것은 데이터베이스 시스템의 동작 원리를 파악하는 데 필수적입니다.

1. 데이터베이스 트랜잭션의 기본 개념

트랜잭션(Transaction)은 데이터베이스의 상태를 변경시키는 하나의 논리적인 작업 단위를 의미합니다. 이 작업은 여러 개의 SQL 명령문(예: UPDATE, INSERT, DELETE)으로 구성될 수 있습니다. 트랜잭션의 핵심 목표는 모든 작업이 완전히 성공하거나, 하나라도 실패하면 모두 취소(롤백)하여 데이터베이스의 일관성을 유지하는 것입니다.

이러한 트랜잭션의 안정성을 보장하기 위해 데이터베이스 관리 시스템(DBMS)은 ACID라는 네 가지 속성을 충족해야 합니다.

  • 원자성(Atomicity): 트랜잭션 내의 모든 연산은 전부 성공하거나, 전부 실패해야 합니다.
  • 일관성(Consistency): 트랜잭션 완료 후에도 데이터베이스는 항상 일관된 상태를 유지해야 합니다.
  • 고립성(Isolation): 여러 트랜잭션이 동시에 실행될 때, 서로에게 영향을 주지 않고 독립적으로 실행되는 것처럼 보여야 합니다.
  • 지속성(Durability): 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 데이터베이스에 반영되어 손실되지 않습니다.

 

2. 고립성을 위한 핵심 메커니즘: 락(Lock)

ACID 속성 중 고립성을 보장하기 위해 사용되는 가장 대표적인 기술이 바로 락(Lock)입니다.

락(Lock)은 데이터베이스의 특정 자원(예: 테이블, 행, 페이지)에 대한 접근을 제어하는 메커니즘입니다. 여러 트랜잭션이 동시에 같은 데이터를 읽거나 쓰려고 할 때, 락은 한 트랜잭션이 자원을 사용하는 동안 다른 트랜잭션의 접근을 제한하여 데이터의 충돌을 방지합니다.

2.1. 락의 종류와 동작 방식

락은 크게 두 가지 유형으로 나뉩니다.

  • 공유 락 (Shared Lock):
    • 목적: 데이터를 읽기(Read) 위해 사용합니다.
    • 동작: 한 트랜잭션이 자원에 공유 락을 걸면, 다른 트랜잭션들도 같은 자원에 공유 락을 걸고 데이터를 읽을 수 있습니다. 하지만 데이터를 변경하는 배타적 락은 허용하지 않습니다.
    • 예시: 여러 사용자가 동시에 특정 상품의 재고를 조회하는 경우.
  • 배타적 락 (Exclusive Lock):
    • 목적: 데이터를 변경(Write)하기 위해 사용합니다.
    • 동작: 한 트랜잭션이 자원에 배타적 락을 걸면, 다른 어떤 트랜잭션도 해당 자원에 공유 락이나 배타적 락을 걸 수 없습니다. 락을 건 트랜잭션만이 자원에 대한 독점적인 접근 권한을 가집니다.
    • 예시: 한 사용자가 상품을 구매하여 재고를 감소시키는 경우.

이 외에도 락의 범위에 따라 테이블 전체에 걸리는 테이블 락, 특정 행에만 걸리는 행 락 등으로 구분합니다. 행 락은 락의 범위를 최소화하여 동시성을 높이는 데 유리합니다.

2.2. 락킹 시나리오 (재고 관리 예시)

두 고객이 동시에 같은 상품을 구매하는 상황을 통해 락의 동작을 이해할 수 있습니다.

  1. 트랜잭션 A 시작: 고객 A의 구매 트랜잭션이 시작됩니다.
  2. 락 획득: 트랜잭션 A는 상품 재고를 변경하기 위해 해당 재고 데이터에 배타적 락을 걸고, 재고를 1 감소시킵니다.
  3. 트랜잭션 B 시작: 거의 동시에 고객 B의 구매 트랜잭션이 시작됩니다.
  4. 락 대기: 트랜잭션 B는 같은 재고 데이터를 변경하려고 하지만, 이미 트랜잭션 A가 배타적 락을 걸고 있어 락을 획득하지 못하고 대기 상태에 들어갑니다.
  5. 트랜잭션 A 완료: 트랜잭션 A가 작업을 마치고 커밋(Commit)하면, 락이 해제됩니다.
  6. 트랜잭션 B 진행: 락이 해제되자마자 트랜잭션 B가 락을 획득하고 재고를 1 감소시키는 작업을 수행한 후 커밋합니다.

이러한 과정을 통해 재고가 정확하게 처리되어, 동시에 여러 주문이 들어와도 데이터의 일관성이 깨지지 않습니다.

2.3. 락으로 인한 문제: 교착 상태(Deadlock)

락은 동시성 제어의 핵심이지만, 교착 상태(Deadlock)라는 심각한 문제를 야기할 수 있습니다. 교착 상태는 두 개 이상의 트랜잭션이 서로 락을 걸고 있는 자원을 기다리며 무한히 대기하는 상황을 말합니다.

교착 상태 시나리오:

  1. 트랜잭션 A가 자원 X에 락을 건다.
  2. 트랜잭션 B가 자원 Y에 락을 건다.
  3. 트랜잭션 A는 자원 Y에 접근하려 하지만, B가 락을 걸고 있어 대기한다.
  4. 트랜잭션 B는 자원 X에 접근하려 하지만, A가 락을 걸고 있어 대기한다.

이 상황에서 두 트랜잭션 모두 서로의 락 해제를 기다리며 무한 대기하게 됩니다. 대부분의 DBMS는 이러한 교착 상태를 감지하고, 둘 중 하나의 트랜잭션을 강제로 종료(롤백)시켜 다른 트랜잭션이 작업을 계속할 수 있도록 합니다.

3. 결론

데이터베이스 트랜잭션과 락은 데이터의 신뢰성과 안정성을 보장하는 상호 보완적인 개념입니다. 트랜잭션은 데이터 변경의 논리적 단위이고, 락은 동시성 제어를 통해 트랜잭션의 고립성을 물리적으로 구현하는 도구입니다.

개발자는 시스템 설계 시 락의 종류와 범위를 신중하게 고려하여 동시성 문제를 해결하고, 교착 상태와 같은 잠재적인 위험을 관리해야 합니다. 트랜잭션과 락에 대한 이해는 복잡한 데이터베이스 환경에서 안정적인 애플리케이션을 구축하는 데 필수적인 지식입니다.

https://fastcampus.info/4n8ztzq

 

(~6/20) 50일의 기적 AI 환급반💫 | 패스트캠퍼스

초간단 미션! 하루 20분 공부하고 수강료 전액 환급에 AI 스킬 장착까지!

fastcampus.co.kr

 

반응형