Replies: 5 comments
1. 트랜잭션의 개념과 이를 보장하는 ACID 원칙에 대해 설명해주세요.트랜잭션은 데이터베이스 작업 시 여러 쿼리를 하나의 작업 단위로 묶어 무결성을 보장하는 기술입니다. 계좌 송금 예시처럼 작업 중간에 실패할 경우 전체를 취소(Rollback)하거나 모두 성공(Commit)시켜야 하는 데이터 일관성을 위해 필수적입니다. 2. 트랜잭션 격리 수준 4가지와 각 수준에서 발생하는 데이터 이상 현상을 설명해주세요.트랜잭션 격리 수준은 동시에 여러 트랜잭션이 실행될 떄, 서로의 변경 내용을 어느 정도까지 보이게 할지 정하는 기준입니다. 격리 수준이 낮으면 성능은 좋아질 수 있지만 데이터 이상 현상이 생길 가능성은 커집니다. 격리 수준이 높으면 데이터 정합성은 좋아지지만 동시성이 떨어질 수 있습니다.
정리)
|
1. 트랜잭션의 개념과 이를 보장하는 ACID 원칙에 대해 설명해주세요.트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위를 의미한다. 즉, 여러 개의 SQL 연산이 하나의 작업을 구성한다면 이를 하나의 트랜잭션으로 묶어서 모두 성공하거나 모두 실패하도록 처리한다. 대표적인 예가 계좌 이체이다. 두 작업이 모두 성공해야 정상적인 계좌 이체가 된다. 만약 다음과 같이 된다면? A에서는 돈이 빠졌는데 B에는 돈이 들어오지 않는 문제가 발생한다. 따라서 두 작업을 하나의 트랜잭션으로 묶는다. 모든 작업이 성공하면: 중간에 오류가 발생하면:
트랜잭션은 안전하게 처리되기 위해 ACID라는 네 가지 특성을 가진다.
[ Atomictiy — 원자성 ] : 트랜잭션을 더 이상 나눌 수 없는 하나의 작업 단위로 취급하는 특성 All or Noting, 모든 작업이 성공하거나, 하나라도 실패하면 전체 작업을 취소해야 한다. 정상적인 경우에는 두 작업이 모두 반영된다. 하지만 B 계좌에 돈을 추가하는 과정에서 오류가 발생했다면: 따라서 부분적으로만 성공하는 상황을 방지한다. [ Consistency — 일관성 ] : 트랜잭션이 실행되기 전 데이터베이스가 정상적인 상태였다면, 트랜잭션이 완료된 후에도 정상적인 상태여야 한다는 원칙 여기서 정상적인 상태란 데이터베이스의 무결성 제약 조건이나 비즈니스 규칙 등을 만족하는 상태를 의미한다. 예를 들어: 이라는 제약이 있다고 생각해 보자. 트랜잭션 실행 후: 이 되어버린다면 데이터베이스의 규칙이 깨진다. 따라서 정상적인 트랜잭션이라면 이런 상태가 발생하지 않아야 한다. [ Isolation — 격리성 ] : 여러 트랜잭션이 동시에 실행되더라도 서로의 작업에 부적절하게 간섭하지 않도록 하는 특성 예를 들어 두 사용자가 동시에 같은 계좌를 조회하거나 수정할 수 있다고 하자. 이때 한 트랜잭션의 아직 확정되지 않은 변경사항을 다른 트랜잭션이 마음대로 읽거나, 도잇에 수정하면서 데이터가 꼬이면 문제가 발생한다. 그렇다고 모든 트랜잭션을 완벽하게 서로 격리하면: 처럼 사실상 순차 실행에 가까워진다. 그러면 동시성이 크게 떨어지게 되고, 그래서 데이터베이스는 Isolation Level(트랜잭션 격리 수준)을 제공한다. [ Durability — 지속성 ] : 트랜잭션이 성공적으로 COMMIT되었다면, 이후 시스템에 장애가 발생하더라도 그 결과가 사라지지 않아야 한다는 원칙 예를 들어: 서버가 다시 복구되었을 때 이체 결과가 사라지면 안 된다. 데이터베이스는 이를 위해 일반적으로 로그, WAL(Write-Ahead Logging), 복구(Recovery) 등의 매커니즘을 사용한다. 2. 트랜잭션 격리 수준 4가지와 각 수준에서 발생하는 데이터 이상 현상을 설명해주세요.격리 수준을 이해하려면 먼저 다음 세 가지 이상 현상을 알아야 한다.
[ Dirty Read ] : 아직 COMMIT되지 않은 다른 트랜잭션의 데이터를 읽는 현상 예를 들어: 이때 트랜잭션 B가: 그런데 A가: 한다면 실제 데이터는 다시: 즉 B는 실제로 확정되지 않은 데이터를 읽은 것이다. [ Non-Repeatable Read ] : 같은 트랜잭션에서 같은 행을 두 번 읽었는데 값이 달라지는 현상 예를 들어: 그 사이에 트랜잭션 B가: 그리고 다시 A가: 같은 트랜잭션에서 같은 데이터를 조회했는데: 으로 결과가 달라졌다. [ Phantom Read ] : 같은 조건으로 조회했는데 이전에는 없던 행이 새롭게 나타나거나 기존 행이 사라지는 현상 예를 들어: 첫 번째 조회: 그 사이에 다른 트랜잭션이: 그리고 다시 같은 쿼리를 실행한다. 결과: 기존 행의 값이 변경된 것이 아니라 조회 대상 집합 자체가 변한 것이다. [ READ UNCOMMITTED ] : 가장 낮은 격리 수준 다른 트랜잭션이 아직 COMMIT하지 않은 데이터도 읽을 수 있다. 따라서:
[ READ COMMITTED ] : COMMIT된 데이터만 읽는 수준 따라서 Dirty Read를 방지한다. 예를 들어 A가 데이터를 수정하고 아직 COMMIT하지 않았다면 B는 해당 변경사항을 읽지 못한다. 하지만 A가 데이터를 다시 읽는 사이 B가 값을 수정하고 COMMIT하면: 이 될 수 있다. 따라서 Non-Repeatable Read는 발생할 수 있다. 참고로 DBMS마다 기본 격리 수준이 다르다. 따라서 "모든 DB의 기본값이 READ COMMITTED"라고 외우면 안 된다. [ REPEATABLE READ ] : 한 트랜잭션에서 같은 행을 반복해서 읽어도 동일한 결과를 얻을 수 있도록 하는 수준 따라서: SQL 표준의 일반적인 설명에서는 Phantom Read가 발생할 수 있다. 다만 실제 Phantom Read 발생 여부는 DBMS의 구현 방식에 따라 달라질 수 있다. 특히 MVCC나 Lock을 사용하는 방식에 따라 실제 동작이 SQL 표준의 단순한 설명과 다를 수 있다. [ SERIALIZABLE ] : 가장 높은 격리 수준 트랜잭션들이 마치 순차적으로 실행된 것과 같은 결과를 얻도록 한다. 따라서 일반적인 세 가지 이상 현상을 모두 방지한다. 대신 동시성이 낮아진다. 트랜잭션 간 Lock 경합이나 대기 등이 증가할 수 있기 때문이다. |
|
1. 트랜잭션의 개념과 이를 보장하는 ACID 원칙에 대해 설명해주세요.
원자성
일관성
고립성
지속성
2. 트랜잭션 격리 수준 4가지와 각 수준에서 발생하는 데이터 이상 현상을 설명해주세요. 동시에 여러 트랜잭션이 처리될때 트랜잭션끼리 얼마나 고립되어있는거에 대한 수준을 말한다.
Commited Read
Repeatable Read
Serializable |
1. 트랜잭션의 개념과 이를 보장하는 ACID 원칙에 대해 설명해주세요.트랜잭션은 db 에서 논리적으로 하나로 묶여야 하는 작업의 단위이다. 쪼개지면 안 되는 여러 개의 쿼리를 하나로 묶어놓은 것이라고 보면 된다. 늘 나오는 계좌이체 예시가 제일 이해가 쉽다. UPDATE account SET balance = balance - 10000 WHERE id = 'A';
UPDATE account SET balance = balance + 10000 WHERE id = 'B';이 둘은 따로 보면 각각 성공한 쿼리지만, 첫 번째만 실행되고 서버가 죽으면 돈이 그냥 증발한다. 그래서 "둘 다 되거나 둘 다 안 되거나" 를 db 가 보장해줘야 하고, 그 단위가 트랜잭션이다. 트랜잭션은 commit(확정) 또는 rollback(취소) 으로 끝난다. ACID
정리하면 A, D 는 장애 상황을 위한 성질이고, I 는 동시성 상황을 위한 성질, C 는 그 결과로 지켜져야 하는 목표라고 이해했다. 2. 트랜잭션 격리 수준 4가지와 각 수준에서 발생하는 데이터 이상 현상을 설명해주세요.먼저 이상 현상 3가지
격리 수준 4가지
그래서 뭘 쓰나 격리 수준을 올릴수록 안전하지만 락이 늘어나서 처리량이 떨어진다. 결국 정합성 vs 성능 트레이드오프이고, 대부분의 서비스는 기본값(READ COMMITTED 또는 REPEATABLE READ)으로 두고, 재고 차감이나 잔액 처리처럼 진짜 틀리면 안 되는 지점만 락을 따로 잡는 식으로 가는 것 같다. |
기본 질문1. 트랜잭션의 개념과 이를 보장하는 ACID 원칙에 대해 설명해주세요.트랜잭션은 다양한 아이템을 액세스하고 변경하는 연산들의 논리적 집합을 말합니다. 쉽게 말하면 데이터베이스의 상태를 변화시키는 논리적 작업의 단위입니다. 이를 보장하는 ACID 원칙은 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 영속성(Durability)가 있고 원자성은 트랜잭션 내의 모든 연산은 반드시 모두 반영되거나 모두 반영되지 않아야 한다는 원칙, 일관성은 트랜잭션이 완료된 후에도 DB는 제약조건을 위반하지 않고 일관되게 유지돼야 한다는 원칙, 격리성은 트랜잭션 수행 시, 중간 연산 결과가 다른 트랜잭션에 보이지 않아야 한다는 원칙, 영속성은 성공적으로 완료된 트랜잭션의 결과는 시스템 장애가 발생하더라도 영구적으로 DB에 반영되어야 한다는 원칙입니다. 2. 트랜잭션 격리 수준 4가지와 각 수준에서 발생하는 데이터 이상 현상을 설명해주세요.트랜잭션의 격리 수준 4가지는 Read Uncommitted, Read Committed, Repeatable Read, Serializable이 있습니다. Read Uncommitted는 다른 트랜잭션의 커밋되지 않은 변경 사항을 읽을 수 있는 상태로 이땐 커밋되지 않은 트랜잭션의 수정 사항을 다른 트랜잭션이 읽은 현상인 Dirty Read, 동일 데이터 재조회 시, 그 사이 다른 트랜잭션의 수정으로 값이 달라지는 현상인 Non-repeatable Read, 동일 조건 재조회 시, 다른 트랜잭션의 삽입 삭제로 결과 행 개수가 달라지는 현상인 Phantom Read 모두가 발생할 수 있습니다. Read Committed는 커밋이 완료된 데이터만 읽을 수 있는 상태로 Dirty Read를 방지합니다. Repeatable Read는 자신의 트랜잭션이 시작되기 전 커밋된 데이터만 읽는 상태로 한 트랜잭션 내에서 몇 번을 조회해도 항상 시작 전의 결과가 항상 보장되고 Dirty Read, Non-repeatable Read를 방지합니다. 마지막으로 Serializable는 가장 엄격한 격리 수준으로 모든 트랜잭션을 순차적으로 실행하는 제어합니다. Serializable는 Dirty Read, Non-repeatable Read, Phantom Read 모든 읽기 문제를 방지합니다. |
Uh oh!
There was an error while loading. Please reload this page.
📆 일자: 26년 8월 7일(금)
발제 의도
1. 트랜잭션의 개념과 이를 보장하는 ACID 원칙에 대해 설명해주세요.
2. 트랜잭션 격리 수준 4가지와 각 수준에서 발생하는 데이터 이상 현상을 설명해주세요.
All reactions