정보처리기사 실기 — 1. DB (데이터베이스)
출제 확률: ★(낮음) ~ ★★★★★(매우 높음)
0. DB 과목 한눈에
| 항목 | 내용 |
|---|
| 예상 문제 수 | 3~4문제 |
| ★★★★★ | SQL 명령어, 조인 |
| ★★★★ | 트랜잭션, 요개논물, 키 |
| ★★★ | 정규화, 스토리지 |
| ★★ | 관계대수/해석, 관계데이터모델, 무결성, 파일구조 |
1. SQL 명령어 ★★★★★
1.1 DML / DDL / DCL — 상황별 쿼리
-- 데이터 추가
INSERT INTO 테이블(컬럼1, 컬럼2...) VALUES (값1, 값2...);
-- 데이터 복제
INSERT INTO 테이블1(컬럼1...) SELECT 컬럼3, 컬럼4... FROM 테이블2;
-- 데이터 삭제
DELETE FROM 테이블 WHERE 조건;
-- 데이터 수정
UPDATE 테이블 SET 컬럼1=값1, 컬럼2=값2 WHERE 조건;
-- 테이블 제거 (RESTRICT: 참조 시 삭제 불가 / CASCADE: 참조 테이블까지 삭제)
DROP TABLE 테이블 RESTRICT;
DROP TABLE 테이블 CASCADE;
-- 권한 부여 / 회수
GRANT 권한 ON 테이블 TO 사용자; -- SELECT, INSERT 등
REVOKE 권한 ON 테이블 FROM 사용자;
-- 뷰 생성 / 제거
CREATE VIEW 뷰이름 AS SELECT ... FROM 테이블 WHERE 조건;
DROP VIEW 뷰이름 RESTRICT;
DROP VIEW 뷰이름 CASCADE;
-- 컬럼 추가 / 제거
ALTER TABLE 테이블 ADD 컬럼이름 데이터타입;
ALTER TABLE 테이블 DROP COLUMN 컬럼이름;
-- 인덱스 생성
CREATE INDEX 인덱스이름 ON 테이블(컬럼1, 컬럼2...);
1.2 SELECT — 정렬·조건·집계
-- 컬럼 기준 정렬 (ASC 오름차순 생략 가능 / DESC 내림차순)
SELECT 컬럼1, 컬럼2 FROM 테이블 ORDER BY 컬럼1 ASC;
SELECT 컬럼1, 컬럼2 FROM 테이블 ORDER BY 컬럼1 DESC, 컬럼2 DESC;
-- 범위 조회
SELECT ... FROM 테이블 WHERE 컬럼1 BETWEEN 1 AND 3;
SELECT ... FROM 테이블 WHERE 컬럼1 IN (1, 2, 3);
-- LIKE 패턴
SELECT ... FROM 테이블 WHERE 컬럼1 LIKE '특정문자%'; -- 특정 문자로 시작
SELECT ... FROM 테이블 WHERE 컬럼1 LIKE '%특정문자%'; -- 특정 문자 포함
SELECT ... FROM 테이블 WHERE 컬럼1 LIKE '_특정문자'; -- 앞에 한 글자만
-- NULL / 별칭
SELECT ... FROM 테이블 WHERE 컬럼1 IS NULL;
SELECT 컬럼1 AS 별칭1, 컬럼2 별칭2 FROM 테이블; -- AS 생략 가능
-- 집계 + 조건 (HAVING은 GROUP BY 이후 그룹 조건)
SELECT 컬럼2, SUM(컬럼1) AS 합계
FROM 테이블 WHERE 조건
GROUP BY 컬럼2 HAVING SUM(컬럼1) 조건;
-- 개수 세기
SELECT COUNT(컬럼명) FROM 테이블 WHERE 조건; -- NULL 아닌 행
SELECT COUNT(*) FROM 테이블 WHERE 조건; -- 모든 행
1.3 집계 함수
| 함수 | 역할 |
|---|
| COUNT(*, 컬럼명) | * = 모든 행 / 컬럼명 = NULL 아닌 행 |
| SUM(컬럼명) | 합계 |
| AVG(컬럼명) | 평균 |
| MAX(컬럼명) | 최대값 |
| MIN(컬럼명) | 최소값 |
1.4 서브쿼리
| 연산자 | 의미 |
|---|
| IN | 서브쿼리 값 중 하나라도 일치하면 반환 |
| > ALL | 서브쿼리 모든 값보다 커야 반환 |
| > ANY (= SOME) | 서브쿼리 값 하나라도보다 크면 반환 |
| EXISTS | 서브쿼리 결과가 존재하면 반환 |
중첩 서브쿼리 풀이 순서: 가장 안쪽 → 바깥쪽 → 메인 쿼리
1.5 집합 연산자
| 연산자 | 설명 |
|---|
| UNION | 중복 제거 합집합 |
| UNION ALL | 중복 포함 합집합 |
| INTERSECT | 교집합 |
| EXCEPT | 차집합 (Oracle: MINUS) |
SELECT 컬럼명 FROM 테이블1 UNION SELECT 컬럼명 FROM 테이블2;
SELECT 컬럼명 FROM 테이블1 UNION ALL SELECT 컬럼명 FROM 테이블2;
SELECT 컬럼명1 FROM 테이블1 INTERSECT SELECT 컬럼명 FROM 테이블2;
SELECT 컬럼명1 FROM 테이블1 EXCEPT SELECT 컬럼명 FROM 테이블2;
1.6 쿼리 해석 — 자주 나오는 패턴
-- AND가 OR보다 우선 → (조건1 AND 조건2) OR 조건3
SELECT COUNT(*) FROM 테이블 WHERE 조건1 AND 조건2 OR 조건3;
-- 중복 제외한 고유 값 개수
SELECT COUNT(DISTINCT 컬럼1) FROM 테이블;
2. 조인(JOIN) ★★★★★
| 종류 | 키워드 | 설명 |
|---|
| 세타 조인 | (INNER) JOIN + 비등호 | 조건 만족 튜플만 반환 |
| 동등 조인 | (INNER) JOIN + = | 세타 조인 중 등호 일치 |
| 자연 조인 | NATURAL JOIN | 동등 조인 + 중복 속성 제거 |
| 외부 조인 | LEFT/RIGHT/FULL OUTER JOIN | 불일치 튜플도 반환, NULL 채움 |
| 교차 조인 | CROSS JOIN | 모든 튜플 조합 (카티션) |
-- 세타 조인
SELECT T1.컬럼1, T2.컬럼2 FROM 테이블1
INNER JOIN 테이블2 ON T1.컬럼1 > T2.컬럼1;
-- 동등 조인 (INNER 생략 가능)
SELECT T1.컬럼1, T2.컬럼2 FROM 테이블1
INNER JOIN 테이블2 ON T1.컬럼1 = T2.컬럼1;
-- 자연 조인
SELECT 컬럼1, 컬럼2 FROM 테이블1 NATURAL JOIN 테이블2;
-- 외부 조인
SELECT T1.컬럼1, T2.컬럼2 FROM 테이블1
LEFT OUTER JOIN 테이블2 ON T1.컬럼1 = T2.컬럼1;
-- 교차 조인 (= FROM 테이블1, 테이블2)
SELECT T1.컬럼1, T2.컬럼2 FROM 테이블1 CROSS JOIN 테이블2;
3. 트랜잭션 ★★★★
3.1 ACID
| 특성 | 키워드 |
|---|
| 원자성 (Atomicity) | All or Nothing |
| 일관성 (Consistency) | 실행 후에도 DB 일관성 보장 |
| 고립성 (Isolation) | 다른 트랜잭션 끼어들 수 없음 |
| 지속성 (Durability) | 성공 완료 결과 영구 저장 |
3.2 동시성 제어 — Locking
| 락 | 용도 |
|---|
| S-Lock (공유 락) | 읽기 — 동시 읽기 가능, 쓰기 불가 |
| X-Lock (배타 락) | 쓰기 — 읽기/쓰기 모두 불가 |
3.3 회복 기법
| 구분 | 항목 | 키워드 |
|---|
| 핵심 | Redo (재실행) | Start/Commit 기록 필요 |
| 핵심 | Undo (취소) | Start 있지만 Commit 없는 경우 |
| 기법 | 지연 갱신 | Redo만 사용 |
| 기법 | 즉각 갱신 | Redo + Undo 모두 필요 |
| 기법 | 체크포인트 회복 | 특정 시점 DB 상태 저장 후 복구 |
| 기법 | 그림자 페이징 | 실패 시 그림자 페이지로 대체 |
3.4 스키마 3단계
| 스키마 | 키워드 |
|---|
| 외부 스키마 | 사용자 뷰, 서브스키마 |
| 개념 스키마 | 개체 간 관계·제약 조건 정의 |
| 내부 스키마 | 물리 저장, 레코드 형식 정의 |
4. 관계대수 / 관계해석 ★★
| 구분 | 관계대수 | 관계해석 |
|---|
| 성격 | 절차적 언어 | 비절차적 언어 (Codd) |
| 관점 | 어떻게(HOW) | 무엇을(WHAT) |
4.1 일반 집합 연산자
| 연산자 | 기호 | 설명 |
|---|
| 합집합 | ∪ | 중복 제외, 두 릴레이션 튜플 모두 반환 |
| 교집합 | ∩ | 공통 튜플 반환 |
| 차집합 | − | 왼쪽에만 있는 튜플 |
| 카티션 프로덕트 | × | 모든 순서쌍 조합 |
4.2 순수 관계 연산자
| 연산자 | 기호 | 설명 |
|---|
| 셀렉트 | σ | 조건 만족 튜플 반환 (수평) |
| 프로젝트 | π | 조건 만족 열 반환 (수직) |
| 조인 | ⨝ | 공통 속성 기준 결합 |
| 디비전 | ÷ | B의 모든 튜플에 관계 맺는 A의 튜플 반환 |
주어진 릴레이션에 대해 연산자 수행 결과를 직접 쓸 수 있어야 함 (예: R ÷ S)
5. 관계 데이터 모델 ★★
| 구성요소 | 키워드 |
|---|
| Attribute (속성) | 릴레이션의 각 열, 데이터 필드 |
| Tuple (튜플) | 릴레이션의 각 행, 중복값 포함 가능 |
| Cardinality | 튜플의 수, 고유 값 총 개수 |
| Degree (차수) | 릴레이션 속성 수 |
| Domain (도메인) | 속성이 가질 수 있는 값의 집합 |
| Relation Instance | 특정 시점의 실제 데이터 집합 |
| Relation (릴레이션) | 행·열 2차원 테이블 |
| Relation Schema | DB 구조/제약 조건 명세 |
| Identifier (식별자) | 튜플 고유 식별 속성 (후보키 등) |
6. 요개논물 (DB 설계) ★★★★
6.1 데이터 모델 3가지 구성요소
| 구성 요소 | 핵심 개념 | 설명 |
|---|
| 구조 | 논리 데이터모델 표현 | 타입, 관계 정의 |
| 연산 | 데이터 처리 작업 명세 | 조작, 검색 방법 |
| 제약조건 | 무결성 유지 방법 | 논리적 제약사항 |
6.2 DB 설계 4단계
| 단계 | 핵심 활동 | 주요 산출물 |
|---|
| 요구조건 분석 | 사용자 요구사항 수집·분석 | 요구조건 명세서 |
| 개념적 설계 | 현실 세계 추상적 표현 | ER 다이어그램 |
| 논리적 설계 | DBMS 맞춤 설계, 정규화 | 논리적 스키마 |
| 물리적 설계 | 특정 DBMS 고려 | 테이블 정의서 |
전체 프로세스: 요구조건 분석 → 개념적 → 논리적 → 물리적 → 구현
7. 정규화 ★★★
7.1 정규형
| 정규형 | 조건 |
|---|
| 제1정규형 | 모든 속성 값 = 원자값 |
| 제2정규형 | 부분 함수 종속 제거 |
| 제3정규형 | 이행 함수 종속 제거 |
| BCNF | 모든 결정자가 후보키 |
| 제4정규형 | 다치 종속 제거 |
| 제5정규형 | 조인 종속 제거 |
7.2 함수 종속
| 종류 | 설명 |
|---|
| 완전 함수 종속 | 기본키 전체에 대해서만 종속 |
| 부분 함수 종속 | 기본키 일부 속성에 종속 |
| 이행 함수 종속 | A→B, B→C, A→C 성립 |
- A→B: 속성 A의 값이 속성 B의 값을 결정
- 반정규화: 정규화된 구조를 의도적으로 통합·중복 허용 → 성능 최적화
8. 키(Key) ★★★★
기대(후)슈: 기본키 + 대체키 = 후보키 ⊂ 슈퍼키
| 키 종류 | 키워드 |
|---|
| 기본키 | 후보키 중 선택, NOT NULL |
| 대체키 | 후보키 중 선택되지 못한 나머지 |
| 후보키 | 유일성 O, 최소성 O |
| 슈퍼키 | 유일성 O, 최소성 X |
| 외래키 | 다른 릴레이션 기본키 참조 |
9. 무결성 ★★
| 무결성 | SQL 구현 | 키워드 |
|---|
| 개체 | PRIMARY KEY | NOT NULL + 유일 |
| 참조 | FOREIGN KEY | 참조 테이블 기본키값 or NULL |
| 속성(도메인) | DOMAIN, CHECK, DEFAULT | 정의된 도메인 준수 |
| 사용자 | TRIGGER | 비즈니스 규칙 직접 정의 |
| 키 | UNIQUE | 적어도 하나의 키 존재 |
10. 스토리지 (RAID) ★★★
| RAID | 핵심 | 키워드 |
|---|
| RAID 0 | 분산 저장 | 스트라이핑, 패리티·복제 없음 |
| RAID 1 | 복제 저장 | 미러링, 높은 안정성 |
| RAID 5 | 스트라이핑 + 분산 패리티 | 최소 3개 디스크 |
| RAID 6 | 이중 분산 패리티 | 최소 4개 디스크 |
| RAID 10 | 미러링 + 스트라이핑 | RAID 1 + 0, 최소 4개 디스크 |
11. 파일구조 ★★
| 접근 방법 | 키워드 |
|---|
| 순차 | 저장 순서대로 접근, 공간 효율적 |
| 인덱스 | 키값 + 주소 포인터, 검색 빠름 |
| 해싱 | 해시 함수, 매우 빠른 접근 |
12. 시험 포인트 체크리스트