DB 이론은 SQL과 다르게 "개념 단답"이 중심
실기에서 SQL은 쿼리 결과를 묻지만, DB 이론은 개념 자체를 단답으로 묻습니다. ACID, 정규화 단계, 이상 현상, 인덱스 동작 — 모두 용어와 한 줄 정의가 답입니다.
암기 부담이 있지만, 시험에 나오는 개념이 거의 정해져 있어서 범위만 잡으면 효율적으로 대비할 수 있어요.
트랜잭션과 ACID
| 속성 | 의미 |
|---|---|
| Atomicity (원자성) | 전부 실행되거나, 전부 취소되어야 함 |
| Consistency (일관성) | 실행 전후에 DB 무결성 제약이 유지 |
| Isolation (격리성) | 동시에 실행되는 트랜잭션끼리 서로 간섭하지 않음 |
| Durability (영속성) | 완료된 트랜잭션의 결과는 영구히 반영 |
단답으로 "ACID 중 C는 무엇을 의미하는가?" 형태로 나옵니다. 각 항목을 한 줄로 쓸 수 있어야 해요.
트랜잭션 상태
활동 → 부분 완료 → 완료
↓
실패 → 철회
- 활동(Active) : 실행 중
- 부분 완료(Partially Committed) : 마지막 연산 종료, 아직 커밋 전
- 완료(Committed) : 모든 연산 반영
- 실패(Failed) : 정상 수행 불가
- 철회(Aborted) : 모든 변경을 롤백
트랜잭션 격리 수준 (Isolation Level)
동시성 허용 범위를 조절하는 옵션입니다. 낮을수록 동시성은 좋지만 이상 현상이 발생합니다.
| 격리 수준 | Dirty Read | Non-repeatable Read | Phantom Read |
|---|---|---|---|
| READ UNCOMMITTED | 발생 | 발생 | 발생 |
| READ COMMITTED | 방지 | 발생 | 발생 |
| REPEATABLE READ | 방지 | 방지 | 발생 |
| SERIALIZABLE | 방지 | 방지 | 방지 |
세 가지 이상 현상 요약:
- Dirty Read : 다른 트랜잭션이 커밋하지 않은 값을 읽음
- Non-repeatable Read : 같은 조회를 두 번 했는데 중간에 값이 바뀜
- Phantom Read : 같은 범위 조회인데 중간에 새 행이 추가되어 보임
락(Lock)과 교착 상태
락 종류
| 락 | 허용 연산 |
|---|---|
| 공유 락(Shared Lock) | 읽기만 가능, 다른 공유 락과 공존 |
| 배타 락(Exclusive Lock) | 읽기·쓰기 독점, 다른 락과 공존 불가 |
교착 상태(Deadlock) 4가지 조건
다음 네 조건이 동시에 성립해야 교착이 발생합니다.
- 상호 배제 : 자원은 한 번에 하나의 프로세스만 사용
- 점유와 대기 : 자원을 쥔 채로 다른 자원 요청
- 비선점 : 다른 프로세스의 자원을 강제로 뺏을 수 없음
- 원형 대기 : 대기 구조가 순환 형태
한 가지 조건이라도 깨지면 교착은 발생하지 않습니다.
교착 처리 전략
| 전략 | 설명 |
|---|---|
| 예방 | 4가지 조건 중 하나를 원천 차단 |
| 회피 | 안전 상태 유지 (은행원 알고리즘) |
| 탐지 | 주기적으로 검사 후 회복 |
| 무시 | 실무상 드물면 방치 (타조 알고리즘) |
인덱스 — B-Tree가 기본
인덱스는 검색 속도를 높이기 위한 보조 자료구조입니다.
클러스터드 vs 논클러스터드
| 구분 | 클러스터드 인덱스 | 논클러스터드 인덱스 |
|---|---|---|
| 데이터 저장 순서 | 인덱스 순서대로 정렬 | 물리 순서와 무관 |
| 테이블당 개수 | 1개 | 여러 개 |
| 추가 공간 | 작음 | 상대적으로 큼 |
| 조회 속도 | 대량 범위 조회에 유리 | 단건 조회에 유리 |
인덱스의 장단점
- 장점 : SELECT 속도 향상, 정렬/그룹화 시 가속
- 단점 : INSERT/UPDATE/DELETE 시 인덱스도 갱신 → 쓰기 비용 증가, 저장 공간 소모
정규화 단계
릴레이션을 더 작은 릴레이션으로 분해해 중복과 이상 현상을 줄이는 과정.
| 단계 | 만족 조건 |
|---|---|
| 1NF | 모든 속성이 원자값(더 이상 쪼갤 수 없는 값) |
| 2NF | 1NF + 부분 함수 종속 제거 |
| 3NF | 2NF + 이행 함수 종속 제거 |
| BCNF | 3NF + 모든 결정자가 후보키 |
| 4NF | BCNF + 다치 종속 제거 |
| 5NF | 4NF + 조인 종속 제거 |
시험 범위는 보통 BCNF까지입니다.
함수 종속 용어
- 완전 함수 종속 : 속성이 기본키 전체에 종속
- 부분 함수 종속 : 속성이 기본키의 일부에만 종속
- 이행 함수 종속 : A → B → C 관계에서 A → C가 간접적으로 성립
2NF는 부분 종속, 3NF는 이행 종속을 제거합니다. 이 대응이 자주 단답으로 나와요.
이상 현상(Anomaly)
비정규화된 릴레이션에서 발생하는 세 가지 문제.
| 이상 | 의미 |
|---|---|
| 삽입 이상 | 특정 데이터 삽입 시 불필요한 데이터도 함께 넣어야 함 |
| 삭제 이상 | 삭제하고 싶은 데이터 외의 데이터가 연쇄로 삭제됨 |
| 갱신 이상 | 중복된 데이터 일부만 수정해 불일치 발생 |
정규화가 이 세 이상을 제거하는 과정이라는 점에서 묶어 기억하면 됩니다.
무결성 제약
| 유형 | 설명 |
|---|---|
| 개체 무결성 | 기본키는 NULL이거나 중복될 수 없음 |
| 참조 무결성 | 외래키는 참조하는 테이블의 기본키와 일치하거나 NULL |
| 도메인 무결성 | 속성 값이 정의된 도메인(자료형/제약) 안에 있어야 함 |
| 사용자 정의 무결성 | 특정 업무 규칙 (CHECK 제약 등) |
키의 종류
| 키 | 설명 |
|---|---|
| 후보키(Candidate Key) | 유일성 + 최소성을 가진 속성 집합 |
| 기본키(Primary Key) | 후보키 중 선택된 하나 (NULL, 중복 불가) |
| 대체키(Alternate Key) | 기본키로 선택되지 않은 나머지 후보키 |
| 외래키(Foreign Key) | 다른 릴레이션의 기본키를 참조 |
| 슈퍼키(Super Key) | 유일성만 만족(최소성은 없음) |
자주 틀리는 포인트
| 함정 | 정답 |
|---|---|
| 격리 수준 중 MySQL InnoDB 기본값 | REPEATABLE READ |
| 2NF가 제거하는 것 | 부분 함수 종속 |
| 3NF가 제거하는 것 | 이행 함수 종속 |
| 클러스터드 인덱스 개수 | 테이블당 1개 |
| ACID의 D | Durability(영속성) — 지속성이 아님 |
| 외래키 NULL 허용 | 가능(참조 무결성은 NULL 허용) |
정리
DB 이론은 한 줄 정의를 정확히 쓸 수 있는가가 전부입니다. ACID 4글자, 정규화 단계별 제거 대상, 이상 현상 3종, 인덱스 장단점 — 이 네 묶음을 손으로 쓸 수 있으면 단답 문제는 다 풀립니다.