Hanbbi's DevLog

정보처리기사

정보처리기사 필기(3) - DB 구축

2023-12-26

필기 시험 공략

개인적으로 필기 시험의 경우 기출문제를 많이 풀어보는 것으로 충분하다고 생각한다.

구글 앱 스토어에서 "정보처리기출문제"라는 키워드로 검색해서 앱에 등록된 문제들을 많이 풀어보면 좋을 것 같다.

나의 경우 아래의 순서로 필기한 후, 기출문제를 많이 풀어본 후에 시험을 쳤다.

표 등 일부 내용은 깃허브에서 보는 것이 더 편하다.

  1. 소프트웨어 설계

  2. 소프트웨어 개발

  3. DB구축

  4. 프로그래밍 언어 활용

  5. 정보시스템 구축 관리

본문은 요약본으로, 노출 빈도가 높다고 느낀 키워드는 ★표로 강조하였다.


자료 구조

자료 구조의 분류

  1. 선형 구조
    • 리스트
      • 선형 리스트
      • 연결 리스트
  2. 비선형 구조
    • 트리
    • 그래프

자료 구조의 활용

  • 정렬
    • 집합된 데이터 레코드를 일정 기준으로 재배열하는 것.
    • 오름차순, 내림차순
  • 검색
    • 저장된 데이터 레코드 중 원하는 값을 빠르게 찾는 것
  • 인덱스(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)2024010A심리학과1
튜플2025015B전자공학과2
튜플2026016C컴퓨터공학과3
  • 튜플(Tuple)
    • 테이블의 행(Row)에 해당하며 파일 구조의 레코드(Record)와 같은 의미이다.
    • 카디널리티(Cardinality) : 튜플의 수(기수)
    • 한 릴레이션의 튜플들의 값은 모두 상이하며, 튜플 간 순서가 없다.
  • 속성(Attribue)
    • 테이블의 열(Column)에 해당하며 파일 구조의 항목(Item), 필드(Field)와 같은 의미이다.
    • 차수(Degress) : 속성의 수
    • 한 릴레이션의 속성은 원자값이며, 속성 간 순서가 없다.
  • 도메인(Domain) : 하나의 속성이 가질 수 있는 원자값들의 집합이다.

릴레이션의 특징

  • 튜플의 유일성 : 모든 튜플은 서로 다른 값을 갖는다.
  • 튜플의 무순서성 : 하나의 릴레이션에서 튜플의 순서는 없다.
  • 속성의 원자성 : 속성은 원자값을 갖는다.
  • 속성의 무순서성 : 각 속성은 릴레이션 내에서 유일한 이름을 가지며, 속성의 순서는 큰 의미가 없다.

키(Key)의 종류와 무결성

키의 분류

학번주민번호이름나이<-학생---수강->학번과목
1123123-1A10---1운영체제
2123123-1B20---2소프트웨어공학
3123123-1C30---3C언어
  • 슈퍼키(Super Key)
    • 두 개 이상의 속성으로 구성된 키 또는 혼합키를 의미한다.
    • 모든 튜플에 대해 유일성은 만족하지만, 최소성은 만족하지 않는다.
  • 외래키(Foreign Key)
    • 다른 테이블의 기본키로 사용되는 속성이다.
    • <수강> 테이블에서 <학생> 테이블을 참조할 때 <학생> 테이블의 학번은 참조키, <수강> 테이블의 학번이 외래 키가 된다.
  • 무결성(Integrity)
    • 릴레이션 무결성 규정(Relation Integrity Rules)은 릴레이션을 조작하는 과정에서의 의미전 관계 (Semantic Relationship)를 명세한 것으로 정의 대항으로 도메인, 키, 종속성 등이 있다.
    • 개체 무결성 : 기본키의 값은 Null 값이나 중복 값을 가질 수 없다는 제약조건이다.
    • 참조 무결성 : 릴레이션 R1에 속성 조합인 외래키를 변경하려면 이를 참조하고 있는 릴레이션 R2의 기본키도 변경해야 한다. 이때 참조할 수 없는 외래키 값을 가질 수 없다는 제약조건이다.
    • 도메인 무결성 : 릴레이션 중 하나의 속성은 반드시 원자 값이어야 한다는 것을 보장하는 제약조건이다.

데이터베이스 설계와 구조화

데이터베이스 설계 단계

  1. 요구조건 분석
    • 데이터베이스 사용자로부터 요구조건 수집과 요구조건 명세서를 작성한다.
  2. 개념적 설계
    • 목표 DBMS에 독립적인 개념 스키마를 설계한다.
    • 개념 스키마 모델링(ERD)과 트랜잭션 모델링을 병행 수행한다.
  3. 논리적 설계
    • 목표 DBMS에 종속적인 논리적 스키마를 설계한다.
    • 스키마의 평가 및 정제를 한다.
    • 논리적 데이터 모델로 변환 및 트랜잭션 인터페이스를 설계한다.
  4. 물리적 설계
    • 목표 DBMS에 종속적인 물리적 구조를 설계한다.
    • 저장 레코드 양식 설계와 레코드 집중의 분석/설계, 엑세스 경로 인덱싱, 클러스터링, 해싱 등의 설계가 포함된다.
    • 접근 경로 설계 및 트랜잭션 세부 설계를 한다.
  5. 데이터베이스 구현
    • 목표 DBMS의 DDL(데이터 정의어)로 스키마를 작성한다.
    • 데이터베이스에 등록 후 트랜잭션을 작성한다.

데이터베이스 정규화

  • 함수적 종속성 등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정이다.
  • 좋은 데이터베이스 스키마를 생성하고 불필요한 데이터의 중복을 방지하여 정보 검색을 용이하게 할 수 있도록 허용한다.

정규화의 목적

  • 데이터 구조의 안정성 최대화
  • 중복 데이터의 최소화
  • 수정 및 삭제 시 이상 현상 최소화
  • 테이블 불일치 위험 간소화

이상 현상(Anomaly)

  • 릴레이션 조작 시 데이터들이 불필요하게 중복되어 예기치 않게 발생하는 곤란한 현상을 의미한다.
  • 종류
    • 삽입 이상(Insertion Anomaly) : 데이터를 삽입할 떄 불필요한 데이터가 함께 삽입되는 현상
    • 삭제 이상(Deletion Anomaly) : 릴레이션의 한 튜플을 삭제함으로써 연쇄 삭제로 인해 정보의 손실을 발생시키는 현상
    • 갱신 이상(Update Anomaly) : 튜플 중에서 일부 속성을 갱신함으로써 정보의 모순성이 발생하는 현상

정규화

정규화 과정

  1. 비정규 릴레이션
  2. 1NF(도메인이 원자값)
  3. 2NF(부분적 함수 종속 제거)
  4. 3NF(이행적 함수 종속 제거)
  5. BCNF(결정자이면서 후보키가 아닌 함수 종속 제거)
  6. 4NF(다치 종속 제거)
  7. 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 조건;

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