데이터베이스 용어 사전
학습노트에서 용어를 누르면 여기로 옵니다. 각 용어의 동작 방식·엔진별 차이·실무 함정을 정리했습니다.
59개 용어 · 상세 정리 59개
인덱스7
- B+TreeB+트리 · fan-out
한 노드에 수백 개 키를 담아 넓고 얕게 만든 트리. 디스크 페이지 단위 읽기에 맞춰 설계된 인덱스의 기본 구조.
- 클러스터형 인덱스clustered index · 비클러스터형
테이블 데이터 자체가 그 인덱스 순서로 저장되는 구조. InnoDB는 PK가 클러스터형이고 PostgreSQL에는 없다.
- 복합 인덱스왼쪽 접두사 · leftmost prefix · 다중 칼럼 인덱스
여러 칼럼을 묶은 인덱스. 앞 칼럼부터 차례로 정렬되므로 왼쪽 접두사부터만 쓸 수 있다.
- 커버링 인덱스index-only scan · INCLUDE
쿼리에 필요한 칼럼이 인덱스 안에 전부 있어 테이블을 아예 읽지 않는 경우. I/O가 크게 준다.
- 카디널리티선택도 · cardinality
칼럼이 가진 서로 다른 값의 개수. 낮으면 인덱스를 만들어도 옵티마이저가 쓰지 않는다.
- 풀 스캔Seq Scan · full table scan · 풀 테이블 스캔
테이블 전체를 처음부터 읽는 방식. 항상 나쁜 게 아니라 조회 비율이 높으면 오히려 더 빠르다.
- 페이지 분할page split · 단편화
인덱스 페이지가 가득 찬 상태에서 중간에 값이 삽입될 때 페이지를 쪼개는 동작. 랜덤 PK가 이를 유발한다.
트랜잭션5
- ACID원자성 · 지속성
트랜잭션이 지키는 네 가지 약속 — 원자성·일관성·독립성·지속성.
- 격리수준isolation level · READ COMMITTED · REPEATABLE READ · SERIALIZABLE
동시 트랜잭션의 간섭을 어디까지 막을지 정하는 단계. 같은 이름이어도 PostgreSQL과 MySQL의 구현이 다르다.
- Dirty Read오손 읽기 · Non-repeatable Read · 반복 불가 읽기
커밋되지 않은 남의 변경을 읽는 현상. 그 트랜잭션이 롤백되면 존재한 적 없는 값을 본 셈이 된다.
- Phantom Read유령 읽기 · Write Skew · 쓰기 왜곡
같은 조건으로 두 번 조회했는데 행 수가 달라지는 현상. 사이에 다른 트랜잭션이 INSERT/DELETE한 것이다.
- Lost Update갱신 손실 · 낙관적 락 · 비관적 락
읽고-고쳐-쓰기가 겹쳐 한쪽 변경이 덮여 사라지는 현상. 격리수준만으로는 부족해 락이나 버전으로 따로 막는다.
동시성 제어6
- MVCC다중 버전 동시성 제어 · 스냅샷
한 행의 여러 버전을 두고 읽기와 쓰기가 서로 다른 버전을 보게 하는 방식. 읽기가 쓰기를 막지 않는다.
- 2PL2단계 잠금 · Two-Phase Locking · 공유 락 · 배타 락
락을 얻기만 하는 단계와 풀기만 하는 단계로 나눠 직렬 가능성을 보장하는 규칙. 읽기와 쓰기가 서로를 막는 한계가 있다.
- VACUUMautovacuum · 죽은 튜플 · bloat
PostgreSQL이 MVCC로 생긴 죽은 튜플의 공간을 회수하는 작업. 긴 트랜잭션이 있으면 못 지워 테이블이 부푼다.
- undo log언두 로그 · purge
InnoDB가 옛 버전을 재구성하기 위해 남기는 변경 이력. 롤백과 MVCC 읽기에 함께 쓰인다.
- 갭 락gap lock · 넥스트키 락 · next-key lock
InnoDB가 행 사이의 '틈'까지 잠가 새 INSERT를 막는 락. Repeatable Read에서 phantom을 막는 수단이다.
- 데드락deadlock · 교착 상태 · 순환 대기
두 트랜잭션이 서로가 쥔 락을 기다려 영원히 멈추는 상태. DB가 자동 탐지해 한쪽을 롤백하므로 재시도가 정답이다.
쿼리 최적화6
- 실행계획EXPLAIN · execution plan · EXPLAIN ANALYZE
옵티마이저가 고른 SQL 실행 방법. 느린 쿼리는 추측이 아니라 이것부터 봐야 한다.
- 옵티마이저optimizer · 비용 기반 · cost-based
후보 실행 방법들의 비용을 통계로 추정해 가장 싼 것을 고르는 DB 구성요소.
- 통계ANALYZE · 히스토그램 · auto-analyze
옵티마이저가 행 수를 추정하는 근거 데이터. 낡으면 계획이 통째로 망가진다.
- 조인 알고리즘Nested Loop · Hash Join · Merge Join
두 테이블을 엮는 세 가지 방식. 옵티마이저가 데이터 크기와 인덱스 유무를 보고 비용으로 고른다.
- N+1 쿼리N+1 문제
목록 1번 + 각 항목마다 1번씩 총 1+N번 조회하는 안티패턴. 목록 화면에서 쿼리가 수백 개면 대개 이것이다.
- OFFSET 페이지네이션OFFSET · 페이지네이션 · 키셋 페이지네이션 · 커서 페이지네이션 · 키셋
뒤 페이지일수록 느려지는 이유는 하나다 — 건너뛸 행을 실제로 읽고 버리기 때문이다.
설계·정규화6
- 이상 현상anomaly · 삽입 이상 · 갱신 이상 · 삭제 이상
중복 때문에 삽입·갱신·삭제가 뜻대로 되지 않는 세 가지 문제. 정규화가 없애려는 대상이다.
- 함수 종속functional dependency · 결정자 · 부분 종속 · 이행 종속
X 값이 같으면 Y 값도 반드시 같다는 관계. 정규화가 테이블을 쪼개는 기준이 되는 도구다.
- 정규형1NF · 2NF · 3NF · 정규화
함수 종속을 기준으로 테이블을 단계적으로 쪼갠 형태. 실무 목표는 보통 3NF다.
- BCNFBoyce-Codd · 종속성 보존 · 무손실 분해
모든 결정자가 후보키여야 한다는 더 엄격한 정규형. 3NF와 달리 종속성 보존을 깨뜨릴 수 있다.
- 반정규화denormalization · 요약 테이블
읽기 성능을 위해 일부러 중복을 만드는 설계. 갱신 이상을 되살리는 거래이므로 동기화 책임이 따른다.
- ERD엔터티 · 식별 관계 · 비식별 관계 · 연결 테이블
엔터티와 관계를 그림으로 표현한 데이터 모델. 개념 → 논리 → 물리 순으로 구체화한다.
회복·백업5
- WALWrite-Ahead Logging · 선행 기록 로그 · redo 로그
데이터 파일을 바꾸기 전에 변경 내역을 로그에 먼저 기록하는 규칙. 지속성과 성능을 동시에 얻는다.
- redo·undo롤포워드 · 롤백 · ARIES
크래시 복구의 두 방향. 커밋된 변경은 다시 적용하고, 미완성 변경은 되돌린다.
- 체크포인트checkpoint · 더티 페이지
메모리의 더티 페이지를 디스크에 내리고 복구 시작점을 표시하는 작업. 복구 시간과 평상시 I/O의 트레이드오프다.
- PITRPoint-In-Time Recovery · 시점 복구 · WAL 아카이브
기준 백업과 이후 WAL을 합쳐 원하는 과거 시점으로 복원하는 것. WHERE 빠진 DELETE의 구원이다.
- RPO·RTORecovery Point Objective · Recovery Time Objective · 복제 ≠ 백업
얼마를 잃어도 되는가(RPO)와 얼마 만에 복구해야 하는가(RTO). 백업 전략을 정하는 두 숫자다.
관계 모델3
SQL5
- 조인JOIN · LEFT JOIN · INNER JOIN · OUTER JOIN
두 테이블을 조건으로 엮어 한 결과로 만드는 연산. INNER는 양쪽에 있는 것만, OUTER는 한쪽만 있어도 남긴다.
- 윈도우 함수OVER · PARTITION BY · ROW_NUMBER · RANK
그룹으로 접지 않고 각 행에서 옆을 보게 해 주는 함수. 순위·누적합·이전 값 비교에 쓴다.
- CTEWITH · Common Table Expression · 재귀 쿼리 · RECURSIVE
쿼리에 이름을 붙여 조립하는 문법. 복잡한 쿼리를 읽기 좋게 나누고, 재귀로 계층 구조를 순회한다.
- 서브쿼리subquery · 상관 서브쿼리 · EXISTS · IN
쿼리 안의 쿼리. 바깥 행을 참조하면 상관 서브쿼리가 되며 행마다 실행될 수 있다.
- QueryDSLQ 클래스 · BooleanBuilder · 동적 쿼리
자바 코드로 타입 안전한 쿼리를 조립하는 라이브러리. 동적 조건이 많은 화면에서 가장 빛난다.
분산5
- 복제replication · 리더-팔로워 · 복제 지연 · replication lag
같은 데이터를 여러 노드에 두는 것. 가용성과 읽기 확장을 얻지만 복제 지연이 따라온다.
- 샤딩sharding · 수평 분할 · 샤드 키 · 일관된 해싱
데이터를 키로 쪼개 여러 노드에 나누는 것. 쓰기와 용량까지 확장되지만 조인과 트랜잭션을 포기한다.
- CAP 정리CAP · PACELC · 정족수 · Quorum
네트워크 분할이 일어났을 때 일관성과 가용성 중 하나를 포기해야 한다는 정리.
- 2PC·Saga2단계 커밋 · Two-Phase Commit · 보상 트랜잭션
여러 DB에 걸친 트랜잭션을 다루는 두 방식. 2PC는 원자성을 지키되 블로킹하고, Saga는 보상으로 되돌린다.
- BASE최종 일관성 · eventual consistency · NoSQL
즉시 일관성 대신 가용성과 확장성을 택하는 모델. ACID의 대척점으로 NoSQL이 택한 방향이다.