정보처리기사 데이터베이스는 필기 3과목과 실기 모두에서 가장 많은 점수가 걸린 영역입니다. SQL은 별도로 다룬 글이 있으니 이번엔 SQL 외의 이론 부분을 집중적으로 정리합니다. 정규화 단계, 트랜잭션 ACID 속성, 트랜잭션 격리 수준, 인덱스 종류, 그리고 관계 대수까지 실기에서 서술형으로 물어보는 핵심 개념들입니다.

1. 정규화 (1NF ~ BCNF)

정규화는 데이터 중복을 줄이고 이상 현상을 없애기 위해 릴레이션을 분해하는 과정입니다. 실기에서 "이 릴레이션은 몇 정규형인가?"처럼 단계를 판별하거나 "BCNF를 만족하도록 분해하시오" 같은 문제가 나옵니다.

정규형조건제거되는 문제
비정규형반복 그룹(다중값 속성) 존재-
1NF모든 속성 값이 원자값(더 이상 분해 불가). 반복 그룹 없음반복 그룹 제거
2NF1NF + 기본키가 아닌 속성들이 기본키 전체에 완전 함수 종속부분 함수 종속 제거
3NF2NF + 기본키가 아닌 속성들 사이에 이행 함수 종속이 없음이행 함수 종속 제거
BCNF3NF + 모든 결정자가 후보키결정자이면서 후보키가 아닌 것 제거

정규화 예시로 이해하기

주문 정보를 담은 다음 테이블을 정규화해 봅시다.

비정규형 테이블: 주문번호 | 고객명 | 도시 | 상품1 | 수량1 | 상품2 | 수량2 ------------------------------------------------------------ 1001 | 홍길동 | 서울 | 노트북 | 1 | 마우스 | 2 1NF 변환 (반복 그룹 제거): 주문번호 | 고객명 | 도시 | 상품명 | 수량 ----------------------------------------- 1001 | 홍길동 | 서울 | 노트북 | 1 1001 | 홍길동 | 서울 | 마우스 | 2 → PK: (주문번호, 상품명) 2NF 문제: 고객명, 도시는 주문번호에만 종속 (부분 종속) → 분해: 주문(주문번호, 고객명, 도시) + 주문상품(주문번호, 상품명, 수량) 3NF 문제: 도시가 고객명을 통해 주문번호에 이행 종속 → 분해: 주문(주문번호, 고객명) + 고객(고객명, 도시)
🎯 정규화 핵심 포인트
✔ 부분 함수 종속: 복합 기본키에서 일부 키에만 종속 → 2NF로 해결
✔ 이행 함수 종속: A→B, B→C인데 A→C → 3NF로 해결
✔ BCNF: 3NF를 만족하지만 결정자가 후보키가 아닌 경우까지 해결
✔ 4NF, 5NF는 시험에 거의 나오지 않음. 주로 1NF~BCNF 집중

2. 이상 현상

정규화가 되지 않은 테이블에서 발생하는 데이터 관리 문제입니다. 3가지 이상 현상의 이름과 예시를 정확히 알아야 합니다.

이상 현상설명예시
삽입 이상원하는 데이터를 삽입하려면 원하지 않는 데이터도 함께 삽입해야 하는 현상주문 없이 고객만 등록할 수 없는 경우
삭제 이상필요한 데이터를 삭제하려면 다른 데이터도 함께 삭제되는 현상마지막 주문 삭제 시 고객 정보도 사라지는 경우
갱신 이상중복된 데이터 일부만 변경하면 데이터 불일치가 발생하는 현상고객 주소가 여러 행에 중복 저장되어 일부만 업데이트되는 경우

3. 트랜잭션과 ACID

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 작업 단위입니다. 여러 연산을 하나로 묶어서 모두 성공하거나 모두 실패해야 합니다.

속성영문설명
원자성Atomicity트랜잭션 내 모든 연산은 전부 실행되거나 전혀 실행되지 않아야 함. 중간 상태 없음
일관성Consistency트랜잭션 완료 후에도 데이터베이스의 무결성 제약이 유지되어야 함
고립성Isolation동시에 실행되는 트랜잭션들은 서로에게 영향을 주지 않아야 함
지속성Durability커밋된 트랜잭션의 결과는 장애가 발생해도 영구적으로 보존되어야 함

트랜잭션 상태

상태설명
활동(Active)트랜잭션 실행 중인 상태
부분 완료(Partially Committed)마지막 연산까지 실행했지만 아직 커밋 안 된 상태
완료(Committed)트랜잭션이 성공적으로 완료되어 커밋된 상태
실패(Failed)오류로 인해 트랜잭션 실행이 중단된 상태
중단(Aborted)롤백 완료 후 트랜잭션 이전 상태로 복구된 상태

4. 트랜잭션 격리 수준

여러 트랜잭션이 동시에 실행될 때 발생하는 문제를 어느 수준까지 허용할지 정하는 설정입니다. 격리 수준이 높을수록 안전하지만 성능이 낮아집니다.

격리 수준Dirty ReadNon-Repeatable ReadPhantom Read
READ UNCOMMITTED발생발생발생
READ COMMITTED방지발생발생
REPEATABLE READ방지방지발생
SERIALIZABLE방지방지방지
💡 동시성 문제 3종류
Dirty Read: 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽음
Non-Repeatable Read: 같은 쿼리를 두 번 실행했는데 다른 값이 나옴 (행 수정)
Phantom Read: 같은 쿼리를 두 번 실행했는데 없던 행이 생기거나 사라짐 (행 삽입·삭제)

5. 인덱스

데이터 검색 속도를 높이기 위해 별도로 생성하는 자료구조입니다. 책의 색인과 같은 역할입니다.

종류설명
클러스터드 인덱스테이블 데이터가 인덱스 순서에 따라 물리적으로 정렬됨. 테이블당 1개만 가능. 기본키에 자동 생성
비클러스터드 인덱스인덱스는 별도 공간에 존재. 실제 데이터 순서와 무관. 여러 개 생성 가능
밀집 인덱스모든 레코드에 대해 인덱스 항목 존재
희소 인덱스일부 레코드(주로 블록 대표)에만 인덱스 항목 존재. 공간 절약
복합 인덱스두 개 이상 컬럼을 묶어서 생성하는 인덱스
🎯 인덱스 주의사항
✔ 인덱스는 검색 성능↑, 삽입·수정·삭제 성능↓ (인덱스도 함께 수정해야 하므로)
✔ WHERE 절에 자주 사용되는 컬럼에 인덱스 생성 효과적
✔ 카디널리티가 높을수록(값의 종류가 많을수록) 인덱스 효과적
✔ B-트리 인덱스가 가장 일반적. 범위 검색에 유리

6. 관계 대수

관계형 데이터베이스에서 릴레이션을 조작하는 연산들입니다. 실기에서 연산자 기호와 의미를 묻는 문제가 나옵니다.

연산자기호설명
셀렉션(Selection)σ (시그마)조건을 만족하는 행(튜플) 추출. SQL의 WHERE에 해당
프로젝션(Projection)π (파이)특정 열(속성)만 추출. SQL의 SELECT 컬럼 지정에 해당
합집합(Union)두 릴레이션의 튜플 합침. 중복 제거. 두 릴레이션 구조 같아야 함
차집합(Difference)한 릴레이션에만 있는 튜플 반환
교집합(Intersection)두 릴레이션에 모두 있는 튜플 반환
카티션 곱(Cartesian Product)×두 릴레이션의 모든 조합. 행 수 = n × m
조인(Join)두 릴레이션을 공통 속성으로 연결. 카티션 곱 + 셀렉션
디비전(Division)÷특정 릴레이션의 모든 값과 대응하는 튜플만 반환

7. 동시성 제어

여러 트랜잭션이 동시에 같은 데이터에 접근할 때 발생하는 문제를 막기 위한 기법입니다.

기법설명
잠금(Locking)데이터에 잠금을 걸어 다른 트랜잭션의 동시 접근 차단. 공유 잠금(읽기), 배타 잠금(쓰기)
2단계 잠금(2PL)잠금 확장 단계(취득만)와 잠금 수축 단계(해제만)로 나눔. 직렬성 보장. 교착상태 가능
타임스탬프트랜잭션에 시작 시간을 부여해 충돌 시 오래된 트랜잭션을 롤백
낙관적 동시성 제어충돌이 없다고 가정하고 진행 후 완료 시점에 충돌 검사. 충돌 시 롤백
MVCC데이터의 여러 버전을 유지. 읽기 작업에 잠금 불필요. PostgreSQL, MySQL InnoDB에서 사용
💡 회복 기법
로그 기반 회복: 변경 전·후 값을 로그에 기록. 장애 발생 시 Redo(재실행) 또는 Undo(취소)
체크포인트: 주기적으로 메모리 내용을 디스크에 저장. 회복 시 체크포인트 이후만 처리
그림자 페이지: 수정 전 페이지를 별도 보관. 장애 시 원본 복구

마무리

데이터베이스 이론은 SQL과 함께 실기에서 가장 중요한 영역입니다. 특히 정규화는 단계별 조건을 정확히 알고, 주어진 테이블이 어느 정규형인지 판별할 수 있어야 합니다. 트랜잭션 ACID와 격리 수준은 서술형으로 자주 나오니 각 용어의 정확한 설명을 써보는 연습을 반복하세요.