정보처리기사 필기 3과목 데이터베이스 구축은 암기 비중이 높고 실기와 연계가 많아 이중으로 중요한 과목입니다. 특히 정규화, 트랜잭션 ACID, 인덱스, 회복 기법은 거의 매 회차 나오니 확실히 잡아두세요.
1. 관계형 데이터베이스 기본 개념
핵심 용어 정리
| 용어 | 설명 | 다른 표현 |
|---|---|---|
| 릴레이션(Relation) | 데이터를 저장하는 2차원 표 구조 | 테이블(Table) |
| 튜플(Tuple) | 릴레이션의 각 행(가로 줄) — 하나의 레코드 | 행(Row), 레코드 |
| 속성(Attribute) | 릴레이션의 각 열(세로 줄) — 데이터의 특성 | 열(Column), 필드 |
| 도메인(Domain) | 속성이 가질 수 있는 값의 범위 | 값의 집합 |
| 차수(Degree) | 속성(열)의 수 | Column 수 |
| 카디널리티(Cardinality) | 튜플(행)의 수 | Row 수 |
키(Key)의 종류
| 키 종류 | 설명 |
|---|---|
| 슈퍼키(Super Key) | 튜플을 유일하게 식별할 수 있는 속성 집합. 유일성 O, 최소성 X |
| 후보키(Candidate Key) | 유일성 + 최소성을 모두 만족하는 키. 기본키가 될 수 있는 후보 |
| 기본키(Primary Key) | 후보키 중 선택된 대표키. NULL 불가, 중복 불가 |
| 대체키(Alternate Key) | 후보키 중 기본키가 되지 못한 키 |
| 외래키(Foreign Key) | 다른 테이블의 기본키를 참조하는 키. 참조 무결성 보장 |
🎯 키 관련 빈출 포인트
✔ "유일성과 최소성을 모두 만족하는 키는?" → 후보키
✔ "NULL 값을 가질 수 없고 중복이 불가능한 키는?" → 기본키
✔ "슈퍼키는 유일성O, 최소성X" / "후보키는 유일성O, 최소성O"
✔ "유일성과 최소성을 모두 만족하는 키는?" → 후보키
✔ "NULL 값을 가질 수 없고 중복이 불가능한 키는?" → 기본키
✔ "슈퍼키는 유일성O, 최소성X" / "후보키는 유일성O, 최소성O"
무결성 제약 조건
| 무결성 | 설명 |
|---|---|
| 개체 무결성 | 기본키는 NULL이거나 중복될 수 없음 |
| 참조 무결성 | 외래키 값은 참조하는 테이블의 기본키에 존재하거나 NULL이어야 함 |
| 도메인 무결성 | 속성 값은 해당 도메인(정의된 범위) 안에 있어야 함 |
| NULL 무결성 | NOT NULL로 지정된 속성은 NULL 불가 |
2. 정규화 (1NF ~ BCNF)
정규화는 데이터 중복을 제거하고 이상 현상(삽입·삭제·갱신 이상)을 방지하기 위해 테이블을 분리하는 과정입니다. 1NF부터 순서대로 높은 정규형을 만족해가며 진행합니다.
이상 현상 (Anomaly) — 정규화를 해야 하는 이유
| 이상 현상 | 설명 |
|---|---|
| 삽입 이상 | 데이터 삽입 시 불필요한 데이터도 함께 삽입해야 하는 경우 |
| 삭제 이상 | 데이터 삭제 시 의도하지 않은 다른 데이터도 함께 삭제되는 경우 |
| 갱신 이상 | 중복된 데이터 중 일부만 수정하여 데이터 불일치가 발생하는 경우 |
정규형 단계
제1정규형 (1NF) — 원자값
조건: 모든 속성 값이 원자값(더 이상 분해할 수 없는 값)이어야 한다.위반 예: 취미 컬럼에 "독서, 영화, 게임"처럼 복수 값이 저장된 경우
해결: 하나의 행에 값 하나만 저장하도록 분리
제2정규형 (2NF) — 부분 함수 종속 제거
조건: 1NF를 만족하고, 기본키가 복합키일 때 기본키의 일부에만 종속되는 속성(부분 함수 종속)이 없어야 한다.위반 예: (학번, 과목코드)가 기본키인데, 학생이름은 학번에만 종속
해결: 학생 테이블과 수강 테이블로 분리
제3정규형 (3NF) — 이행 함수 종속 제거
조건: 2NF를 만족하고, 기본키가 아닌 속성이 다른 비키 속성에 종속(이행 함수 종속)되지 않아야 한다.위반 예: 학번 → 학과코드 → 학과명 (학번→학과명이 학과코드를 거쳐 종속)
해결: 학과 정보를 별도 테이블로 분리
BCNF (Boyce-Codd Normal Form) — 모든 결정자가 후보키
조건: 3NF를 만족하고, 모든 결정자(X → Y에서 X)가 후보키여야 한다.위반 예: 후보키가 아닌 속성이 다른 속성을 결정하는 경우
특징: 3NF보다 엄격. 3NF를 만족해도 BCNF를 만족 못 할 수 있음
🎯 정규화 빈출 포인트
✔ "원자값이 아닌 속성 제거" → 1NF
✔ "부분 함수 종속 제거" → 2NF
✔ "이행 함수 종속 제거" → 3NF
✔ "모든 결정자가 후보키" → BCNF
정규화 순서: 1NF → 2NF → 3NF → BCNF → 4NF → 5NF
✔ "원자값이 아닌 속성 제거" → 1NF
✔ "부분 함수 종속 제거" → 2NF
✔ "이행 함수 종속 제거" → 3NF
✔ "모든 결정자가 후보키" → BCNF
정규화 순서: 1NF → 2NF → 3NF → BCNF → 4NF → 5NF
💡 함수 종속 개념 이해하기
"A → B" = "A를 알면 B를 결정할 수 있다"
학번 → 학생이름 (학번을 알면 이름을 알 수 있음)
부분 함수 종속: 복합키(A,B)에서 A만으로 C를 결정 → (A,B) → C가 아닌 A → C
이행 함수 종속: A→B이고 B→C이면 A→C (B를 거쳐 C가 종속)
"A → B" = "A를 알면 B를 결정할 수 있다"
학번 → 학생이름 (학번을 알면 이름을 알 수 있음)
부분 함수 종속: 복합키(A,B)에서 A만으로 C를 결정 → (A,B) → C가 아닌 A → C
이행 함수 종속: A→B이고 B→C이면 A→C (B를 거쳐 C가 종속)
3. 트랜잭션과 ACID
트랜잭션은 데이터베이스에서 하나의 논리적 작업 단위입니다. "모두 실행되거나, 모두 실행되지 않는" 원자적 단위예요.
ACID 특성 — 트랜잭션의 4가지 특성
| 특성 | 설명 | 위반 예시 |
|---|---|---|
| 원자성 (Atomicity) | 트랜잭션의 연산은 모두 실행되거나 전혀 실행되지 않아야 한다 | 이체 시 출금은 됐는데 입금이 안 된 상태 |
| 일관성 (Consistency) | 트랜잭션 완료 후에도 데이터베이스가 일관된 상태를 유지해야 한다 | 이체 전후 두 계좌 잔액 합계가 달라지는 경우 |
| 격리성 (Isolation) | 실행 중인 트랜잭션이 다른 트랜잭션의 연산에 영향을 받지 않아야 한다 | 두 트랜잭션이 동시에 같은 데이터를 수정하는 경우 |
| 지속성 (Durability) | COMMIT된 결과는 시스템 장애가 발생해도 영구적으로 유지되어야 한다 | COMMIT 후 시스템 다운 시 데이터가 사라지는 경우 |
🎯 ACID 암기 포인트
Atomicity(원자성) — All or Nothing
Consistency(일관성) — 규칙 유지
Isolation(격리성) — 독립 실행
Durability(지속성) — COMMIT 후 영구 보존
Atomicity(원자성) — All or Nothing
Consistency(일관성) — 규칙 유지
Isolation(격리성) — 독립 실행
Durability(지속성) — COMMIT 후 영구 보존
4. 동시성 제어와 로킹
여러 트랜잭션이 동시에 같은 데이터에 접근할 때 생기는 문제를 제어하는 기법입니다.
동시성 제어 문제 유형
| 문제 | 설명 |
|---|---|
| 갱신 분실 (Lost Update) | 두 트랜잭션이 같은 데이터를 읽고 수정할 때, 나중에 수정한 값이 먼저 수정한 값을 덮어쓰는 문제 |
| 오염된 읽기 (Dirty Read) | COMMIT되지 않은 데이터를 다른 트랜잭션이 읽는 문제 |
| 반복 불가능한 읽기 (Non-repeatable Read) | 같은 트랜잭션에서 같은 데이터를 두 번 읽었을 때 값이 달라지는 문제 |
| 유령 읽기 (Phantom Read) | 트랜잭션 실행 중 없던 행이 새로 나타나는(다른 트랜잭션이 삽입) 문제 |
로킹(Locking)
| 락 종류 | 설명 | 다른 트랜잭션 접근 |
|---|---|---|
| 공유 락 (Shared Lock, S-Lock) | 읽기 전용 락. 여러 트랜잭션이 동시에 공유 락 획득 가능 | 읽기 가능, 쓰기 불가 |
| 배타 락 (Exclusive Lock, X-Lock) | 쓰기 락. 하나의 트랜잭션만 획득 가능 | 읽기·쓰기 모두 불가 |
💡 교착 상태(Deadlock) 발생 조건
두 트랜잭션이 서로 상대방이 가진 락을 기다리며 무한히 대기하는 상황
해결 방법: 타임아웃(일정 시간 후 강제 종료), 교착 상태 탐지 후 롤백
두 트랜잭션이 서로 상대방이 가진 락을 기다리며 무한히 대기하는 상황
해결 방법: 타임아웃(일정 시간 후 강제 종료), 교착 상태 탐지 후 롤백
5. 회복 기법
시스템 장애 발생 시 데이터베이스를 일관된 상태로 복원하는 기법입니다. 로그(Log)를 사용하는 것이 핵심입니다.
| 회복 기법 | 설명 |
|---|---|
| 로그 기반 회복 (Redo / Undo) |
Redo (재실행): COMMIT된 트랜잭션의 변경을 다시 실행. 장애 전 COMMIT된 데이터 복원 Undo (취소): COMMIT되지 않은 트랜잭션의 변경을 취소. 미완료 트랜잭션 되돌리기 |
| 체크포인트(Checkpoint) | 일정 시점에 디스크에 저장된 데이터와 로그를 동기화. 회복 시 체크포인트 이후 로그만 분석하면 됨 |
| 그림자 페이지 대체 | 변경 전 원본 페이지를 그림자로 보관. 장애 시 그림자 페이지로 복원 |
🎯 회복 기법 빈출 포인트
✔ "COMMIT된 트랜잭션을 재실행하는 회복 연산은?" → Redo
✔ "COMMIT되지 않은 트랜잭션을 취소하는 회복 연산은?" → Undo
✔ "회복 시 모든 로그를 분석하지 않아도 되게 하는 기법은?" → 체크포인트
✔ "COMMIT된 트랜잭션을 재실행하는 회복 연산은?" → Redo
✔ "COMMIT되지 않은 트랜잭션을 취소하는 회복 연산은?" → Undo
✔ "회복 시 모든 로그를 분석하지 않아도 되게 하는 기법은?" → 체크포인트
6. 인덱스(Index)와 뷰(View)
인덱스
인덱스는 데이터 검색 속도를 높이기 위해 만드는 목차입니다. 책의 목차처럼 원하는 데이터의 위치를 빠르게 찾을 수 있게 합니다.
| 인덱스 종류 | 설명 |
|---|---|
| 클러스터드 인덱스 | 테이블의 데이터가 인덱스 순서대로 물리적으로 저장. 테이블당 1개만 가능. 범위 검색에 유리 |
| 비클러스터드 인덱스 | 인덱스와 실제 데이터 위치가 별도 저장. 여러 개 가능. 포인터로 실제 데이터 접근 |
| B-Tree 인덱스 | 가장 일반적. 균형 이진 트리 구조. 범위 검색·정렬 지원 |
| 해시 인덱스 | 해시 함수로 위치를 결정. 등치(=) 검색에 O(1) 성능. 범위 검색 불가 |
뷰(View)
뷰는 하나 이상의 테이블을 기반으로 만든 가상 테이블입니다. 실제 데이터는 기본 테이블에 저장되고, 뷰는 SELECT 쿼리의 결과를 보여주는 창구 역할을 합니다.
| 특징 | 설명 |
|---|---|
| 독립성 | 기본 테이블 구조 변경 시 응용 프로그램 영향 최소화 |
| 보안성 | 민감한 컬럼을 숨기고 필요한 데이터만 노출 |
| 편의성 | 복잡한 쿼리를 뷰로 단순화하여 재사용 |
| 물리적 독립성 | 뷰 자체에 데이터를 저장하지 않음 → 저장 공간 절약 |
-- 뷰 생성
CREATE VIEW 컴퓨터공학_학생 AS
SELECT 학번, 이름, 성적
FROM 학생
WHERE 학과 = '컴퓨터공학';
-- 뷰 삭제
DROP VIEW 컴퓨터공학_학생;
📚 3과목 필기 고득점 전략
① 정규화 단계(1NF→2NF→3NF→BCNF)와 각 단계의 제거 대상을 반드시 암기하세요. "부분 함수 종속은 2NF에서 제거", "이행 함수 종속은 3NF에서 제거"가 핵심입니다.
② ACID 4가지 특성은 영문 약자와 한국어 이름, 그 의미까지 세트로 외우세요. 매 회차 출제 수준입니다.
③ Redo와 Undo의 차이를 명확히 하세요. "COMMIT됐으면 Redo(재실행), 안 됐으면 Undo(취소)"가 핵심 구분 기준입니다.
④ 키의 종류(슈퍼·후보·기본·대체·외래)와 각 조건(유일성·최소성·NULL 허용 여부)을 표로 정리해두세요.
① 정규화 단계(1NF→2NF→3NF→BCNF)와 각 단계의 제거 대상을 반드시 암기하세요. "부분 함수 종속은 2NF에서 제거", "이행 함수 종속은 3NF에서 제거"가 핵심입니다.
② ACID 4가지 특성은 영문 약자와 한국어 이름, 그 의미까지 세트로 외우세요. 매 회차 출제 수준입니다.
③ Redo와 Undo의 차이를 명확히 하세요. "COMMIT됐으면 Redo(재실행), 안 됐으면 Undo(취소)"가 핵심 구분 기준입니다.
④ 키의 종류(슈퍼·후보·기본·대체·외래)와 각 조건(유일성·최소성·NULL 허용 여부)을 표로 정리해두세요.