ZeroBase/CS 101

MySQL 스토리지 엔진(InnoDB vs MyISAM)

스토리지 엔진데이터베이스 시스템에서 데이터의 저장, 검색, 트랜잭션 관리, 동시성 제어, 캐싱 등 핵심을 담당하는 필수 구성 요소입니다. MySQL의 스토리지 엔진InnoDB: MySQL 8.0의 기본 스토리지 엔진MyISAM: 이전 버전의 기본 엔진, 현재도 선택 가능 -- 스토리지 엔진 확인SHOW TABLE STATUS WHERE name = 'users';-- 테이블 생성 시 엔진 지정CREATE TABLE users ( user_id INT PRIMARY KEY, username VARCHAR(50)) ENGINE=InnoDB; -- 또는 ENGINE=MyISAM InnoDB vs MyISAM 차이특성InnoDBMyISAM트랜잭션지원 (ACID)미지원락 레벨행 레벨 락 (Row-le..

ZeroBase/CS 2025.10.16

데이터베이스 데드락 - 발생 조건과 해결 방법

둘 이상의 트랜잭션이 서로가 잠금을 포기하기를 기다리는 상황(교착상태)을 말합니다. 데드락 예시Transaction A: Lock(X) → Wait for Lock(Y)Transaction B: Lock(Y) → Wait for Lock(X)A는 Y를 기다리고, B는 X를 기다리며서로 영원히 대기하는 교착상태 발생 데드락 발생 조건다음 4가지 조건이 동시에 충족될 때 데드락 발생 1. 상호 배제 (Mutual Exclusion)자원은 한 번에 하나의 트랜잭션만 사용할 수 있습니다. -- 트랜잭션 A가 Row 1을 잠금-- 트랜잭션 B는 Row 1에 동시 접근 불가 2. 점유 및 대기 (Hold and Wait)트랜잭션이 최소한 하나의 자원을 점유하고 있으면서 다른 트랜잭션이 점유한 자원을 추가로 요구할 ..

ZeroBase/CS 2025.10.12

데이터베이스 정규화 - 이상 현상 해결과 정규형

정규화 과정은 릴레이션 간의 잘못된 함수 종속 관계로 인해 데이터베이스 이상 현상이 일어나는 것을 해결하는 과정이자 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정입니다. 정규화의 목적데이터 중복 최소화이상 현상 방지데이터 일관성 유지저장 공간 효율화 이상 현상 (Anomaly)데이터베이스의 설계를 잘못하게 되었을 때 불필요한 데이터 중복이 발생하여 릴레이션에 대한 데이터의 삽입, 갱신, 삭제 연산을 수행할 때 부작용이 발생하는 것을 말합니다. 삽입 이상 (Insertion Anomaly)불필요한 데이터도 같이 삽입해야 하는 문제비정규화 테이블:┌─────────┬──────────┬──────────┬─────────┐│ 학생ID │ 학생이름 │ 과목코드 │ 과목명..

ZeroBase/CS 2025.10.12

Clustered Index vs Non-Clustered Index

Clustered Index (클러스터형 인덱스) 유일성과 최소성을 가지는 기본키 중 하나로 설정됩니다. 테이블당 한 개만 생성 가능하며, 보통 테이블의 기본키가 클러스터형 인덱스가 됩니다. 내부 구조Clustered Index 구조:인덱스 페이지 ↓리프 노드 = 실제 데이터 페이지[10][25][50][75][100] ← 인덱스 ↓ ↓ ↓ ↓ ↓실제 데이터가 정렬되어 저장됨 데이터 페이지가 정렬되어 저장되며 인덱스 페이지의 리프 노드에 "데이터 페이지"가 들어가 있습니다.장점탐색 성능 우수: 데이터가 정렬되어 있어 범위 검색에 유리추가 포인터 불필요: 리프 노드가 실제 데이터단점데이터가 추가될 때마다 다시 모든 테이블을 정렬해야 하기 때문에 삽입, 삭제, 수정이 느립니다.-- Cl..

ZeroBase/CS 2025.09.30

데이터베이스 인덱스 - B-Tree와 성능 최적화

데이터 접근(검색, 삽입, 삭제 등) 속도를 향상시키기 위해 사용되는 데이터 구조입니다. B-Tree 인덱스 보통의 데이터베이스에서 사용되는 인덱스 구조로, 이진검색트리를 일반화한 자료구조입니다. 2개 이상의 자식을 가진 노드를 허용하고 탐색에 평균 O(log N) 시간이 걸립니다.주요 데이터베이스의 인덱스MySQLPostgreSQLOracleB-Tree 구조B-Tree 구성 요소: [50] ← 루트 노드 / \ [25] [75] ← 브랜치 노드 (내부 노드) / \ / \[10][40][60][90] ← 리프 노드핵심 원리:요소들을 선형적으로 탐색하는 것이 아닌트리 자료구조를 이용해 있을 법한 노드를 기반으로찾고자..

ZeroBase/CS 2025.09.30

트랜잭션 격리 수준과 발생 가능한 현상

격리 수준에 따른 현상 팬텀 리드 (Phantom Read)한 트랜잭션 내에서 동일한 쿼리를 2번 이상 보냈을 때 해당 조회 결과가 다른 현상T1: SELECT * FROM products WHERE price 반복 가능하지 않은 조회 (Non-Repeatable Read)한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 것T1: SELECT price FROM products WHERE id = 1; 결과: 10000T2: UPDATE products SET price = 15000 WHERE id = 1;T2: COMMIT;T1: SELECT price FROM products WHERE id = 1; 결과: 15000 ← 같은 행인데 값이 다름 (Non-Re..

ZeroBase/CS 2025.09.30

데이터베이스 트랜잭션 - ACID와 무결성

트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말하며, 데이터베이스에 접근하는 방법은 쿼리이므로, 여러 개의 쿼리들을 하나로 묶는 단위를 말합니다. 기본 개념-- 트랜잭션 예시: 계좌 이체BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 1000 WHERE account_id = 'A'; UPDATE accounts SET balance = balance + 1000 WHERE account_id = 'B';COMMIT;-- 모든 쿼리가 성공하면 커밋, 하나라도 실패하면 롤백 커밋과 롤백 커밋 (Commit)여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어입니다. 트랜잭션 단위로 수행되며 변경된 내용이 ..

ZeroBase/CS 2025.09.28

데이터베이스(조인 알고리즘)

데이터베이스에서 두 테이블을 조인할 때 내부적으로 사용하는 물리적 실행 방법입니다. 각 알고리즘은 서로 다른 시간복잡도와 성능 특성을 가지며, 데이터베이스 옵티마이저가 데이터 크기와 상황에 맞게 자동으로 선택합니다. 중첩 루프 조인 (Nested Loop Join) 한 테이블의 각 행에 대해 다른 테이블의 모든 행을 순차적으로 검사하며 조인하는 방법입니다.for each row in Table A: for each row in Table B: if A.key = B.key: return matched rows 성능 특성시간복잡도: O(M × N)공간복잡도: O(1) - 추가 메모리 거의 불필요적합한 상황-- 소규모 데이터셋 조인SELECT * FROM small_c..

ZeroBase/CS 2025.09.25

데이터베이스 Join

Join은 두 개 이상의 테이블을 연결하여 데이터를 탐색하는 방법입니다. MySQL에서는 JOIN 키워드로, MongoDB에서는 lookup 쿼리로 이를 처리할 수 있습니다. 내부조인 (INNER JOIN)두 테이블에서 일치하는 데이터만 반환합니다. (교집합 개념) 특징교집합: 양쪽 테이블에 모두 존재하는 데이터만 결과로 반환매칭 조건 필수: ON 절의 조건을 만족하는 행만 포함가장 일반적: 대부분의 조인 상황에서 사용외부조인 (OUTER JOIN) 1. 왼쪽 외부조인 (LEFT OUTER JOIN)첫 번째 테이블의 모든 레코드와 두 번째 테이블의 일치하는 레코드를 반환합니다. 오른쪽 테이블에 일치하는 레코드가 없다면, NULL 값으로 채워집니다.-- 모든 고객과 주문 정보 (주문이 없는 고객도 포..

ZeroBase/CS 2025.09.24

ERD(Entity Relation Diagram)

데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션 간의 관계들을 정의한 것입니다. ERD는 시스템의 요구사항을 기반으로 작성되며, 이 ERD를 기반으로 데이터베이스를 구축합니다. ERD의 역할요구사항 분석 → ERD 설계 → 데이터베이스 구현 → 애플리케이션 개발ERD = 데이터베이스 설계의 청사진엔터티와 속성 정의엔터티 간 관계 설정제약 조건 명시데이터 무결성 보장 ERD의 구성 요소 1. 엔터티 (Entity)실세계의 객체나 개념을 데이터베이스에서 표현한 것ERD 표기법:┌─────────────┐│ 고객 │ ← 엔터티 (사각형)│ (Customer) │└─────────────┘특징:- 독립적으로 존재할 수 있는 객체- 고유하게 식별 가능- 여러 속성을 가짐 엔..

ZeroBase/CS 2025.09.21