[DB] PhantomRead란?
·
면접 준비/DB
Phantom Read(팬텀 리드)란? 팬텀 리드는 같은 트랜잭션 내에서 동일한 조건으로 여러 번 데이터를 조회했을 때, 새로운 행이 추가되거나 삭제되어 결과가 달라지는 현상입니다. 즉, 트랜잭션이 실행되는 동안 다른 트랜잭션에 의해 새로운 데이터가 삽입되거나 삭제되어, 처음 조회한 결과와 이후 조회한 결과가 달라지는 문제입니다.📌 Phantom Read 예제 1️⃣ 문제 상황 1. A 트랜잭션이 WHERE 조건을 만족하는 데이터를 조회합니다. 2. B 트랜잭션이 새로운 데이터를 INSERT합니다. 3. A 트랜잭션이 동일한 조건으로 다시 조회하면, 처음 조회할 때 없던 데이터가 추가된 것을 확인할 수 있습니다. 4. 동일한 SELECT 쿼리를 실행했는데도 새로운 데이터가 추가되면서 결과가 변경됨 → ..
[DB / Transaction] 트랜잭션 고립 수준
·
면접 준비/DB
트랜잭션 격리 수준(Isolation Level) 트랜잭션 격리 수준(Isolation Level)은 하나의 트랜잭션이 다른 트랜잭션의 변경 사항을 볼 수 있는 정도를 정의하는 규칙입니다.즉, 데이터의 일관성을 유지하면서 동시성을 관리하는 방법을 결정하는 중요한 요소입니다. 1. 트랜잭션에서 발생할 수 있는 동시성 문제 트랜잭션이 동시에 실행될 때, 아래와 같은 문제가 발생할 수 있습니다.문제 유형설명Dirty Read (더티 리드)다른 트랜잭션이 커밋하지 않은 데이터를 읽는 문제Non-Repeatable Read (반복 불가능한 읽기)같은 데이터를 읽었을 때 값이 변경되는 문제Phantom Read (팬텀 리드)같은 조건으로 조회했을 때 새로운 행이 추가되거나 삭제되는 문제각 트랜잭션 격리 수준은 이러..
[DB / JPA] 낙관적 락과 비관적 락
·
면접 준비/DB
비관적 락과 낙관적 락의 차이점 비관적 락(Pessimistic Lock)과 낙관적 락(Optimistic Lock)은 동시성 제어(Concurrency Control) 를 위해 사용되는 두 가지 대표적인 방식입니다.1. 비관적 락(Pessimistic Lock) 비관적 락은 데이터를 수정하는 동안 다른 트랜잭션이 해당 데이터를 변경하지 못하도록 차단하는 방식입니다. 즉, 트랜잭션이 시작되면 즉시 잠금을 걸고, 트랜잭션이 종료될 때까지 다른 트랜잭션이 접근할 수 없도록 하는 방식입니다. 특징 ✅ 장점 • 경쟁이 심한 환경에서도 안전하게 데이터 정합성을 보장할 수 있습니다. • 동시성 충돌이 발생할 가능성이 높은 경우 적합합니다. ❌ 단점 • 잠금이 유지되는 동안 다른 트랜잭션이 대기해야 하므로 성능 저하..
[CS 면접 질문 - DB] 파티셔닝
·
면접 준비/DB
Partitioning테이블은 수직적 또는 수평적으로 분할될 수 있다.수평적 분할은 테이블의 행을 기준으로 테이블을 나누고, 수직적 분할은 테이블의 열을 기준으로 테이블을 나누어 저장한다.정규화된 테이블일지라도 물리적으로 테이블의 열을 분리하여 저장하는 것이 효율적일 때가 있다.테이블에 발생하는 트랜잭션 수에 비해 테이블 내에 열이 과도하게 많거나, 특정 열에 속하는 레코드의 데이터 크기가 다른 열의 레코드에 비해 과도하게 큰 경우, 또는 보안 상의 이유로 특정 열을 별개의 테이블로 나누어 저장해야 하는 경우 수직적 분할이 필요하다.예를 들어 게시글id, title, writer, content가 있는데 content에 과도하게 많은 양의 데이터가 있어 크기가 큰 경우에는 별도의 테이블로 분리한 뒤 필요..
[CS 개념 정리 - DB] 정규화
·
면접 준비/DB
정규화(Normal Form, NF)정규화란 잠재적인 문제가 발생하지 않도록 테이블의 필드를 구성하고, 필요한 경우 테이블을 나누는 작업을 수행한다.정규형의 종류로는 제1 정규형~3정규형, 보이스/코드 정규형, 제4 정규형, 제5 정규형이 있다.대부분의 경우 제3정규형 또는 보이스/코드 정규형까지만 수행된다.제1 정규형모든 속성이 원자 값을 가진다.더 이상 쪼개질 수 없는 값을 필드 데이터로 가져야 한다.하나의 컬럼에 값이 두 개 이상 들어있는 경우 중복되는 레코드를 감수하고 하나의 테이블에서 쪼개는 방법과 여러 개의 테이블로 쪼개는 방법이 있다.제2 정규형제1 정규형을 만족함과 동시에, 기본 키가 아닌 모든 필드들이 모든 기본 키에 완전히 종속되는 조건을 갖춘 상태를 말한다.보통 기본 키가 2개 이상인..
[CS 개념 정리 - DB] 인덱스
·
면접 준비/DB
RDBMS에서 성능을 향상시킬 수 있는 대표적인 방법중에 하나이다.검색 속도 향상을 목적으로 만드는 하나 이상의 테이블 필드에 대한 자료구조이다.MySQL에서는 인덱스를 크게 클러스터형 인덱스와 세컨더리 인덱스(논클러스터형 인덱스)로 나뉜다.클러스터형 인덱스테이블당 하나씩 만들 수 있는 인덱스로, 우리가 사용하는 기본 키를 통해 클러스터형 인덱스가 생성된다.만약 기본 키가 지정된 필드가 없는 경우에는 NOT NULL 제약조건과 UNIQUE 제약 조건이 있는 필드를 클러스터형 인덱스로 간주한다.세컨더리 인덱스(논클러스터형 인덱스)세컨더리 인덱스는 테이블당 여러개가 존재할 수 있으나 클러스터형 인덱스보다 일반적으로 느리다.문법# 테이블 이름의 필드에 세컨더리 인덱스인 인덱스 이름 설정CREATE INDEX ..