해당 주제 관련 기술면접 질문 미리보기
Q.트랜잭션 격리수준에 대해서 설명해주세요.
트랜잭션의 격리 수준(Isolation Level)이란 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것을 말합니다.
격리수준은 크게 아래의 4개로 나뉩니다.
아래로 내려갈수록 트랜잭션간 고립 정도가 높아지며, 성능이 떨어지는 것이 일반적입니다.
Dirty Read
발생)더티 리드(Dirty Read) 란?
한 트랜잭션에서 다른 트랜잭션이 커밋하지 않은 데이터를 읽는 현상을 말합니다.
Non-Repeatable Reads
문제가 발생할 수 있어, 일반적인 웹 어플리케이션에서는 크게 문제되지 않지만, 금전적인 처리와 연결되어있다면 문제가 발생할 수 있다.논-리피터블 리드(Non-Repeatable Reads) 란?
트랜잭션 내에서 같은 select 에 대해 항상 같은 결과가 나오지 않는 현상을 말합니다.
InnoDB
스토리지 엔진에서 기본적으로 사용하는 격리수준이다.팬텀리드
가 발생할 수 있지만, MySQL의 InnoDB 에서는 넥스트 키 락 덕분에 이 현상이 거의 발생하지 않는다.InnoDB 란?
MySQL에서 사용하는 데이터베이스 엔진입니다. 트랜잭션 세이프 스토리지 엔진으로서 대용량 데이터를 처리 할 때 많은 장점을 가지고 있습니다.
팬텀리드(PhantomReads) 란?
한 트랜잭션이 특정 범위의 데이터를 조회할 때, 다른 트랜잭션이 그 범위 상 데이터를 삽입 혹은 삭제하면
두 번째 쿼리에서 결과 집합이 달라질 수 있는 현상을 말합니다.
Dirty Read | Non-Repeatable Read | Phantom Read | |
---|---|---|---|
READ UNCOMMITTED | 발생 | 발생 | 발생 |
READ COMMITTED | 없음 | 발생 | 발생 |
REPEATABLE READ | 없음 | 없음 | 발생 (MySQL은 거의 없음) |
SERIALIZABLE | 없음 | 없음 | 없음 |
참고) ISOLATION LEVEL 조회 방법
SHOW VARIABLES like 'tx_isolation';
Q.트랜잭션 격리수준에 대해서 설명해주세요.
트랜잭션의 격리 수준이란 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것을 말합니다.
격리 수준은 크게 네 가지가 있습니다.
첫째, READ UNCOMMITTED입니다. 이 수준에서는 커밋되지 않은 데이터도 읽을 수 있어서 Dirty Read, Non-Repeatable Read, Phantom Read가 발생할 수 있습니다.
둘째, READ COMMITTED입니다. 커밋된 데이터만 읽을 수 있어서 Dirty Read는 방지되지만, Non-Repeatable Read와 Phantom Read는 여전히 발생합니다.
셋째, REPEATABLE READ입니다. 이 수준에서는 트랜잭션 내에서 동일한 데이터를 읽을 수 있어서 Non-Repeatable Read를 방지합니다. 그러나 Phantom Read는 발생할 수 있습니다. MySQL의 기본 격리 수준입니다.
마지막으로, SERIALIZABLE입니다. 모든 트랜잭션을 직렬적으로 처리해서 모든 읽기 문제를 방지합니다. 하지만 동시성이 줄어들어 성능 저하가 있을 수 있습니다.
ref.
트랜잭션의 격리수준(Isolation level)이란?
https://github.com/ksundong/backend-interview-question
https://mangkyu.tistory.com/299
[db] 트랜잭션 격리 수준(isolation level)
https://neocan.tistory.com/396
https://velog.io/@shins/더티리드와-논-리피터블-리드-그리고-팬텀리드-MySQL-을-중심으로