목록전체 글 (129)
변수의 기록
✅트랜잭션 이상현상과 격리 수준 (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 설계 직원 , 부서 분리되어 삽입 삭제 등..
Repeatable Read에서 Write Skew가 발생하는 이유와 DBMS별 대응 전략 트랜잭션의 일관성을 보장하기 위한 격리 수준 중 하나인 `Repeatable Read`는 이름만 보면 마치 모든 데이터를 고정된 스냅샷으로 보장해줄 것처럼 보입니다. 하지만 실제로는 **Write Skew**와 같은 정합성 오류가 발생할 수 있는 여지가 있습니다. 이 글에서는 `Repeatable Read` 격리 수준에서 발생할 수 있는 Write Skew 현상을 설명하고, 이를 방지하기 위한 전략으로 **Locking Read (SELECT ... FOR UPDATE)** 나 **Serializable 격리 수준**을 사용하는 이유를 정리합니다. 또한, **Oracle, MySQL(InnoDB), PostgreS..

정답.import java.util.*;import java.io.*;public class Main { static int T,N; static int[] dp; public static void main(String[] args) throws IOException { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); T = Integer.parseInt(st.nextToken()); dp = new int[11]; dp[0]..

내가 최초 제출한답 (DP 사용 X )import java.util.*;import java.io.*;public class Main { static int T; static int N; static int count0 =0 ,count1 =0; public static void main(String[] args) throws IOException { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); T=Integer.parseInt(st.nextT..
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 (배타 잠금):읽기/쓰기 둘 다 막음오직 단일 트랜잭션만..