TIL

6_2.트랜잭션 격리 수준 이해 및 실습

꿀승 2025. 2. 1. 23:00
728x90
반응형
SMALL

학습내용

  1. 트랜잭션 ACID 원칙 복습
  2. 트랜잭션 격리 수준
  3. 실습
    • MySQL
    • SpringBoot

학습정리

1. ACID 원칙

  • Atomicity (원자성)
    • 트랜잭션 내의 모든 작업이 성공적으로 완료 되거나, 전형 수행되지 않아야 한다.
  • Consistency (일관성)
    • 트랜잭션이 완료되면 데이터베이스는 항상 일관 된 상태를 유지해야한다.
  • Isolation (격리성)
    • 여러 트랜잭션이 동시에 실행되더라도 각 트랜잭션은 독립적으로 실행되어야 한다.
  • Durability (지속성)
    • 트랜잭션이 성곡적으로 커밋 되면, 시스템 오류나 장애가 발생해도 영구적으로 저장되어야 한다.

2. 격리 수준의 종류

  1. Read Uncommitted
    • 트랜잭션이 커밋 되지 않은 데이터를 다른 트랜잭션이 읽을 수 있음
    • 가장 낮은 격리수준으로 동시성은 높지만, 정합성이 보장되지 않음
  2. Read Committed
    • 다른 트랜잭션에서 커밋된 데이터만 읽을 수 있음.
    • 대부분의 DBMS의 기본설정 (Oracle, PostgeSQL 등)
  3. Repeatable Read
    • 같은 트랜잭션 내에서 동일한 데이터를 여러번 조회해도 값이 변하지 않음.
    • MySQL(InnoDB)의 기본설정
  4. Serializable
    • 가장 높은 격리 수준으로, 트랜잭션을 순차적으로 실행하는 것처럼 동작
    • 모든 동시성 문제를 방지하지만 성능이 저하됨
  • 격리 수준별 발생하는 동시성문제

    격리 수준 Dirty Read Non-Repeatable Read Phantom Read 설명
    READ UNCOMMITTED 허용 허용 허용 가장 낮은 격리 수준. 커밋되지 않은 데이터 읽기가 가능
    READ COMMITTED 방지 허용 허용 대부분의 DBMS 기본 설정. 커밋된 데이터만 읽을 수 있음
    REPEATABLE READ 방지 방지 허용 동일 트랜잭션 내에서 동일한 데이터 조회 결과 보장
    SERIALIZABLE 방지 방지 방지 가장 높은 격리 수준. 트랜잭션을 직렬화하여 실행
  • 격리 수준이 높으면 트랜잭션 간의 간섭을 최소화 하여데이터 정합성을 보장할 수 있지만,성능이 저하를 초래 할 수 있다
    -> 시스템의 요구사항에 따라 적절한 격리수준을 선택해야함.

ps. 금일에는 전 시간에 배웠던 동시성문제를 처리하기 위한 격리수준을 설정해보고 해당 내용을 실습했는데
MySQL,SpringBoot에서 테스트를 하면서 어떤식으로 동작하는지 파악 된 것 같습니다.

728x90
반응형
LIST

'TIL' 카테고리의 다른 글

6_4.CAP 이론과 일관성 전략  (0) 2025.02.04
6_3.DB 락 메커니즘 이해와 실습  (0) 2025.02.02
6_1.동시성 문제 개념 및 사례 분석  (0) 2025.01.27
5_5.MyBatis 활용  (0) 2025.01.24
5_4.EXPLAIN과 MyBatis  (1) 2025.01.23