정보처리기사
정보처리기사 필기(3) - DB 구축
2023-12-26필기 시험 공략
개인적으로 필기 시험의 경우 기출문제를 많이 풀어보는 것으로 충분하다고 생각한다.
구글 앱 스토어에서 "정보처리기출문제"라는 키워드로 검색해서 앱에 등록된 문제들을 많이 풀어보면 좋을 것 같다.
나의 경우 아래의 순서로 필기한 후, 기출문제를 많이 풀어본 후에 시험을 쳤다.
표 등 일부 내용은 깃허브에서 보는 것이 더 편하다.
본문은 요약본으로, 노출 빈도가 높다고 느낀 키워드는 ★표로 강조하였다.
자료 구조
자료 구조의 분류
- 선형 구조
- 리스트
- 선형 리스트
- 연결 리스트
- 리스트
- 비선형 구조
- 트리
- 그래프
자료 구조의 활용
- 정렬
- 집합된 데이터 레코드를 일정 기준으로 재배열하는 것.
- 오름차순, 내림차순
- 검색
- 저장된 데이터 레코드 중 원하는 값을 빠르게 찾는 것
- 인덱스(Index)
- 데이터베이스 성능에 많은 영향을 주는 DBMS의 구성 요소로, 테이블과 클러스터에 연관되어 독립적인 저장 공간을 보유하며, 데이터베이스에 저장된 자료를 더욱 빠르게 조회하기 위하여 별도로 구성한 순서 데이터를 말한다. (ex. 책의 맨 뒤에 빠르게 찾기 등)
- B-트리 인덱스는 분기를 목적으로 하는 Branch Block을 가지고 있다.
- BETWEEN 등 범위(Range) 검색에 활용될 수 있다.
- 파일 편성
- 파일에서 레코드의 물리적인 배열 방법이다.
선형 자료 구조
리스트(List)
- 선형 리스트(Linear List)
- 배열(Array)과 같이 연속되는 기억 장소에 저장되는 리스트이다.
- 가장 간단한 데이터 구조 중 하나로 데이터 항목을 추가 삭제하는 것이 불편하다.
- 연결 리스트(Linked List)
- 노드의 포인터 부분을 서로 연결시킨 리스트로, 연속적인 기억 공간이 없어도 저장이 가능하다.
- 노트의 삽입/삭제가 용이하며 포인터를 위한 추가 공간이 필요하므로 기억 공간이 많이 소요된다.
스택(Stack)
- 리스트의 한쪽 끝에서만 자료의 삽입과 삭제가 이루어 지는 자료 구조이다.
- 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO, Last In First Out) 방식이다.(PUSH and POP)
- 마지막 삽입된 자료의 위치를 Top이라 하고, 가장 먼저 삽입된 자료의 위치를 Bottom이라고 한다.
- 스택 가능 : 메모리상에서 프로그램의 복귀 주소와 변수 사이에 특정 값을 저장해 두었다가 그 값이 변경되었을 경우 오버플로우 상태로 가정하여 프로그램 실행을 중단하는 기술이다.
- 스택 응용 분야
- 인터럽트 처리, 수식의 계산, 0-주소 지정 방식
- 재귀호출, 후위 표현(Post-fix expression)의 연산, 깊이 우선 탐색
스택의 삽입 알고리즘
if TOP >= n then call Stack-Full;
else TOP = TOP + 1;
Stack(TOP) = Data;
end Insert
스택의 삭제 알고리즘
if TOP = 0
then Underflow
Else
Remove S(TOP)
TOP = TOP - 1
스택의 오버플로 알고리즘
TOP <- TOP + 1
if TOP > n then goto AA
else Stack(TOP) <- item
큐(Queue)
- 자료의 삽입 작업은 선형 리스트의 한쪽 끝에서, 제거 작업은 다른 쪽 끝에서 수행되는 자료 구조이다.
- 가장 먼저 삽입된 자료가 가장 먼저 삭제되는 선입선출(FIFO: First In First Out) 방식이다.
- 큐의 응용 분야 : 운영체제의 작업 스케줄링 등에서 응용된다.
덱(Deque)
- 자료의 삽입과 삭제가 리스트의 양쪽 끝에서 이루어지므로 두 개의 포인터를 사용하는 자료 구조이다.
- 스택과 큐를 복합한 형태이다.
- 입력 제한 덱을 Scroll, 출력 제한 덱을 Shelf라고 한다.
비선형 구조
트리(Tree)
- 그래프(Graph)의 특수한 형태로써 노드(Node)와 브랜치(Branch)를 이용하여 사이클을 이루지 않도록 구성한 자료 구조이다.
이진 트리(Binary Tree)
- 차수(Degree)가 이 이하인 노트들로만 구성된 트리
- 이 트리의 레벨 n에서 최대 노드의 수 : 2ⁿ-1
- 깊이(레벨)가 4인 트리의 최대 노드 수는 2⁴-1로, 15이다.
- 구조
- 정이진 트리 : 첫 번째 레벨부터 마지막 레벨까지 모두 2개씩 채워진 트리를 말한다.
- 전이진 트리 : 전이진 트리에서 한쪽 방향 노드가 아예 존재하지 않는 트리를 말한다.
- 사향 이진 트리 : 근노드로부터 한쪽 방향으로만 기울어진 트리를 말한다.
그래프
- 정점(Vertex)과 간선(Edge)의 집합으로 이루어지는 자료 구조.
- 표현 방법 : 인접 행렬(Adjacency Matrix)
- 신장 트리(Spanning Tree) : 간선들이 사이클을 이루지 않도록 정점들을 연결시킨 그래프이다.
- 종류 : 방향 그래프, 무방향 그래프, 완전 그래프, 부 그래프
- n개의 노드로 구성된 무방향 그래프의 최대 간선 수는 n(n-1)/2개다.
- 제어 흐름 스래프에서 순환 복잡도 : V(G) - E(화살표 수) - N(노드 수) + 2
인접 행렬(Adjacency Matrix)
- 방향 그래프에서 ViVj 관계를 나타내는 행렬의 원소를 Aij라고 할 때, 방향 간선이 있으면 행렬의 Aij = 1, 방향 간선이 없으면 행렬의 Aij = 0 으로 나타낸다.
- 무방향 그래프에서 Vi와 Vj가 서로 인접하면 Aij = 1, 서로 인접하지 않으면 Aij = 0으로 나타낸다.
- 여기서 i, j는 첨자 (A₃의 3과 같음)
정렬(Sort)
- 정렬 알고리즘 선택 시 고려사항 : 데이터의 양, 초기 데이터의 배열 상태, 키 값들의 분포 상태, 사용 컴퓨터 시스템의 특성
- 종류 : 내부 정렬(장치에서 정렬이 이루어짐), 외부 정렬(보조 기억 장치에서 정렬이 이루어짐)
삽입 정렬(Insertion Sort)
- 정렬된 파일에 새로운 하나의 레코드를 순서에 따라 삽입시켜 정렬하는 방법
선택 정렬(Selection Sort)
- n개의 레코드 중에서 최소값(또는 최대값)을 찾아 1st 레코드 위치에 놓고, 나머지 (n-1) 개의 레코드 중에서 최소값(또는 최대값)을 찾아 2nd 레코드 위치에 놓는 방법을 반복하여 정렬하는 방법이다.
- 최대, 최소, 평균 시간 복잡도 : O(n²)
병합 정렬(2-Way Merge Sort)
- 두 개의 키들을 한 쌍으로 하여 각 쌍에 대해 순서를 정한다.
- 순서대로 정렬된 각 쌍의 키들을 합병하여 하나의 정렬된 서브 리스트로 만든다.
- 최대, 최소, 평균 시간 복잡도 : O(n log₂ n)
퀵 정렬(Quick Sort)
- 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어가면서 정렬하는 방법으로, 키를 기준으로 작은 값은 왼쪽에 큰 값은 오른쪽에 모이도록 서로 교환시키는 부분 교환 정렬법이다.
- 최대, 최소, 평균 시간 복잡도 : O(n log₂ n), 약=O(n²)
힙 정렬(Heap Sort)
- 전이진 트리를 이용하여 정렬하는 방법이다.
- 정렬한 입력 레코드들로 힙을 구성하고 가장 큰 키값을 갖는 루트 노드를 제거하는 과정을 반복하여 정렬하는 기법이다.
- 평균 수행 시간 복잡도는 O(n log₂ n)이고, 최악의 수행 시간 복잡도는 O(log₂ n)이다.
- 입력 자료의 레코드를 완전 이진 트리(Complete Binary Tree)로 구성한다.
검색(Search)과 해싱(Hashing)
검색
-
기억 공간 내 기억된 자료 중에서 주어진 조건을 만족하는 자료를 찾는 것
-
이분 검색(Binary Search, 이진 검색)
- 이분 검색을 실행하기 위한 전제 조건은 자료가 순차적으로 정렬되어 있어야 한다.
- 탐색 효율이 좋고 탐색 시간이 적게 소요된다.
- 비교 횟수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어든다.
-
선형 검색(Linear Search)
- 순차 검색(Sequential Search)이라고도 한다.
- 주어진 자료에서 원소를 첫 번째 레코드부터 순차적으로 비교하면서 해당키 값을 가진 레코드를 찾아내는 가장 간단한 검색 방법이다.
- 데이터를 특별히 조직화할 필요가 없고 다양한 상황에서도 사용될 수 있는 장점이 있지만 N개의 입력 자료에 대해서 평균적으로 (n+1)/2번의 비교를 해야 하므로 비효율적이다.
-
피보나치 검색(Fibonacci Search)
- 이진 검색과 비슷한 원리로, 비교 대상 기준을 피보나치 수열로 결정한다.
- 피보나치 수열 : 1,2,3,5,8,11~로 앞의 두 수의 합이 다음 번 값이 된다.
-
블록 검색
- 전체 레코드를 일정한 블록으로 분리한 뒤 각 블록 내의 키값을 순서대로 비교하여 원하는 값을 찾는 기법이다.
-
이진 트리 검색
- 레코드를 2진 트리로 구성하여 검색하는 방식으로 데이터를 입력하는 순서대로 첫 번째 값을 근노드로 지정하고 근노드보다 작으면 왼쪽, 크면 오른쪽에 연결하여 구성한다.
해싱
-
해싱 함수(Hashing Function)를 이용하여 레코드키에 대한 해시 테이블(Hash Table) 내의 홈 주소(Home Address)를 계산하여 주어진 레코드에 접근하는 방식이다.
-
직접 접근(Direct Access Method) 파일을 구성할 때 사용된다.
-
속도는 가장 빠르지만 충돌 현상 시 오버플로우 해결의 부담이 가중되며, 많은 기억 공간을 요구한다.
-
제산 방법(Division Method)
- 해싱 함수 기법에서 키값을 양의 정수인 소수로 나누어 나머지를 홈주소로 취하는 방법이다.
-
중간 제곱 방법(Mid-Square Method)
- 레코드 키값을 제곱하고 나서 그 중간 부분의 값을 주소로 계산하는 방법이다.
- 해시 테이블의 크기에 따라서 중간 부분의 적당한 자릿수를 선택할 수 있다.
- 비트 단위로 n 자릿수를 중간 위치 자릿수로 가정하면 해시 테이블의 크기는 2n이다.
-
중첩 방법(Folding Method)
- 해싱 함수 중 주어진 키를 여러 부분으로 나누고, 각 부분의 값을 더하거나 배타적 논리합(XOR: Exclusive OR) 연산을 통하여 나온 결과로 주소를 취하는 방법이다.
-
기수 변환 방법(Radix Conversion Method)
- 해싱 함수 기법 중 어떤 진법으로 표현된 주어진 레코드 키값을 다른 진법으로 간주하고 키값을 변환하여 홈주소로 취하는 방식이다.
-
계수 분석 방법(Digit Analysis Method)
- 주어진 모든 키값들에서 그 키를 구성하는 자릿수들의 분포를 조사하여 비교적 고른 분포를 보이는 자릿수들을 필요한 만큼 택하는 방법을 취하는 해싱 함수 기법이다.
데이터베이스(Database) ★★★
데이터베이스의 정의
- 통합된 데이터(Integrated Data) : 각 사용자의 데이터를 한 곳에 모아 통합한 데이터이다.
- 저장된 데이터(Stored Data) : 데이터베이스는 컴퓨터 하드웨어 저장 장치에 저장되어 있는 데이터이다.
- 운영 데이터(Operational Data) : 데이터베이스는 어떤 조직의 고유 기능을 수행하기 위해 반드시 필요한 데이터이다.
- 공용 데이터(Shared Data) : 데이터베이스를 여러 사용자가 공동 소유/관리/활용하는 데이터이다.
데이터베이스의 특성
- 실시간 접근성(Real Time Accessibility) : 수시적이고 비정형적인 질의에 대하여 실시간 처리로 응답할 수 있어야 한다.
- 내용에 의한 참조(Content Reference) : 데이터베이스의 데이터는 그 주소나 위치에 의해 참조되는 것이 아니라 내용을 참조한다.
- 동시 공유(Concurrent Sharing) : 같은 내용의 데이터를 여러 사람이 동시에 공용할 수 있다.
- 계속적 변화(Continuous Evolution) : 데이터베이스는 데이터의 삽입, 삭제, 갱신으로 내용이 계속적으로 변한다.
- 구성 : DBMS, 스키마, 데이터베이스 언어, 데이터베이스 사용자로 구성되어있다.
DBMS(DataBase Management System, 데이터베이스 관리 시스템)
- 종속성과 중복성의 문제를 해결하기 위해 제안된 시스템이다.
- 응용 프로그램과 데이터의 중재자로서 모든 응용 프로그램들이 데이터베이스를 공유할 수 있도록 관리한다.
- 데이터베이스의 구성, 접근 방법, 관리 유지에 대한 모든 책임을 진다.
DBMS의 필수 기능
- 정의 기능(Definition Facility)
- 데이터베이스 구조를 정의한다.
- 데이터의 논리적 구조와 물리적 구조 사이에 변환이 가능하도록 두 구조 사이의 사상(Mapping)을 명시한다.
- 조작 기능(Manipulation Facility)
- 데이터베이스에 접근하여 데이터의 검색/삽입/삭제/갱신 등의 연산 적업을 하기 위한 사용자와 데이터베이스 사이의 인터페이스 수단을 제공한다.
- 제어 기능(Control Facility)
- 데이터베이스에 접근하는 갱신, 삽입, 삭제 작업이 정확하게 수행되어 무결성이 유지되도록 제어해야 한다.
- 정당한 사용자가 허가된 데이터만 접근할 수 있도록 보안(Security)을 유지하고, 권한(Authority)을 검사할 수 있어야 한다.
- 여러 사용자가 데이터베이스를 동시에 접근하여 데이터를 처리할 때 처리 결과가 항상 정확성을 유지하도록 병행 제어를 할 수 있도록 한다.
DBMS의 장/단점
- 장점
- 데이터의 중복 및 종속성 최소화
- 데이터 공유
- 데이터 무결성 및 일관성 유지
- 데이터 보안 보장 용이
- 단점
- 예비와 회복 기법이 어려움
- 데이터베이스 전문가 부족
- 시스템이 복잡하고, 전산화 비용 증가
데이터베이스 용어(일부)
- 빅데이터 : 데이터의 생성 양, 주기, 형식 등이 기존 데이터에 비해 매우 크기 때문에, 종래의 방법으로는 수집/저장/검색/분석이 어려운 방대한 데이터이다.
- 데이터 마이닝 : 데이터웨어하우징에서 수집되고 분석된 자료를 사용자에게 제공하기 위해 분류 및 가공되는 요소 기술이다.
- Hadoop : 일반 컴퓨터로 가상화된 대형 스토리지를 구현한다. 그 안에 보관된 거대한 데이터 세트를 병렬로 처리할 수 있도록 빅데이터 분산 처리를 돕는 자바 소프트웨어 오픈소스 프레임워크이다.
데이터베이스의 구성
스키마
- 데이터베이스의 구조(개체, 속성, 관계)에 대한 정의이다.
스키마의 3계층
- 외부 스키마(External Schema)
- 사용자나 응용 프로그래머가 접근할 수 있는 정의르 기술한다.
- 개념 스키마(Conceptual Schema)
- 데이터베이스 전체를 정의한 것으로 데이터 개체, 관계, 제약조건, 접근 권한, 무결성 규칙 등을 명세한 것이다.
- 범기관적 입장에서 데이터베이스를 정의한다.
- 내부 스키마(Internal Schema)
- 데이터의 실제 저장 방법을 기술한다.
- 물리적 저장 장치의 입장에서 본 데이터베이스 구조로써 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타낸다.
데이터베이스 언어(Database Language)
- 데이터 정의어(DDL : Data Definition Language)
- 데이터베이스의 객체들, 즉 테이블, 뷰, 인덱스 등에 대한 구조인 스키마를 정의하고 변경하며 삭제할 수 있는 기능이 있다.
- 논리적 데이터 구조와 물리적 데이터 구조 간의 사상 정의이다.
- 번역한 결과가 데이터 사전에 저장된다.
- 데이터 조작어(DML : Data Manipulation Language)
- 사용자와 데이터베이스 관리 시스템 간의 인터페이스를 제공한다.
- 데이터의 검색/삽입/삭제/변경을 구행한다.
- 데이터 제어어(DCL : Data Control Language)
- 불법적인 사용자로부터 데이터를 보호한다.
- 무결성을 유지한다.
- 데이터 회복 및 병행 제어를 수행한다.
데이터베이스 모델
- 데이터 모델 : 현실 세계를 데이터베이스에 표현하는 중간 과정, 즉 데이터베이스 설계 과정에서 데이터의 구조를 표현하기 위해 사용되는 도구이다.
데이터 모델의 구성 요소
- 데이터 구조(Structure) : 데이터 구조 및 정적 성질을 표현한다.
- 연산(Operations) : 데이터의 인스턴스에 적용 가능한 연산 명세와 조작 기법을 표현한다.
- 제약조건(Constraints) : 데이터의 논리적 제한 명시 및 조작의 규칙이다.
데이터 모델의 구분
- 데이터베이스 모델
- 개념적 모델
- ERD(Entity Relationship Diagram)
- 논리적 모델
- 계층형
- 네트워크(망)형
- 관계형
- 객체지향형
- 개념적 모델
개념적 데이터 모델
- 속성들로 기술된 개체 타입과 이 개체 타입 간의 관계를 이용하여 현실 세계를 표현하는 방법이다.
- E-R 모델(Entity-Relationship 모델 , 개체-관계 모델)
- 대표적인 개념적 데이터 모델이다.
- 개체 타입과 이들 간의 관계 타입을 이용하여 현실 세계를 개념적으로 표현한 방법이다.
- E-R 다이어그램 : E-R 모델을 그래프 방식으로 표현하였다.
논리적 데이터 모델
- 필드로 기술된 데이터 타입과 이 데이터 타입 간의 관계 현실 세계를 표현하는 방법이다.
- 종류
- 관계형 데이터 모델 : 데이터베이스를 테이블(Table)의 집합으로 표현한다.
- 계층형 데이터 모델 : 데이터베이스를 트리(Tree) 구조로 표현한다.
- 네트워크형 데이터 모델 : 데이터베이스를 그래프(Graph) 구조로 표현(owner-member 관계)하며, CODASYL DBTG 모델이라고도 한다.
관계형 데이터베이스 모델
- 관계형 데이터베이스를 구성하는 개체나 관계를 릴레이션(Relation)으로 표현한다.
관계형 데이터베이스 모델 구조
속성(Attribute) | 학번 | 이름 | 학과 | 학년 |
---|---|---|---|---|
튜플(Tuple) | 2024010 | A | 심리학과 | 1 |
튜플 | 2025015 | B | 전자공학과 | 2 |
튜플 | 2026016 | C | 컴퓨터공학과 | 3 |
- 튜플(Tuple)
- 테이블의 행(Row)에 해당하며 파일 구조의 레코드(Record)와 같은 의미이다.
- 카디널리티(Cardinality) : 튜플의 수(기수)
- 한 릴레이션의 튜플들의 값은 모두 상이하며, 튜플 간 순서가 없다.
- 속성(Attribue)
- 테이블의 열(Column)에 해당하며 파일 구조의 항목(Item), 필드(Field)와 같은 의미이다.
- 차수(Degress) : 속성의 수
- 한 릴레이션의 속성은 원자값이며, 속성 간 순서가 없다.
- 도메인(Domain) : 하나의 속성이 가질 수 있는 원자값들의 집합이다.
릴레이션의 특징
- 튜플의 유일성 : 모든 튜플은 서로 다른 값을 갖는다.
- 튜플의 무순서성 : 하나의 릴레이션에서 튜플의 순서는 없다.
- 속성의 원자성 : 속성은 원자값을 갖는다.
- 속성의 무순서성 : 각 속성은 릴레이션 내에서 유일한 이름을 가지며, 속성의 순서는 큰 의미가 없다.
키(Key)의 종류와 무결성
키의 분류
학번 | 주민번호 | 이름 | 나이 | <-학생---수강-> | 학번 | 과목 |
---|---|---|---|---|---|---|
1 | 123123-1 | A | 10 | --- | 1 | 운영체제 |
2 | 123123-1 | B | 20 | --- | 2 | 소프트웨어공학 |
3 | 123123-1 | C | 30 | --- | 3 | C언어 |
- 슈퍼키(Super Key)
- 두 개 이상의 속성으로 구성된 키 또는 혼합키를 의미한다.
- 모든 튜플에 대해 유일성은 만족하지만, 최소성은 만족하지 않는다.
- 외래키(Foreign Key)
- 다른 테이블의 기본키로 사용되는 속성이다.
- <수강> 테이블에서 <학생> 테이블을 참조할 때 <학생> 테이블의 학번은 참조키, <수강> 테이블의 학번이 외래 키가 된다.
- 무결성(Integrity)
- 릴레이션 무결성 규정(Relation Integrity Rules)은 릴레이션을 조작하는 과정에서의 의미전 관계 (Semantic Relationship)를 명세한 것으로 정의 대항으로 도메인, 키, 종속성 등이 있다.
- 개체 무결성 : 기본키의 값은 Null 값이나 중복 값을 가질 수 없다는 제약조건이다.
- 참조 무결성 : 릴레이션 R1에 속성 조합인 외래키를 변경하려면 이를 참조하고 있는 릴레이션 R2의 기본키도 변경해야 한다. 이때 참조할 수 없는 외래키 값을 가질 수 없다는 제약조건이다.
- 도메인 무결성 : 릴레이션 중 하나의 속성은 반드시 원자 값이어야 한다는 것을 보장하는 제약조건이다.
데이터베이스 설계와 구조화
데이터베이스 설계 단계
- 요구조건 분석
- 데이터베이스 사용자로부터 요구조건 수집과 요구조건 명세서를 작성한다.
- 개념적 설계
- 목표 DBMS에 독립적인 개념 스키마를 설계한다.
- 개념 스키마 모델링(ERD)과 트랜잭션 모델링을 병행 수행한다.
- 논리적 설계
- 목표 DBMS에 종속적인 논리적 스키마를 설계한다.
- 스키마의 평가 및 정제를 한다.
- 논리적 데이터 모델로 변환 및 트랜잭션 인터페이스를 설계한다.
- 물리적 설계
- 목표 DBMS에 종속적인 물리적 구조를 설계한다.
- 저장 레코드 양식 설계와 레코드 집중의 분석/설계, 엑세스 경로 인덱싱, 클러스터링, 해싱 등의 설계가 포함된다.
- 접근 경로 설계 및 트랜잭션 세부 설계를 한다.
- 데이터베이스 구현
- 목표 DBMS의 DDL(데이터 정의어)로 스키마를 작성한다.
- 데이터베이스에 등록 후 트랜잭션을 작성한다.
데이터베이스 정규화
- 함수적 종속성 등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정이다.
- 좋은 데이터베이스 스키마를 생성하고 불필요한 데이터의 중복을 방지하여 정보 검색을 용이하게 할 수 있도록 허용한다.
정규화의 목적
- 데이터 구조의 안정성 최대화
- 중복 데이터의 최소화
- 수정 및 삭제 시 이상 현상 최소화
- 테이블 불일치 위험 간소화
이상 현상(Anomaly)
- 릴레이션 조작 시 데이터들이 불필요하게 중복되어 예기치 않게 발생하는 곤란한 현상을 의미한다.
- 종류
- 삽입 이상(Insertion Anomaly) : 데이터를 삽입할 떄 불필요한 데이터가 함께 삽입되는 현상
- 삭제 이상(Deletion Anomaly) : 릴레이션의 한 튜플을 삭제함으로써 연쇄 삭제로 인해 정보의 손실을 발생시키는 현상
- 갱신 이상(Update Anomaly) : 튜플 중에서 일부 속성을 갱신함으로써 정보의 모순성이 발생하는 현상
정규화
정규화 과정
- 비정규 릴레이션
- 1NF(도메인이 원자값)
- 2NF(부분적 함수 종속 제거)
- 3NF(이행적 함수 종속 제거)
- BCNF(결정자이면서 후보키가 아닌 함수 종속 제거)
- 4NF(다치 종속 제거)
- 6NF(조인 종속성 제거)
반정규화(비정규화)
- 정규화를 통하여 정합성과 데이터 무결성이 보장되지만, 테이블의 개수가 증가함에 따라 테이블 간의 조인이 증가하여 조회 성능이 떨어질 수 있는데, 이렇게 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능 향상과 개발(Development) 및 운영(Maintenance)의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미한다.
- 반정규화 기법 : 테이블 반정규화, 컬럼 반정규화, 관계 반정규화
- 테이블 반정규화 기법 : 테이블 병합, 테이블 분할, 테이블 추가
- 테이블 추가 반정규화 유형 : 중복 테이블 추가, 집계 테이블 추가, 진행 테이블 추가, 부분 테이블 추가
SQL ★★★
SQL(Structured Query Language)
- 관계형 데이터베이스의 표준 질의어
- 종류
- DDL(데이터 정의어), DML(데이터 조작어), DCL(데이터 제어어)
DDL(Data Definition Language, 데이터 정의어)
- 데이터베이스의 정의/변경/삭제에 사용되는 언어이다.
- 논리적 데이터 구조와 물리적 데이터 구조로 정의할 수 있다.
- 논리적 데이터 구조와 물리적 데이터 구조 간의 사상을 정의한다.
- 번역한 결과가 데이터 사전에 저장된다.
- 종류
- CREATE : 스키마, 도메인, 테이블, 뷰 정의
- ALTER : 테이블 정의 변경(필드 추가, 삭제, 갱신)
- DROP : 스키마, 도메인, 테이블, 뷰 삭제
CREATE문 문법 구조
- CREATE TABLE : 테이블을 생성하는 명령문
CREATE TABLE 기본테이블 ( {열이름 데이터_타입 [NOT NULL] [DEFALUT 값]} {[PRIMARY KEY(열이름_리스트)]}, {[UNIQUE(열이름_리스트,...)]}, {[FOREIGN KEY(열이름_리스트)] REFERENCES 기본테이블[(기본키_열이름)] [ON DELETE 옵션] [ON UPDATE 옵션]} [CHECK(조건식)] );
- {}는 중복 가능한 부분
- NOT NULL은 특정 열에 대해 NULL 값을 허용하지 않을 때 기술
- PRIMARY KEY는 기본키를 구성하는 속성을 지정할 때 사용된다.
- FOREIGN KEY는 외래키로 어떤 릴레이션의 기본키를 참조하는지를 기술한다.
ALTER문 문법 구조
- ALTER TABLE : 테이블 구조(필드 추가, 삭제, 변경) 변경문이다.
ALTER TABLE 테이블_이름 ADD 열_이름 데이터_타입 DEFAULT 값; ALTER TABLE 테이블_이름 ALTER 열_이름 SET DEFAULT 값; ALTER TABLE 테이블_이름 DROP 열_이름 CASCADE;
- ADD : 새로운 열(속성)을 추가할 때 사용한다.
- ALTER : 특정 열(속성)의 디폴트 값을 변경할 때 사용한다.
- DROP : 특정 열(속성)을 제거할 때 사용한다.
DROP문 문법 구조
- DROP : 테이블 삭제문
DROP SCHEMA 스키마_이름 [CASCADE | RESTRICT]; DROP DOMAIN 도메인_이름 [CASCADE | RESTRICT]; DROP TABLE 테이블_이름 [CASCADE | RESTRICT]; DROP INDEX 인덱스_이름;
- CASCADE : 옵션을 사용하면 삭제할 요소가 다른 개체에서 참조 중이라도 삭제가 수행된다.
- RESTRICT : 옵션을 사용하면 삭제할 요소가 다른 개체에서 참조 중이라면 삭제가 수행되지 않는다.
DCL(Data Control Language, 데이터 제어어)
- 데이터 제어 정의 및 기술에 사용되는 언어이다.
- 불법적인 사용자로부터 데이터를 보호한다.
- 무결성을 유지하고 데이터 복구 및 병행 제어를 한다.
- 종류
- COMMIT : 명령어로 수행된 결과를 실제 물리적 디스크로 저장하고, 명령어로 수행을 성공적으로 완료하였음을 선언한다.
- ROLLBACK : 명령어로 수행에 실패하였음을 알리고, 수행된 결과를 원상 복귀시킨다.
- GRANT : 데이터베이스 사용자에게 사용 권한을 부여한다.
- REVOKE : 데이터베이스 사용자로부터 사용 권한을 취소한다.
DML(Data Maniqulation Language, 데이터 조작어)
- 데이터의 검색/삽입/삭제/변경에 사용되는 언어이다.
- 사용자와 DBMS 간의 인터페이스를 제공한다.
- 종류
- SELECT
- 튜플 검색 명령어이다.
- 기본 구조
SELECT 속성명[ALL | DISTINCT] FROM 릴레이션명 WHERE 조건 [GROUP BY 속성명1, 속성명2, ... ] [HAVING 조건] [ORDER BY 속성명 [ASC | DESC]]
- ALL : 모든 튜플을 검색(생략 가능)
- DISTINCT : 중복된 튜플 생략
- INSERT
- 튜플 삽입 명령어
- 기본 구조
INSERT INTO 테이블명(속성명1, 속성명2,...) VALUES(데이터1, 데이터2 ...);
- DELTETE
- 튜플 삭제 명령어이다.
- 기본 구조
DELETE FROM 테이블명 WHERE 조건;
- UPDATE
- 튜플의 내용 변경 명령어이다.
- 기본 구조
UPDATE 테이블명 SET 속성명 = 데이터 WHERE 조건;
- SELECT
NoSQL
- "Not only SQL"로, SQL만을 사용하지 않는 데이터베이스 관리 시스템(DBMS)을 지칭하며, 다양한 유형의 데이터베이스를 사용하는 것을 의미한다.
- 데이터를 저장하는데 SQL 외에도 다른 방법도 있다는 개념하에 비정형 데이터의 저장을 위해 유연한 데이터 모델을 지원한다.
- 전통적인 관계형 데이터베이스 관리 시스템과는 다른 비관계형(Non-Relational) DBMS이다.
집계 함수
- COUNT : 테이블의 행 수를 계산할 때 / 표현식: COUNT(*)
- SUM : 하나 또는 여러 개의 열 합계를 구할 때 / 표현식 : SUM(열 이름)
- AVG : 하나 또는 여러 개의 열 평균을 구할 때 / 표현식 : AVG(열 이름)
- MAX : 해당 열의 최댓값을 구할 때 / 표현식 : MAX(열 이름)
HAVING 절을 사용한 조회 검색
- GROUP BY절에 의해 선택된 그룹의 탐색 조건을 지정할 수 있으며 SUM, AVG, COUNT, MAX, MIN 등의 그룹 함수와 함께 사용할 수 있다.
ORDER BY 절을 이용한 정렬 검색
- 특정 항목을 기준으로 검색 테이블의 행들을 오름차순(ASC) 또는 내림차순(DESC)으로 정렬할 때 사용한다. 생략하면 ASC가 디폴트 값이 되어 오름차순으로 정렬된다.
트랜잭션 ★★★
- 하나의 논리적 기능을 수행하기 위한 작업 단위이다.
- 데이터베이스에서 일어나는 연산의 집합이다.
트랜잭션의 특성
- 원자성(Atomicity)
- 완전하게 수행이 완료되지 않으면 전혀 수행되지 않아야 한다.
- 연산은 Commit, Rollback을 이용하여 적용 또는 취소로 한꺼번에 완료되어야 한다.
- 중간에 하나의 오류가 발생되더라도 취소가 되어야 한다.
- 일관성(Consistency)
- 시스템의 고정 요소는 트랜잭션 수행 전후가 같아야 한다.
- 트랜잭션 결과는 일관성을 유지해야 한다.
- 격리성(Isolation, 고립성)
- 트랜잭션 실행 시 다른 트랜잭션의 간섭을 받지 않아야 한다.
- 영속성(Durability, 지속성)
- 트랜잭션의 완료 결과가 데이터베이스에 영구히 기억된다.
- 은행계좌에서 100원 중 10원을 인출했을 때 계좌에는 90원이 남아 있어야 한다.
보안과 권한 부여
- 보안(Security)의 개념 : 권한이 없는 사용자로부터 데이터베이스를 보호하는 것
권한 부여/회수
GRANT
- 데이터베이스 사용자에게 사용 권한을 부여한다.
- 기본 구조
GRANT 권한 ON 데이터 객체 TO 사용자 [WITH GRANT OPTION];
- WITH GRANT OPTION : 사용자가 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 권한을 부여한다.
- 부여 가능한 권한 : Update, Delete, Insert, Select
REVOKE
- 데이터베이스 사용자로부터 사용 권한을 취소한다.
- 기본 구조
REVOKE [GRANT OPTION FOR] 권한 ON 데이터 객체 FROM 사용자 [CASCADE];
- GRANT OPTION FOR : 다른 사용자에게 권한을 부여할 수 있는 권한을 취소한다.
- CASCADE : 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한도 연쇄 취소한다.
- 부여 가능한 권한 : Update, Delete, Insert, Select
암호화
- 네트워크를 통하거나 컴퓨터 내부에 자료를 저장할때 권한을 가진 사람 외에는 데이터를 보지 못하도록 하는 것
- 일반 평문을 다양한 방식의 암호화 기법으로 가공하여 저장하거나 전송 권한이 있는 사용자에 의해 복호화되어 사용한다.
암호화 과정 : 평문 => 암호화(암호키) => 암호문 => 복호화(복호키) => 평문
암호화 기법
- 비밀키(Private Key, 대칭키) 암호화 기법
- 비밀키 암호화 기법을 동일한 키로 데이터를 암호화하고 복호화한다.
- 암호화, 복호화 키가 같아서 키를 공개하면 타인이 알게 된다.
- 암호화와 복호화 속도가 빠르다.
- 공개키(Public Key, 비대칭키) 암호화 기법
- 공개키 암호화 기법은 각기 다른 키로 데이터를 암호화하고 복호화한다.
- 암호화, 복호화 키가 다르므로 키는 공개되어도 된다.
- 암호화 및 복호화 속도가 느리다.
참조 : Github repository
정보처리기사 카테고리의 다른 글
COMMENTS