트랜잭션과 격리 수준

ya·2025년 4월 7일

DataBase와 SQL

목록 보기
11/12
post-thumbnail

📦 트랜잭션(Transaction)

DBMS에서 데이터를 다루는 논리적인 작업 단위

  • 트랜잭션 내 모든 SQL문은 전체 수행되거나, 전체 취소(Rollback) 됨 → 부분 적용❌
  • 데이터 장애 발생 시 복구할 수 있는 최소 단위

🧬 ACID 특성

트랜잭션이 가져야 할 4가지 핵심 속성

🧱 1. Atomicity (원자성)

  • 트랜잭션은 쪼갤 수 없는 작업 단위로 작동
  • 전체 성공 또는 전체 실패 (All or Nothing)
  • 🔧 관련 명령어: START TRANSACTION, COMMIT, ROLLBACK, SAVEPOINT

🔄 2. Consistency (일관성)

  • 트랜잭션 수행 전후의 데이터는 항상 일관된 상태 유지
  • 무결성 제약조건(Primary Key, Foreign Key 등)을 위반하지 않음

🛡️ 3. Isolation (격리성)

  • 동시에 실행되는 트랜잭션끼리 간섭 X
  • 임시 데이터 접근 방지 필요 → Lock 등으로 제어

💾 4. Durability (지속성)

  • 트랜잭션 성공(COMMIT) 후에는 영구히 반영
  • 장애 발생해도 변경 내용은 데이터베이스에 보존

🔐 Lock (잠금)

트랜잭션 격리성을 보장하기 위한 핵심 기법

  • 데이터 무결성을 유지하기 위해 동시 접근 제한
  • 트랜잭션이 데이터를 사용하는 동안, 다른 트랜잭션이 접근하지 못하게 차단

🔄 락 종류

  • 🔗 공유 락 (Shared Lock): 읽기 전용, 여러 트랜잭션이 동시에 읽을 수 있음
  • 🔒 배타 락 (Exclusive Lock): 읽기 + 쓰기 가능, 다른 트랜잭션은 접근 불가

⚠️ 교착상태(Deadlock) 발생 조건

  1. 상호 배제: 하나의 자원은 한 번에 하나의 트랜잭션만 사용 가능
  2. 점유와 대기: 자원을 점유한 상태에서 다른 자원을 기다림
  3. 비선점: 자원을 강제로 빼앗을 수 없음
  4. 순환 대기: 트랜잭션 간에 자원을 서로 기다림

🧩 트랜잭션 격리 수준 (Isolation Level)

동시성 처리 중 성능 ↔ 안정성의 균형을 위한 설정

⚠️ 읽기 현상(Read Phenomena)

현상설명
🔸 Dirty ReadCommit되지 않은 데이터를 읽음
🔸 Non-Repeatable Read같은 SELECT 결과가 반복할 때 달라짐
🔸 Phantom ReadWHERE 조건에 맞는 행의 추가/삭제가 발생

🧪 격리 수준 비교 (MySQL 기준)

수준설명방지 현상
1. Read Uncommitted 😬가장 낮은 수준, 커밋 전 데이터 읽음없음
2. Read Committed 🔍커밋된 데이터만 읽음Dirty Read
3. Repeatable Read 🔁같은 트랜잭션 내 SELECT 결과 유지Dirty, Non-Repeatable Read
4. Serializable 🚧완전 직렬화, 가장 안전하지만 느림모든 읽기 현상 방지

⚙️ 격리 수준 설정 방법 (MySQL)

  • 세션 단위 변경
    SET SESSION TRANSACTION ISOLATION LEVEL 수준;

  • 전체(Global) 변경
    SET GLOBAL TRANSACTION ISOLATION LEVEL 수준;

  • 트랜잭션 시작 시 설정
    START TRANSACTION ISOLATION LEVEL 수준;


👥 동시성 제어 (Concurrency Control)

여러 트랜잭션이 동시에 실행될 때, 데이터 무결성과 일관성을 지키기 위한 기능

❌ Lost Update (갱신 손실)

  • 두 트랜잭션이 동시에 같은 데이터를 수정하면서 한 쪽 수정이 덮어씌워지는 현상
  • 반드시 방지해야 함

🔐 Lock 관련 용어 요약

  • 락(Lock): 트랜잭션이 데이터에 접근할 때 사용되는 제어장치
  • 공유락 (Shared): 읽기 전용 시 설정
  • 배타락 (Exclusive): 읽기 + 쓰기 시 설정

♻️ 회복 (Recovery)

트랜잭션 실패 시, 데이터의 일관성을 복원하는 기능

  • 로그(Log), 체크포인트 등을 사용하여 복구 시점 이전 상태로 되돌리기
  • 트랜잭션이 실패하면 → ROLLBACK, 성공하면 → COMMIT
profile
ya로그

0개의 댓글