본문 바로가기

데이터베이스9

[트랜잭션 시리즈 - 2] 트랜잭션 격리 수준별 대표적인 트러블 케이스 정리 1. Dirty Read (더티 리드)발생하는 격리 수준: READ UNCOMMITTEDREAD UNCOMMITTED는 가장 낮은 격리 수준으로, 다른 트랜잭션에서 커밋되지 않은 데이터를 읽을 수 있습니다.발생 원인READ UNCOMMITTED 격리 수준에서는 트랜잭션이 다른 트랜잭션의 커밋되지 않은 변경사항을 볼 수 있습니다.이 격리 수준에서는 데이터 읽기 작업에 어떠한 잠금(lock)도 획득하지 않습니다.다른 트랜잭션의 변경사항이 커밋되기 전에도 변경된 데이터를 읽을 수 있습니다.은행 계좌 이체 예시 분석철수의 트랜잭션이 계좌 잔액에서 50만원을 차감하고 아직 커밋하지 않았습니다.영희의 트랜잭션이 READ UNCOMMITTED 격리 수준에서 실행 중이므로, 철수의 트랜잭션이 아직 커밋되지 않았지만 변.. 2025. 3. 24.
[트랜잭션 시리즈 - 1] 트랜잭션의 격리 수준 정리 이번 글 에서는 트랜잭션의 4가지 격리 수준에 대해 정리해 보겠습니다.왜냐하면, 최근 봤던 기술 면접에서 제가 이 부분을 전혀 대답하지 못했었기 때문입니다. 따흑 ㅠㅠ이번 글 에서는 트랜잭션 격리 수준에 대해 정리하고, 다음 글 에서는 각 격리 수준별로 트랜잭션 일관성이 깨질 수 있는 상황에 대해 가상 시나리오를 예로 들어 좀 더 피부에 와닿게 정리해 보도록 하겠습니다.데이터베이스 시스템에서 동시성 제어는 매우 중요한 요소입니다.여러 사용자나 프로세스가 동시에 데이터에 접근할 때, 데이터의 일관성을 유지하면서도 성능을 최적화하는 것은 쉽지 않은 과제입니다.이를 위해 데이터베이스는 '트랜잭션 격리 수준(Transaction Isolation Level)'이라는 개념을 제공합니다.트랜잭션 격리 수준이란?트랜.. 2025. 3. 24.
재귀적 쿼리에 대한 이해 재귀적 쿼리는 쿼리 자체를 반복해서 실행하는 방식으로, 계층 구조나 그래프 형태의 데이터를 탐색할 때 특히 유용하다. 대부분의 관계형 데이터베이스 관리 시스템(RDBMS)에서는 Common Table Expressions (CTE)를 사용하여 재귀적 쿼리를 작성할 수 있다. 작동 원리 재귀적 쿼리는 기본적으로 두 부분으로 나뉜다: 기본 케이스 (Base case): 쿼리의 초기 결과를 반환한다. 재귀 케이스 (Recursive case): 이전 단계의 결과를 활용하여 추가적인 결과를 반환한다. 이 두 부분은 CTE 내에서 UNION이나 UNION ALL 연산을 사용하여 결합된다. 유용한 사용 시나리오 재귀적 쿼리는 다음과 같은 상황에서 유용하다: 계층 구조 데이터 탐색: 댓글과 대댓글 관계, 조직의 직원.. 2023. 9. 20.
MySQL `EXPLAIN`의 조인 타입(`type` 컬럼) 깊게 이해하기 MySQL 쿼리의 실행 계획에서 type 컬럼은 해당 쿼리의 레코드에 어떻게 접근할지를 나타내는 중요한 지표입니다. 이 값이 어떻게 되느냐에 따라 쿼리의 성능이 크게 달라질 수 있습니다. 1. ALL (Full Table Scan) 설명: 테이블의 모든 행을 스캔하는 방식. 이 방식은 가능한 피해야 합니다, 왜냐하면 대부분의 경우에 있어 매우 비효율적이기 때문입니다. 예시 시나리오: -- 아무런 조건이 없는 조회 쿼리 SELECT * FROM users; 2. INDEX 설명: 전체 인덱스를 스캔하는 방식. ALL보다는 낫지만, 여전히 비효율적일 수 있습니다. 예시 시나리오: -- 인덱스만을 스캔하는 쿼리 SELECT user_id FROM orders; 3. RANGE 설명: 인덱스를 사용하여 특정 범.. 2023. 9. 12.
728x90