정보처리기사/part02.소프트웨어 개발

1. 데이터 입출력 구현

kyunge_ev 2024. 6. 7. 10:04

✅ 자료구조

1. 자료구조

(1) 자료구조의 정의

  • 자료를 효율적으로 사용하기 위해 컴퓨터로 자료의 특성에 따라 분류하여 구성하고, 저장 및 처리하는 모든 작업
  • 문제 해결을 위해 데이터 값들을 연산자들이 효율적으로 접근하여 처리할 수 있도록 체계적으로 조직하여 표현하는 것
  • 컴퓨터에서 자료를 정리하고 효율적으로 사용할 수 있도록 다양한 구조를 갖는 것이 자료구조

(2) 자료구조의 구성

1. 선형구조

  • 데이터의 전후 항목 사이 관계가 1:1이며, 선후 관계가 명확하게 한 개의 선의 형태를 갖는 리스트 구조
  • 종류 : 배열 / 연결 리스트 / 스택 / 큐 / 데크

2. 비선형구조

  • 데이터 항목 사이의 관계가 1:n(혹은 n:m)인 그래프적 특성을 갖는 형태
  • 종류 : 트리 / 그래프

(3) 자료구조 선택 시 고려사항

  • 데이터 양, 데이터 특성, 데이터 활용빈도, 사용 시스템의 기억용량, 처리시간(최선, 최악, 평균), 프로그램 난이도, 데이터 저장방식 등이 있다.

2. 선형구조

(1) 배열(Array)

  • 동일한 성질을 갖는 자료의 집합으로서 색인(Index)와 값(Value)의 쌍으로 구성된 순차적인 자료구조를 말한다.
  • 일반적으로 프로그래밍 언어에서는 변수의 확장에 해당하는 것으로 유사한 성격, 즉 동일한 자료형으로 이루어진 많은 자료를 처리할 때 사용한다.

(2) 연결 리스트(Linked List)

  • 노드를 크게 데이터 필드와 링크 필드로 나누어 다음 노드가 기억된 공간의 주소를 이전 노드의 링크 필드에 기억시키는 방식으로 모든 노드들을 하나로 연결하는 리스트를 말한다.
  • 첫 번째 노드를 가리키는 포인터가 필요한데 이를 헤드(Head)라고 한다.
  • 링크 필드에는 다음 노드가 기억된 주소(포인트)가 수록되며, 가리키는 노드가 없는 노드의 포인터를 Null(또는 Nil)이라고 한다.
  • 각 노드는 포인터를 통해 연결되므로 기억장소에서 서로 이웃하지 않아도 된다.
장점 - 노드의 삽입/삭제 작업이 용이(포인터의 연결만으로 가능)하고, 기억공간이 연속되지 않아도 저장할 수 있음
- 희소행렬을 연결 리스트로 표현 시 기억장소가 절약됨
단점 - 포인터 저장을 위한 기억장소가 추가로 요구되므로 기록밀도가 낮고, 임의의 문자를 접근하기 위해서는 처음부터 순차 탐색을 해야함

1. 단순 연결 리스트

  • 하나의 링크 필드를 이용하여 연결하며, 마지막 노드의 링크 값은 Null을 가지는 리스트를 말한다.

2. 원형 연결 리스트

  • (단순)연결 리스트의 마지막 노드의 링크 필드에 널(Null)이 아닌 첫 노드의 주소를 넣은 리스트를 원형 연결 리스트라고 한다.

3. 이중 연결 리스트

  • 노드가 3개의 필드(link, data, rlink)로 구성되어, 노드의 왼쪽과 오른쪽에 링크 필드가 있으므로, 정방향과 역방향 탐색이 모두 가능한다.

(3) 스택(Stack)

  • 제한된 구조로 원소의 삽입과 삭제가 한 쪽(top)에서만 이루어지는 유한 순서 리스트
  • LIFO(Last In First Out)구조로, 마지막에 삽입한 원소를 제일 먼저 삭제하는 후입선출 구조이다.
  • 배열로 구현하는 방법은 간단하지만, 크기가 고정된다.
  • 연결 리스트로 구현하면 상대적으로 복잡하지만, 크기를 가변적으로 할 수 있다.
  • 더 이상 삭제할 데이터가 없는 상태에서 데이터를 삭제하면 언더플로우(Underflow)가 발생한다.
  • 스택의 응용 : 수식 계산, 복귀 주소 관리, 순환식, 퀵 정렬, 깊이 우선 탐색, 이진 트리 운행

📌 수식의 표기법

구분 내용 예

구분  내용 
중위 표기법(Infix Notation) 연산자가 피연산자 가운데 위치한다 A+B
전위 표기법(Prefix Notation) 연산자가 피연산자 앞(왼쪽)에 위치한다 +AB
후위 표기법(Postfix Notation) 연산자가 피연산자 뒤(오른쪽)에 위치한다 AB+

(4) 큐(Queue)

  • FIFO(First In First Out) 구조로, 제일 먼저 삽입된 원소가 제일 먼저 삭제되는 선입선출 구조이다.
  • 한쪽 끝(rear)에서는 원소의 삽입만, 다른 쪽 끝(front)에서는 원소의 삭제만 허용하는 자료구조이다.
    • 양 끝을 제외한 나머지 모든 위치에서의 삽입과 삭제를 허용하지 않는다.
  • 구현은 배열이나 연결 리스트로 가능하다.
  • 큐의 응용 : 작업 스케줄링, 너비 우선 탐색, 트리의 레벨 순회
  • 원형 큐(Circular Queue)
    • 순차 표현의 문제점 해결을 위해 배열 Q[n]을 원형으로 운영한다.

(5) 데크(Deque: Double-ended Queue)

  • 스택과 큐의 장점을 종합한 순서 리스트이다.
  • 삽입과 삭제가 리스트의 양끝에서 임의로 수행될 수 있는 구조이다.
  • 스크롤(Scroll)
    • 입력이 한쪽에서만 가능하게 제한한 방식
  • 셀프(Shelf)
    • 출력이 한쪽에서만 가능하게 제한한 방식

3. 비선형구조

(1) 트리(Tree)

  • 계층형 자료구조(Hierarchical Data Structure) 노드와 노드를 간선으로 연결한다.
  • 실제 나무를 뒤집어 놓은 것과 같은 형태이며, 여러 개의 노드가 계층적으로 구성된다.
  • 가장 위쪽의 노드가 루트(근)노드이며, 가장 아래쪽에 자식이 없는 노드를 리프(단말) 노드라고 한다.
  • 그래프(Graph)의 한 종류로 데이터들의 상호 관계를 가지(Branch)로 연결하여 계층적 관계로 구성한다.
  • 사이클이 존재하지 않는다.

📌 트리의 용어

노드(Node) 데이터와 링크를 통합적으로 표현한다. → 실제 데이터가 들어가는 노드

노드(Node) 데이터와 링크를 통합적으로 표현한다.
→ 실제 데이터가 들어가는 노드
루트(근) 노드 최상위 노드를 말한다.
단말(리프) 노드 자식 노드를 가지지 않는 노드이다.
비단말 노드 자식 노드를 갖는 노드이다.
노드의 차수
(Degree)
한 노드가 가지고 있는 서브 트리의 수이다.
→ 한 노드의 자식의 수
형제
(Siblings)
한 노드의 자식들이다.
트리의 차수
(Degree)
그 트리에 있는 노드의 최대 차수이다.
노드의 레벨
(Level)
한 노드가 레벨 I에 속하면, 그 자식들은 레벨 I+1에 속한다.
→ 루트 노드의 레벨이 중요(루트 노드 0 이면 0,1,2,3 / 루트 노드가 1이면 1,2,3,4)
트리의 높이(Height)
또는 깊이(Depth)
그 트리의 최대 레벨이다.
노드의 레벨 순서
(Level Order)
트리의 노드들이 레벨별로 위에서 아래로, 같은 레벨 안에서는 왼편에서 오른편으로 차례로 순서를 매긴 것이다.

(2) 이진 트리의 표현

  • 일차원 배열을 이용한 순차적인 표현을 할 수 있다.
  • 이진 트리의 순차 표현 시에 인덱스 0은 사용하지 않으며(0은 버린다), 인덱스 1이 항상 루트 노드이다.
  • 이진 트리는 모든 노드의 차수가 2를 넘지 않는 트리이다.
  • 이진 트리가 가질 수 인쓴 최대 노드 수는 깊이가 2k승 - 1개이다.
  • 레벨 k에서의 최대 노드 수는 2 k-1승개이다.
  • 이진 트리의 종류
    • 편향 이진 트리
      • 왼편 or 오른편, 즉 한 쪽으로 치우쳐진 이진 트리를 말한다.
      • 구조가 좋지 않으므로 검색할 때 성능이 떨어진다.
    • 포화 이진 트리(Full Binary Tree)
      • 루트 노드부터 구성된 높이까지의 노드가 꽉 찬 형태의 트리이다.
      • 한쪽으로 치우친 트리가 아닌 전체적인 균형이 맞는 트리이다.
      • 높이가 h이고 노드 수가 2의 h승 - 1인 이진 트리이다.
      • 포화 이진 트리는 완전 이진 트리에 속한다.
    • 완전 이진 트리(Complete Binary Tree)
      • 트리를 배열로 저장한다면 완전 이진 트리는 노드의 인덱스가 중간에 빠지는 것 없이 순서대로 진행되는 트리를 말한다.
      • 포화 이진 트리는 항상 완저 ㄴ이진 트리라 할 수 있지만, 그 역의 관계는 항상 성립되지 않는다.
    • 힙 트리(Heap Tree)
      • 여러 개의 값들 중 가장 큰 값이나 가장 작은 값을 빠르게 찾을 수 있도록 만들어진 자료구조를 힙 트리라고 한다.
      • 힙에서는 키 값이 같은 노드가 있는 경우가 있을 수 있다.
        구분 내용
        최대 힙(Max Heap) - 각 노드의 키 값이 그 자식의 키 값보다 작지 않은 완전 이진 트리이다.
        - 루트는 가장 큰 값을 가진다.
        최소 힙(Min Heap) - 각 노드의 키 값이 그 자식의 키 값보다 크지 않은 완전 이진 트리이다.
        - 루트는 가장 작은 값을 가진다.
    • 이진 탐색 트리(Binary Search Tree)
      • 루트 노드 왼쪽 값은 루트 노드보다 작고 오른쪽 값은 루트 노드 보다 크다.
      • 탐색 효율이 좋고 탐색 시간이 적게 소요된다.
      • 검색할 데이터가 정렬되어 있어야 한다.
      • 비교 횟수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어든다.

 

(3) 그래프(Graph)

  • 그래프 이론은 1736년 오일러(Euler)가 Koenigsberg의 다리 문제를 풀기 위해 적용하면서 정립되었다.
  • 연결되어 있는 객체 간의 관계를 표현할 수 있는 자료구조로 현재 전기 회로의 분석, 최단거리 검색, 컴퓨터 네트워크, 인공지능 등 광범위하게 이용되고 있다.
  • G=(V,E)
    • 그래프(G)는 정점(Vertex)과 간선(Edge)으로 구성된 한정된 자료구조이다.
      • V: 공백이 아닌 노드 또는 정점의 유한 집합
      • E: 상이한 두 정점을 잇는 간선의 유한 집합
  • 그래프 순회(검색) 방법의 종류
    • 깊이 우선 탐색(DFS: Depth First Search)
    • 너비 우선 탐색(BFS: Breadth First Search)
  • 무방향 그래프(Undirected Graph)
    • 간선을 표현하는 두 정점의 쌍에 순서가 없는 그래프이다.
    • 화살표가 아닌 선으로 각 정점이 연결된다.
    • () 로 표현
  • 방향 그래프(Directed Graph)
    • 유방향 그래프 또는 다이그래프(Digraph)라 하며, 간선을 표현하는 두 정점의 쌍에 순서가 있는 그래프이다.
    • 정점의 연결은 화살표로 된다.
    • <> 로 표현
  • 그래프를 인접 행렬(Adjacency Matrix)로 표현
    • 무방향 그래프는 주대각선을 기준으로 양옆이 대칭이다. (유방향 그래프는 우연으로 그럴 수 있지만 일반적으로 대칭이 아니다.)
  • 그래프를 인접 리스트(Adjacency List)로 표현
  • 완전 그래프(Complete Graph)
    • 최대 수의 간선을 가진 그래프로 정점이 n개일 때 무방향 그래프는 n(n-1)/2개, 방향 그래프는 n(n-1)개의 간선의 수를 갖는다.
  • 신장 트리(Spanning Tree)
    • 그래프 G에서 E(G)에 있는 간선과 V(G)에 있는 모든 정점들로 구성된 트리이다.
    • 주어진 그래프 G에 대한 신장 트리는 유일하지 않다.
    • 사이클이 존재하지 않는다.
    • 모든 정점을 한번 이상 연결 → 여러 길로 만들 수 있다(최단거리, 최저비용 등을 계산)

4. 알고리즘

(1) 알고리즘의 정의

  • 주어진 문제를 컴퓨터로 풀기 위한 단계적인 방법과 절차를 말한다.
  • 특정한 작업을 수행하는 명령어들의 유한 집합이다.
  • 프로그램은 자료구조 + 알고리즘이다.

(2) 알고리즘의 조건

입력 외부에서 제공되는 데이터가 0개 이상 있다.
출력 적어도 하나 이상의 출력 결과를 생성한다.
명확성 알고리즘을 구성하는 각 명령어들은 그 의미가 명백하고 모호하지 않아야한다.
유한성 알고리즘의 명령대로 순차적인 실행을 하면 언젠가는 반드시 실행이 종료되어야 한다.
유효성 원칙적으로 모든 명령들은 종이와 연필만으로 수행될 수 있게 기본적이어야 하며, 반드시 실행 가능해야한다.
→ 원칙적으로 모든 명령들은 오류가 없이 실행 가능해야한다.

📌 알고리즘 설계 기법

  • 분할 정복(Divide and Conquer)
  • 탐색욕적(Greedy)
  • 백트래킹(Back tracking)

5. 복잡도

(1) 프로그램의 공간 복잡도(Space Complexity)

  • 프로그램을 실행시켜 완료하는 데 필요한 총 저장 공간을 말한다.
  • 공간 복잡도 = 고정 공간 + 가변 공간
    • 고정 공간 : 프로그램의 크기가 입출력의 횟수와 관계없이 고정적으로 필요한 저장 공간을 의미
    • 가변 공간 : 실행 과정에서 데이터 구조와 변수들이 필요로 하는 저장 공간

(2) 프로그램의 시간 복잡도(Time Complexity)

  • 프로그램을 실행시켜 완료하는 데 걸리는 시간을 의미한다.
  • 시간 복잡도 = 컴파일 시간 + 실행 시간
    • 컴파일 시간 : 소스 프로그램을 컴파일하는 데 걸리는 시간으로, 프로그램의 실행 특성에 의존하지 않기 때문에 고정적이다.
    • 실행 시간 : 프로그램의 실행 시간을 추정하기 위해서는 하나의 단위 명령문을 실행하는 데 걸리는 시간과 실행 빈도수가 있어야한다.
  • 연산 시간 그룹
    • 상수 시간 : O(1)
    • 로그 시간 : O(Log₂n)
    • 선형 시간 : O(n)
    • n로그 시간 : O(nLog₂n)
    • 평방 시간 : O(n²)
    • 입방 시간 : O(n³)
    • 지수 시간 : O(2ⁿ)
    • 계승 시간 : O(n!)
  • 연산 시간의 크기 순서
	O(1) < O(Log₂n) < O(n) < O(nLog₂n) < O(2ⁿ) < O(n!) < O(n²)

(3) 점근적 표기법

  • 빅오(Big-oh) 표기법의 수학적 정의
    • 알고리즘의 효율성을 표기하는 방법으로 데이터의 개수(n)에 따라 기본 연산 횟수를 나타낸다.
    • 데이터 양에 상관없이 항상 일정
  • 오메가(Omega) 표기법의 수학적 정의
  • 세타(Theta) 표기법의 수학적 정의

6. 정렬

(1) 정렬(sort)의 개요

  • 정렬은 키 값의 순서에 따라 파일 내의 레코드들을 순서대로 정하는 것
  • 정렬은 오름차순과 내림차순으로 구분할 수 있다.
    • 오름차순은 수치가 점점 커지는 것
    • 내림차순은 수치가 점점 작아지는 것
  • 종류 : 선택 정렬, 버블 정렬, 삽입 정렬, 퀵 정렬, 힙 정렬, 합병(병합) 정렬 등

(2) 선택 정렬(Selection Sort)

  • 제자리 정렬 알고리즘의 하나로 수행 시간의 차수는 O(n²) 이다.
  • 오름차순으로 정렬할 경우에 최소값을 찾아 가장 앞의 테이프와 교환해가며 정렬하는 방법
💡 제자리 정렬

- 정렬할 데이터가 입력된 공간 이외의 다른 공간을 사용하지 않는 정렬 방법

(3) 버블 정렬(Bubble Sort)

  • 두 인접한 요소끼리 비교하여 정렬하는 방법으로 수행시간의 차수는 O(n²)이다.
  • 만약 오름차순으로 정렬할 경우 이웃하는 두 개의 값을 비교하여 앞쪽의 값이 더 크면 두 요소의 값을 교환하는 방식으로 정렬

(4) 삽입 정렬(Insertion Sort)

  • 주어진 데이터 중 맨 앞의 원소를 정렬된 구간으로 설정하고, 나머지를 그렇지 않은 구간으로 정한다.
  • 삽입 데이터 정하기 : 정렬되지 않은 구간의 맨 앞 데이터를 삽입 데이터(키 값)으로 정한다.
  • 삽입 위치 파악 : 정렬 구간을 역순으로 탐색하며 키 값이 삽입될 위치를 파악한다.
  • 모든 데이터가 정렬 될 때까지 위 과정을 반복한다.

(5) 퀵 정렬(Quick Sort)

  • n개의 데이터를 정렬할 때,
    • 최악의 경우 O(n²)번의 비교를 수행
    • 평균적으로 O(nLog₂n)번의 비교를 수행
  • 퀵 정렬을 분할 정복 방법을 통해 배열 요소를 정렬
  • 데이터가 0이나 1될 때 까지 분할을 반복

(6) 힙 정렬(Heap Sort)

  • 수행 시간의 차수는 O(nLog₂n)이다.
  • 힙 정렬은 힙 트리를 이용하여 정렬이 이루어지며, 최대 힙이나 최소 힙을 이용할 수 있다.

(7) 합병 정렬(Merge Sort)

  • 수행 시간의 차수는 O(nLog₂n)이다.
  • 전체 배열을 요소의 수가 1인 부분 배열로 가정하여 두 개씩 작을 지어 정렬한다.
  • 정렬된 각각의 배열들을 다시 짝을 지어 정렬한다.
  • 최종적으로 하나의 배열로 병합될 때까지 반복한다.
  • 제자리 정렬이 아니다 → 기억공간을 많이 차지함

7. 탐색

(1) 탐색의 개요

  • 어떤 특정한 원소를 찾아내기 위하여 자료구조나 파일을 조사하는 과정을 탐색이라 한다.
  • 일반적으로 탐색을 빠르게 하지 위하여 선작업으로 정렬하는 경우가 있다.
  • 탐색 기법의 종류 : 순차 탐색, 이진 탐색, 해싱 등

(2) 순차 탐색

  • 레코드를 순서대로 하나씩 비교하여 찾는 방법
  • 전반적으로 탐색 시간이 길어지지만, 정렬되어 있지 않은 파일도 탐색이 가능하다.
  • 수행 시간의 차수는 O(n)이다.

(3) 이진 탐색

  • 파일이 정렬되어 있어야 하며, 파일의 데이터가 중앙에 위치한 키 값과 비교하여 다음 탐색 위치를 결정하므로 탐색 대상이 반으로 감소된다.
  • 탐색 시간이 적게 걸리지만, 삽입과 삭제가 많을 때는 적합하지 않고(정렬된 위치를 찾아서 삽입, 삭제를 해야하니까) 고정된 데이터 탐색에 적합하다.
  • 수행 시간의 차수는 O(Log₂n)이다.
  • 이진 탐색에서 중간값 찾는 법 = 양 끝 인덱스를 합하고 2로 나눈다

(4) 해싱(Hashing)

  • 파일을 구성하거나 검색할 때 키를 비교하는 것이 아니라 계산에 의해서 주소를 기억공간에 보관하거나 검색한다.
  • 해싱은 다른 레코드의 키 값과 비교할 필요가 없는 탐색 방법이다.
  • 탐색 시간의 복잡도는 O(1)이지만, 충돌이 발생하며 O(n)이 된다.
  • 해싱 함수 : 제곱법, 제산법, 폴딩법, 자리수 분석법

📌 해싱 기본 용어

해시표  레코드를 1개 이상 저장할 수 있는 버킷(Bucket)들로 구성된 기억공간이다.
해싱 함수 해시표 내의 버킷 주소를 계산하여 일정한 규칙을 말한다.
홈 주소 해싱 함수에 의해 계산된 주소
버킷(Bucket) 홈 주소를 갖는 기억공간, 즉 어떤 키가 저장될 기억공간을 말한다.
충돌
(Collision or Clash)
해싱 함수에 의해 같은 홈 주소를 갖게되는 현상
동거자(=동의어)
(Synonym)
충돌 현상이 발생되는 레코드들의 집합으로 같은 홈 주소를 갖는 레코드들의 집합을 말한다.
  • 해싱함수
    • 입력된 키 값을 해시 테이블의 주소로 변환시켜 주는 함수
    • 해시 함수의 선택에 따라 레코드가 특정 버킷에 편중되지 않고 주소 공간에 균등하게 사상될 수 있도록 한다.
    • 해싱 함수의 종류 : 중간 제곱법, 제산법, 폴딩법, 자리수 분석법
      중간 제곱법
      (Mid-Square)
      - 키 값을 제곱한 후 중간에 정해진 자리 수만큼을 취해서 해시 테이블의 버킷 주소로 만드는 방법
      - 키 값을 제곱한 결과값의 중간의 수들은 키 값의 모든 자리들로부터 영향을 받으므로 버킷 주소가 고르게 분산될 가능성이 높다.
      제산법
      (Division-Remainder)
      - 키 값을 테이블 크기로 나누어서 그 나머지를 버킷 주소로 변환하는 방법
      폴딩법
      (Folding)
      - 키 값을 버킷 주소 크기만큼의 부분으로 분할한 후, 분할한 것을 더하거나 연산하여 그 결과 주소의 크기를 벗어나는 수는 버리고, 벗어나지 않는 수를 택하여 버킷의 주소를 만드는 방법
      자리수 분석법
      (Digit-analysis)
      모든 키를 분석해서 불필요한 부분이나 중복되는 부분을 제거하여 홈 주소를 결정하는 방법
  • 해싱의 문제점
    • 충돌이 발생할 수 있다. → 충돌이 빈번하면 발생 시간이 길어지는 등 성능이 저하되므로 해시 함수의 수정이나 해시 테이블의 크기가 적절히 조절되어야한다.

8. 탐색 구조

(1) AVL 트리

  • Adelson-Velakii와 Landis에 의해 제안되었다.
  • 각 노드의 왼쪽 서브 트리의 높이와 오른쪽 서브 트리의 높이 차이가 1 이하인 이진 탐색 트리이다. → 공백 서브 트리의 높이는 -1로 정의
  • 모든 노드들이 AVL 성질을 만족하는 이진 탐색 트리

(2) 2-3 트리

  • 차수가 2 또는 3인 탐색 트리 구조
  • 삽입과 삭제 연산이 AVL 트리 보다 간단하다.

(3) 레드-블랙 트리

  • 노드 색깔이 레드나 블랙으로 된 이진 탐색 틀이이며, 2-3-4 트리를 이진 트리로 표현한 것

✅ 데이터 조작 프로시저 작성

1. 프로시저

(1) SQL(Structured Query Language, 구조적 질의어)

  • SQL : IBM에서 개발된 데이터베이스에서 사용되는 언어
  • SQL의 특징
    • 관계대수와 관계해석을 기초로한 질의 언어
    • 이해하기 쉬운 상태
    • 대회식 언어뿐 아니라 응용 프로그램에 삽입되어 사용
    • 용도에 따라 데이터 정의어, 데이터 조작어, 데이터 제어어로 구분
    • COBOL, C, PASCAL 등의 언어에 삽입
    • 레코드 집합 단위로 처리
    • 비절차적 언어
  • SQL의 종류

종류 관련 명령어

종류 관련 명령어
데이터 정의어
(DDL : Data Definition Language)
CREATE / DROP / RENAME / ALTER / TRUNCATE 등
데이터 조작어
(DML : Data Manifulation Language)
INSERT / UPDATE / DELETE / SELECT 등
데이터 제어어
(DCL : Data Control Language)
GRANT / REVOKE 등
트랜잭션 제어어
(TCL : Transaction Control Language)
COMMIT / ROLLBACK / SAVEPOINT 등

(2) PL(Procedural Language) / SQL

  • 서버에서 절차적인 처리를 위해 표준 SQL을 확장한 절차적 언어
  • 블록 구조로 여러 SQL 문을 한 번에 실행할 수 있으며, 모듈화 및 캡슐화, 비교, 반복, 예외 처리가 가능하다.
  • 서버에 저장되어 빠른 실행이 가능하지만, 문법에 대한 표준이 거의 없고 각 DBMS에 종속적인 것이 단점이다.
  • PL/SQL 구조는 선언부, 실행부, 예외 처리부로 되어있다.

(3) 저장된 함수(Stored Function)

  • 특정 작업을 수행할 수 있는 이름이 있는 PL/SQL 블록으로, 구성이 프로시저와 유사하지만 IN 파라미터만 사용할 수 있다.

(4) 저장된 프로시저(Stored Procedure)

  • 특정 작업을 수행할 수 있는 이름이 있는 PL/SQL 블록으로, 매개 변수를 받을 수 있고, 반복적으로 사용할 수 있는 객체(Object)이다.

(5) 저장된 패키지(Stored Package)

(6) 트리거(Trigger)

  • INSERT, UPDATE, DELETE문이 수행 될 때 묵시적으로 수행되는 PROCEDURE로 테이블(Table)과는 별도로 데이터베이스에 저장된다.

✅ 데이터 조작 프로시저 최적화

1. 쿼리 성능 측정

(1) SQL 실행 과정

2. 소스 코드 인스펙션

(1) 소스 코드 인스펙션 진행 순서

Planning(계획) → Overview(사전 교육) → PreParation(사전 검토) → Meeting(회의) → Re-Work, re-Inspection(수정) → Following(후속 조치)