목록CS지식 (63)
변수의 기록

데이터베이스 정규화 (Database Normalization)1. 정규화란?정규화(Normalization)는 관계형 데이터베이스에서 데이터의 중복을 최소화하고 이상현상(Anomaly)을 방지하기 위한 설계 과정이다.이 과정은 여러 단계의 규칙(Normal Forms, NFs)을 따라 스키마를 구조화하면서 점차적으로 데이터 구조를 개선해나가는 방법이다.정규화는 다음과 같은 문제를 해결하기 위해 수행한다:삽입 이상 (Insertion Anomaly)불완전한 데이터를 억지로 삽입해야 할 때 발생삭제 이상 (Deletion Anomaly)필요 없는 데이터를 삭제했을 때, 의도하지 않은 정보가 함께 사라지는 현상갱신 이상 (Update Anomaly)중복 데이터로 인해 하나만 변경하면 데이터 불일치가 발생할 ..
✅트랜잭션 이상현상과 격리 수준 (SQL-92 표준 기반)💡 트랜잭션에서 왜 "이상현상"이 발생할까?트랜잭션이 동시에 실행되면, 읽기/쓰기 충돌로 인해 **예상하지 못한 결과(= 이상현상)**가 발생할 수 있습니다.이를 방지하기 위해 SQL-92에서는 **3가지 대표적인 이상현상(anomalies)**을 정의하고, 이를 제어할 수 있도록 **4단계 격리 수준(Isolation Level)**을 표준화했습니다.✅ SQL-92 이상현상 3가지 구분설명1. Dirty ReadA 트랜잭션이 아직 커밋하지 않은 데이터를 B가 읽는 현상2. Non-Repeatable ReadA 트랜잭션이 같은 row를 두 번 읽는데 중간에 값이 변경되어 결과가 다르게 나옴3. Phantom ReadA 트랜잭션에서 같은 조건으로..
데이터베이스 설계의 기초: Functional Dependency 정리오늘은 DB 설계의 핵심 개념 중 하나인 **Functional Dependency (함수 종속성)**에 대해 정리해보겠습니다.이 개념은 정규화(normalization) 과정의 기반이 되는 중요한 원리로, 테이블 구조의 논리적 정합성을 판단하는 기준이 됩니다.✅ Functional Dependency란?Functional Dependency(FD)는 하나의 테이블 내 속성들 사이의 의미적 제약 조건을 말합니다.어떤 속성 집합 X가 있을 때, X의 값이 주어지면 Y의 값이 항상 유일하게 결정된다면,이를 X → Y 라고 표현합니다.예:학생ID → 생년월일(학생 ID가 같으면 생일도 같아야 한다) ❗ 중요한 점은 FD는 테이블의 현재 ..

✅ 정규화 (Normalization) 개요정규화는 데이터의 중복을 최소화하고 이상 현상(Anomaly)을 방지하기 위해 테이블을 구조적으로 나누는 과정입니다. 주로 삽입, 삭제, 갱신 이상 (Insert/Delete/Update Anomalies) 을 방지하는 목적입니다.✅ 이상 현상 (Anomalies) 예시1. Insertion Anomaly (삽입 이상)특정 데이터를 저장하려면 불필요한 정보도 같이 저장해야 하는 문제 문제점1.데이터 중복 dept_id , dept_name 등 중복된 데이터 다수 (실수로 인한 데이터 불일치 가능성도 존재,저장공간 낭비)2. null 값 많이 쓰이게 됨. ( 임직원 없는 즉 부서만 입력시 혹은 반대 ) 올바른 db 설계 직원 , 부서 분리되어 삽입 삭제 등..
MVCC와 Isolation Level – Oracle 예제1. MVCC란?**MVCC (다중 버전 동시성 제어)**는 동시성을 높이기 위해 트랜잭션마다 **자신만의 일관된 데이터 시점(snapshot)**을 제공하는 방식이다.MVCC를 사용하는 데이터베이스는 읽기와 쓰기 간의 충돌(Blocking)을 제거하고, 성능과 일관성을 동시에 추구한다.2. MVCC의 핵심 개념 구분설명읽기(read)특정 트랜잭션이 시작될 때의 "시점" 기준으로 commit된 데이터만 읽는다쓰기(write)기존 데이터를 직접 수정하지 않고, 새로운 버전의 데이터를 생성커밋 후 노출다른 트랜잭션은 오직 commit된 버전만 읽을 수 있다비차단 (non-blocking)읽기와 쓰기 작업은 서로 Lock을 걸지 않음 3. MVCC와..
데이터베이스 Lock과 2PL, 데드락까지 완벽 정리동시성을 제어하는 건 단순히 commit을 잘하는 걸 넘어서, **일관성, 격리성(ACID 중 I)**을 유지하는 핵심 기술입니다. 이 포스팅에선 Read/Write Lock, 2PL, 데드락, 그리고 MVCC까지 단계적으로 정리해봅니다.📌 1. Lock 호환성 (Lock Compatibility)DB는 트랜잭션 간의 충돌을 막기 위해 Lock을 사용합니다. read-lockwrite-lockread-lock✅ 가능❌ 불가능write-lock❌ 불가능❌ 불가능 read-lock (공유 잠금):다른 트랜잭션이 읽는 것은 가능, 쓰는 것은 불가여러 트랜잭션이 동시에 읽는 것 가능write-lock (배타 잠금):읽기/쓰기 둘 다 막음오직 단일 트랜잭션만..
1. 트랜잭션은 동시에 실행된다대부분의 데이터베이스 시스템은 성능을 위해 여러 트랜잭션을 동시에 병렬 실행시킨다.그런데 문제는, 이 과정에서 트랜잭션들이 서로 영향을 주고받을 수 있다는 점이다.그 영향은 때때로 심각하다.읽어서는 안 될 값을 읽거나, 중간에 사라지는 값을 읽고 계산하거나,더 나쁘면 트랜잭션이 업데이트한 결과가 통째로 덮어써지며 날아간다. 2. 동시에 실행될 때 발생하는 대표적인 이상 현상들 이상 현상설명Dirty Read아직 commit되지 않은 트랜잭션이 작성한 값을 읽음Non-repeatable Read같은 쿼리를 두 번 실행했는데 결과가 다름Phantom ReadWHERE 조건은 같지만, 행의 개수가 달라지는 현상 → 이런 현상들은 트랜잭션 격리 수준(Isolation Level..

트랜잭션 스케줄은 왜 회복 가능해야 할까?Recoverable / Cascadeless / Strict Schedule 완전 정리데이터베이스는 동시성(Concurrency)을 보장해야 하지만, 동시에 발생하는 트랜잭션이 모두 문제없이 끝나는 것은 아닙니다. 일부 트랜잭션은 롤백되기도 하고, 이로 인해 다른 트랜잭션까지 영향을 받을 수 있습니다.따라서 DBMS는 단순히 serializable한 스케줄만을 고려해서는 안 되며, rollback 상황에서도 데이터 정합성을 유지할 수 있는 스케줄, 즉 **회복 가능한 스케줄(Recoverable Schedule)**을 반드시 보장해야 합니다.1. 스케줄(Schedule) 복습스케줄이란, 여러 트랜잭션의 연산(read/write)이 실제로 어떤 순서로 실행되었는지..