Million Dreams
100만개의 꿈을 꾸는 개발자 지망생
정보처리기사 (12)
2020년 정보처리기사 1·2회 필기 가답안

2020년 정기 기사 2회 필기 - 정보처리기사 2교시 A형

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100

 

 

2020년 정기 기사 2회 필기 - 정보처리기사 2교시 B형

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100

 

확정답안이 나오면 해설도 같이 올려 볼 예정입니다.

  Comments,     Trackbacks
정보처리기사 4과목 데이터베이스 구축 3장 응용 SW 기초 기술 활용 요점 정리

3장 응용 SW 기초 기술 활용

Section141 운영체제의 개념

1. 운영체제(OS, Operating System)의 정의

- 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임이다.

- 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종으로, 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경을 제공해준다.

 

2. 운영체제의 목적

- 처리 능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축 등이 있다.

처리 능력 : 일정 시간 내에 시스템이 처리하는 일의 양

반환 시간 : 시스템에 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간

사용 가능도 : 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도

신뢰도 : 시스템이 주어진 문제를 정확하게 해결하는 정도

 

3. 운영체제의 기능

- 프로세서, 기억장치, 입∙출력장치, 파일 및 정보 등의 자원을 관리한다.

- 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능을 제공한다.

- 사용자와 시스템 간의 편리한 인터페이스를 제공한다.

- 시스템의 각종 하드웨어와 네트워크를 관리∙제어한다.

- 데이터를 관리하고, 데이터 및 자원의 공유 기능을 제공한다.

- 시스템의 오류를 검사하고 복구한다.

- 자원 보호 기능을 제공한다.

- 입∙출력에 대한 보조 기능을 제공한다.

-  가상 계산기 기능을 제공한다.

 

4. 운영체제의 주요 자원 관리

프로세스 관리

- 프로세스 스케줄링 및 동기화 관리 담당

- 프로세스 생성과 제거, 시작과 정지, 메시지 전달 등의 기능 담당

기억장치 관리

- 프로세스에게 메모리 할당 및 회수 관리 담당

주변장치 관리

- 입∙출력 장치 스케줄링 및 전반적인 관리 담당

- 파일 관리 : 파일의 생성과 삭제, 변경 유지 등의 관리 담당

 

5. 운영체제의 종류

Windows : 마이크로소프트(Microsoft)사가 개발한 운영체제

UNIX : AT&T (Bell) 연구소, MIT, General Electric이 공동 개발한 운영체제

LINUX : UNIX와 호환이 가능한 커널(Kernel)이며, 리누스 토발즈가 개발한 운영체제

MacOS : 애플(Apple)사가 UNIX를 기반으로 개발한 운영체제

MS-DOS : Windows 이전에 사용되던 운영체제

- 단일 작업 처리 시스템에는 MS-DOS, 다중 작업 처리 시스템에는 Windows, UNIX, LINUX, MacOs 등이 사용된다.

- Windows, MacOS, MS-DOS는 개인용, UNIX, LINUX는 서버용 운영체제이다.

※ 단일 작업 처리 시스템/다중 작업 처리시스템

단일 작업 처리 시스템

- 컴퓨터 시스템을 한 개의 작업이 독점하여 사용하는 방식이다.

 

다중 작업 처리 시스템

- 여러 개의 프로그램을 열어 두고 다양한 작업을 동시에 진행하는 방식이다.

 

Section 143 UNIX / LINUX / MacOS

1. UNIX의 개요 및 특징

- UNIX1960년대 AT&T (Bell) 연구소, MIT, General Electric이 공동 개발한 운영체제이다.

- 시분할 시스템(Time Sharing System)을 위해 설계된 대화식 운영체제로, 소스가 공개된 개방형 시스템(Open System)이다.

- 대부분 C언어로 작성되 어있어서 이식성이 높으며, 장치, 프로세스 간의 호환성이 높다.

- 크기가 작고 이해하기가 쉽다.

- 다중 사용자(Multi-User), 다중 작업(Multi-Tasking)을 지원한다.

- 많은 네트워크 기능을 제공하므로 통신망(NetWork) 관리용 운영체제로 적합하다.

- 트리 구조의 파일 시스템을 갖는다.

- 전문적인 프로그램 개발에 용이하다.

- 다양한 유틸리티 프로그램들이 존재한다.

 

2. UNIX 시스템의 구성

커널(Kernel)

- UNIX의 가장 핵심적인 부분이다.

- 컴퓨터가 부팅될 때 주기억장치에 적재된 후 상주하면서 실행된다.

- 하드웨어를 보호하고, 프로그램과 하드웨어 간의 인터페이스 역할을 담당한다.

- 프로세스(CPU 스케줄링) 관리, 기억장치 관리, 파일 관리, •출력 관리, 프로세스간 통신, 데이터 전송 및 변환 등 여러 가지 기능을 수행한다.

 

(Shell)

- 사용자의 명령어를 인식하여 프로그램을 호출하고 명령을 수행하는 명령어 해석기이다.

- 시스템과 사용자 간의 인터페이스를 담당한다.

- DOSCOMMAND, COM과 같은 기능을 수행한다.

- 주기억장치에 상주하지 않고, 명령어가 포함된 파일 형태로 존재하며 보조 기억장치에서 교체 처리가 가능하다.

- 파이프라인 기능을 지원하고 입•출력 재지정을 통해 출력과 입력의 방향을 변경할 수 있다.

- 공용 Shell(Bourne Shell, C Shell, Korn Shell)이나 사용자 자신이 만든 Shell을 사용할 수 있다.

 

Utility Program

- 일반 사용자가 작성한 응용 프로그램을 처리하는 데 사용한다.

- DOS에서의 외부 명령어에 해당된다.

- 유틸리티 프로그램에는 에디터, 컴파일러, 인터프리터, 디버거 등이 있다.

 

UNIX에서의프로세스 간 통신

- 각 프로세스는 시스템 호출을 통해 커널의 기능을 사용하며, 프로세스 간 통신은 시그널, 파이프, 소켓 등을 사용합니다.

- 시그널(Signal) : 간단한 메시지를 이용하여 통신하는 것으로 초기 UNIX 시스템에서 사용됨

- 파이프(Pipe) : 한 프로세스의 출력이 다른 프로세스의 입력으로 사용되는 단방향 통신 방식

- 소켓(Socket) : 프로세스 사이의 대화를 가능하게 하는 쌍방향 통신 방식

 

3. LINUX의 개요 및 특징

- 1991년 리누스 토발즈가 UNIX 기반으로 개발한 운영체제이다.

- 프로그램 소스 코드가 무료로 공개되어 있기 때문에 프로그래머가 원하는 기능을 추가할 수 있고, 다양한 플랫폼에 설치하여 사용이 가능하며, 재배포가 가능하다.

- UNIX와 완벽하게 호한된다.

- 대부분의 특징이 UNIX와 동일하다.

 

4. MacOS의 개요 및 특징

- 1980년대 애플(Apple) 사가 UNIX를 기반으로 개발한 운영체제이다.

- 아이맥과 맥북 등 애플 사에서 생산하는 제품에서만 사용이 가능하다.

- 드라이버 설치 및 installuninstall의 과정이 단순하다.

 

Section 144 기억장치 관리의 개요

1. 기억장치 계층 구조의 특징

- 기억장치는 레지스터, 캐시 기억장치, 주기억장치, 보조기억장치를 다음과 같이 계층 구조로 분류할 수 있다.

- 계층 구조에서 상위의 기억장치 일수록 접근 속도와 접근 시간이 빠르지만, 기억용량이 적고 고가이다.

- 주기억장치는 각기 자신의 주소를 갖는 워드 또는 바이트들로 구성되어 있으며, 주소를 이용하여 액세스 할 수 있다.

- 레지스터, 캐시 기억장치, 주기억장치의 프로그램과 데이터는 CPU가 직접 액세스 할 수 있으나 보조기억장치에 있는 프로그램이나 데이터는 직접 액세스할 수 없다.

- 보조기억장치에 있는 데이터는 주기억장치에 적재된 후 CPU에 의해 액세스 될 수 있다.

2. 기억장치의 관리 전략의 개요

- 보조기억장치의 프로그램이나 데이터를 주기억장치에 적재시키는 시기, 적재 위치 등을 지정하여 한정된 주기억장치의 공간을 효율적으로 사용하기 위한 것으로 반입(Fetch) 전략, 배치(Placement) 전략, 교체(Replacement) 전략이 있다.

 

3. 반입(Fetch) 전략

- 보조기억장치에 보관중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략이다.

- 요구 반입(Demand Fetch) : 실행중인 프로그램이 특정 프로그램이나 데이터 등의 참조를 요구할 떄 적재하는 방법이다.

- 예상 반입(Anticipathy Fetch) : 실행중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 예상하여 적재하는 방법이다.

 

4. 배치(Placement) 전략

- 새로 반입되는 프로그램이나 데이터를 주기억장치의 어디에 위치시킬 것인지를 결정하는 전략이다.

- 최초 적합(First Fit) : 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 첫 번째 분할 영역에 배치시키는 방법

- 최적 접합(Best Fit) : 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 단편화를 가장 작게 남기는 분할 영역에 배치시키는 방법

- 최악 적합(Worst Fit) : 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 단편화를 가장 많이 남기는 분할 영역에 배치시키는 방법

 

5. 교체(Replacement) 전략

- 주기억장치의 모든 영역이 이미 사용중인 상태에서 새로운 프로그램이나 데이터를 주기억장치에 배치하려고 할 때, 이미 사용되고 있는 영역 중에서 어느 영역을 교체하여 사용할 것인지를 결정하는 전략이다.

- FIFO, OPT, LRU, NUR, SCR 등이 있다.

 

Section 146 가상기억장치 구현 기법 / 페이지 교체 알고리즘

1. 가상기억장치의 개요

- 보조기억장치(하드디스크)의 일부를 주기억장치철머 사용하는 것으로, 용량이 작은 주기억장치를 마치 큰 용량을 가진 것처럼 사용하는 기법이다.

- 프로그램을 여러 개의 작은 블록 단위로 나누어서 가상기억장치에 보관해 놓고,

프로그램 실행 시 요구되는 블록만 주기억장치에 불연속적으로 할당하여 처리한다.

- 주기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용한다.

- 주기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용한다.

- 주기억장치의 이용률과 다중 프로그래밍의 효율을 높일 수 있다.

- 가상기억장치에 저장된 프로그램을 실행하려면 가상기억장치의 주소를 주기억장치의 주소로 바꾸는 주소 변환 작업이 필요하다.

- 블록 단위로 나누어 사용하므로 연속 할당 방식에서 발생할 수 있는 단편화를 해결할 수 있다.

- 가상기억장치의 일반적인 구현 방법에는 블록의 종류에 따라 페이징 기법과 세그먼테이션 기법으로 나눌 수 있다.

 

2. 페이징(Paging) 기법

- 가상기억장치에 보관되어 있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 나눠진 프로그램을 동일하게 나눠진 프로그램(페이지)을 동일하게 나눠진 주기억장치의 영역(페이지 프레임)에 적재시켜 실행하는 기법이다.

- 프로그램을 일정한 크기로 나눈 단위를 페이지라고 하고, 페이지 크기로 일정하게 나누어진 주기억장치의 단위를 페잊 ㅣ프레임이라고 한다.

- 외부 단편화는 발생하지 않으나 내부 단편화는 발생할 수 있다.

- 주소 변환을 위해서 페이지의 위치 정보를 가지고 있는 페이지 맵 테이블이 필요하다.

- 페이지 맵 테이블 사용으로 비용이 증가되고, 처리 속도가 감소된다.

 

3. 세그먼테이션 기법

- 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행하는 기법이다.

- 프로그램을 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위를 세그먼트라고 하며, 각 세그먼트는 고유한 이름과 크기를 갖는다.

- 기억장치의 사용자 관점을 보존하는 기억장치 관리 기법이다.

- 세그먼테이션 기법을 이용하는 궁극적인 이유는 기억공간을 절약하기 위해서이다.

- 주소 변환을 위해서 세그먼트가 존재하는 위치 정보를 가지고 있는 세그먼트 맵 테이블이 필요하다.

- 세그먼트가 주기억장치에 적재될 때 다른 세그먼트에게 할당된 영역을 침범할 수 없으며, 이를 위해 기억장치 보호키가 필요하다.

- 내부 단편화는 발생하지 않으나 외부 단편화는 발생할 수 있다.

 

4. 페이지 교체 알고리즘

- 페이지 부재가 발생했을 때 가상기억장치의 필요한 페이지를 주기억장치에 적재해야 하는데, 이때 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 선택하여 교제할 것인지를 결정하는 기법이다.

- 페이지 교체 알괴즘에는 OPT, FIFO, LRU, LFU, NUR, SCR 등이 있다.

OPT(OPTimal replacement, 최적 교체)

OPT는 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법이다.

- 벨레이디(Belady)가 제안한 것으로, 페이지 부재 횟수가 가장 적게 발생하는 가장 효율적인 알고리즘이다.

FIFO(First in First out)

- 각 페이지가 주기억장치에 적재될 때마다 그떄의 시간을 기억시켜 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체하는 기법이다.

- 이해하기 쉽고, 프로그래밍 및 설계가 간단하다.

 

LRU(Least Recently Used)

- LRU는 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법이다.

- 각 페이지마다 계수기(Counter)나 스택(Stack)을 두어 현 시점에서 가장 오랫동안 사용하지 않은, 즉 가장 오래 전에 사용된 페이지를 교체한다.

 

LFU(Least Frequently Used)

- LFU는 사용 빈도가 가장 적은 페이지를 교체하는 기법이다.

- 활발하게 사용되는 페이지는 사용 횟수가 많아 교체되지 않고 사용된다.

 

NRU(Not Used Recently)

- NURLRU와 비슷한 알고리즘으로, 최근에 사용하지 않은 페이지를 교체하는 기법이다.

- 최근에 사용되지 않은 페이지는 향후에도 사용되지 않을 가능성이 높다는 것을 전제로, LRU에서 나타는 시간적인 오버헤드를 줄일 수 있다.

- 최근의 사용 여부를 확인하기 위해서 각 페이지마다 두 개의 비트, 즉 참조 비트(Reference Bit)와 변형 비트(Modified Bit, Dirty Bit)가 사용된다.

- 다음과 같이 참조 비트와 변형 비트의 값에 따라 교체될 페이지의 순서가 결정된다.

 

SCR(Second Chance Replacement, 2차 기회 교체)

- SCR은 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 것으로, FIFO 기법의 단점을 보완하는 기법이다.

 

Section 147 가상기억장치 기타 관리 사항

- 가상 기억장치를 구현할 때 시스템의 성능에 영향을 미치는 페이지 크기나 Locality, 워킹 셋, 페이지 부재 빈도, 프리에이징 등이 있다.

1. 페이지 크기

- 페이징 기법을 사용하면 프로그램을 페이지 단위로 나누게 되는데, 페이지의 크기에 따라 시스템에 미치는 영향이 다르다.

페이지 크기가 작을 경우

- 페이지 단편화가 감소되고, 한 개의 페이지를 주기억장치로 이동하는 시간이 줄어든다.

- 불필요한 내용이 주기억장치에 적재될 확률이 적으므로 효율적인 워킹 셋을 유지할 수 있다.

- Locality에 더 일치할 수 있기 때문에 기억장치 효율이 높아진다.

- 페이지 정보를 갖는 페이지 맵 테이블의 크기가 커지고, 매핑 속도가 늦어진다.

- 디스크 접근 횟수가 많아져서 전체적인 입•출력 시간은 늘어난다.

 

페이지 크기가 클 경우

- 페이지 정보를 갖는 페이지 맵 테이블의 크기가 작아지고, 매핑 속도가 빨라진다.

- 디스크 접근 횟수가 줄어들어 전체적인 입•출력의 효율성이 증가된다.

- 페이지 단편화가 증가되고, 한 개의 페이지를 주기억장치로 이동하는 시간이 늘어난다.

- 프로세스 수행에 불필요한 내용까지도 주기억장치에 적재될 수 있다.

 

2. Locality

- Locality(국부성, 지역성, 구역성, 국소성)는 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론이다.

- 스래싱을 방지하기 위한 워킹 셋 이론의 기반이 되었다.

- 프로세스가 집중적으로 사용하는 페이지를 알아내는 방법 중 하나로, 가상기억장치 관리의 이론적인 근거가 된다.

- 데닝(Denning) 교수에 의해 구역성의 개념이 증명되었으며 캐시 메모리 시스템의 이론적 근거이다.

- Locality의 종류에는 시간 구역성(Temporal Locality)과 공간 구역성(Spatial Locality)이 있다.

 

시간 구역성(Temporal Locality)

- 시간 구역성은 프로세스가 실행되면서 하나의 페이지를 일정 시간 동안 집중적으로 액세스 하는 현상이다.

- 한 번 참조한 페이지는 가까운 시간 내에 계속 참조할 가능성이 높음을 의미한다.

- 시간 구역성이 이루어지는 기억 장소 : Loop(반복, 순환), 스택(Stack), 부 프로그램(Sub Routine), Counting(1씩 증감), 집계(Totaling)에 사용되는 변수(기억장소)

 

공간 구역성(Spatial Locality)

- 공간 구역성은 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스 하는 현상이다.

- 어느 하나의 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음을 의미한다.

- 공간 구역성이 이루어지는 기억장소 : 배열 순회(Array Traversal, 배열 순례), 순차적 코드의 실행, 프로그래머들이 관련된 변수(데이터를 저장할 기억장소)들을 서로 근처에 선언하여 할당되는 기억장소, 같은 영역에 있는 변수를 참조할 때 사용

 

3. 워킹 셋(Working Set)

- 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합이다.

- 데닝(Denning)이 제안한 프로그램의 움직임에 대한 모델로, 프로그램의 Locality 특징을 이용한다.

- 자주 참조되는 워킹 셋을 주기억장치에 상주시킴으로써 페이지 부재 및 페이지 교체 현상이 줄어들어 프로세스의 기억장치 사용이 안정된다.

- 시간이 지남에 따라 자주 참조하는 페이지들의 집합이 변화하기 때문에 워킹 셋은 시간에 따라 변경된다.

 

4. 페이지 부재 빈도 방식

- 페이지 부재(Page Fault)는 프로세스 실행 시 참조할 페이지가 주기억장치에 없는 현상이며, 페이지 부재 빈도(PFF; Page Fault Frequency)는 페이지 부재가 일어나는 횟수를 의미한다.

- 페이지 부재 빈도 방식은 페이지 부재율(Page Fault Rate)에 따라 주기억장치에 있는 페이지 프레임의 수를 늘리거나 줄여 페이지 부재율을 적정 수준으로 유지하는 방식이다.

- 운영체제는 프로세스 실행 초기에 임의의 페이지 프레임을 할당하고, 페이지 부재율을 지속적으로 감시하고 있다가 부재율이 상한선을 넘어가면 좀더 많은 페이지 프레임을 할당하고, 부재율이 하한선을 넘어가면 페이지 프레임을 회수하는 방식을 사용한다.

 

5. 프리페이징(Prepaging)

- 처음의 과도한 페이지 부재를 방지하기 위해 필요할 것 같은 모든 페이지를 한꺼번에 페이지 프레임에 적재하는 기법이다.

- 기억장치에 들어온 페이지들 중에서 사용되지 않는 페이지가 많을 수도 있다.

 

6. 스래싱(Thrashing)

- 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상이다.

- 다중 프로그래밍 시스템이나 가상기억장치를 사용하는 시스템에서 하나의 프로세스 수행 과정중 자주 페이지 부재가 발생함으로써 나타나는 현상으로, 전체 시스템의 성능이 저하된다.

- 다중 프로그래밍의 정도가 높아짐에 따라 CPU의 이용률은 어느 특정 시점까지는 높아지지만, 다중 프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고, CPU의 이용률은 급격히 감소하게 된다.

 

스래싱 현상 방지 방법

- 다중 프로그래밍의 정도를 적정 수준으로 유지한다.

- 페이지 부재 빈도(Page Fault Frequency)를 조절하여 사용한다.

- 워킹 셋을 유지한다.

- 부족한 자원을 증설하고, 일부 프로세스를 중단시킨다.

- CPU 성능에 대한 자료의 지속적 관리 및 분석으로 임계치를 예상하여 운영한다.

 

Section 148 프로세스의 개요

1. 프로세스(Process)의 정의

- 일반적으로 프로세서(처리기, CPU)에 의해 처리되는 사용자 프로그램, 시스템 프로그램, 즉 실행중인 프로그램을 의미하며, 작업(Job), 태스트(Task)라고도 한다.

프로세스의 여러 형태로 정의

- PCB를 가진 프로그램

- 실기억장치에 저장된 프로그램

- 프로세서가 할당되는 실체로서, 디스패치가 가능한 단위

- 프로시저가 활동중인 것

- 비동기적 행위를 일으키는 주체

- 지정된 결과를 얻기 위한 일련의 계통적 동작

- 목적 또는 결과에 따라 발생되는 사건들의 과정

- 운영체제가 관리하는 실행단위

 

2. PCB(Process Control Block, 프로세스 제어 블록)

- PCB는 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓는 곳으로, Task Control Block 또는 Job Control Block이라고도 한다.

- 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다.

PCB에 저장되어 있는 정보

- 프로세스의 현재 상태 : 준비, 대기, 실행 등의 프로세스 상태

포인터

부모 프로세스에 대한 포인터 : 부모 프로세스의 주소 기억

자식 프로세스에 대한 포인터 : 자식 프로세스의 주소 기억

프로세스가 위치한 메모리에 대한 포인터 : 현재 프로세스가 위치한 주소 기억

할당된 자원에 대한 포인터 : 프로세스에 할당된 각 자원에 대한 주소 기억

 

프로세스 고유 식별자 : 프로세스를 구분할 수 있는 고유의 번호

스케줄링 및 프로세스의 우선순위 : 스케줄링 정보 및 프로세스가 실행될 우선순위

CPU 레지스터 정보 : Accumulator(누산기), 인덱스 레지스터, 범용 레지스터, 프로그램 카운터(PC) 등에 대한 정보

주기억장치 관리 정보 : 기준 레지스터(Base Register), 페이지 테이블(Page Table)에 대한 정보

출력 상태 정보 : • 출력장치, 개방된 파일 목록

계정 정보 : CPU 사용 시간, 실제 사용 시간, 한정된 시간

 

3. 프로세스 상태 전이

- 프로세스가 시스템 내에 존재하는 동안 프로세스 상태가 변하는 것을 의미하며, 프로세스의 상태를 다음과 같이 상태 전이도로 표시할 수 있다.

- 프로세스의 상태는 제출, 접수, 준비, 실행, 대기 상태로 나눌 수 있으며, 이 중 주요 세 가지 상태는 준비, 실행, 대기 상태이다.

제출(Submit) : 작업을 처리하기 위해 사용자가 작업을 시스템에 제출한 상태이다.

접수(Hold) : 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장된 상태이다.

준비(Ready) : 프로세스가 프로세서를 할당받기 위해 기다리고 있는 상태이다.

- 프로세스는 준비상태 큐에서 실행을 준비하고 있다.

- 접수 상태에서 준비 상태로의 전이는 Job 스케줄러에 의해 수행된다.

실행(run)

- 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행되는 상태이다.

- 프로세스 수행이 완료되기 전에 프로세스에게 주어진 프로세서 할당 시간이 종료(Timer Run Out)되면 프로세스는 준비상태로 전이된다.

- 실행중인 프로세스에 입•출력(I/O) 처리가 필요하면 실행중인 프로세스는 대기 상태로 전이된다.

- 준비 상태에서 실행 상태로의 전이는 CPU(프로세서) 스케줄러에 의해 수행된다.

대기(Wait), 보류, 블록(Block) : 프로세스에 입•출력 처리가 필요하면 현재 실행중인 프로세스가 중단되고, 입•출력 처리가 완료될 떄까지 대기하고 있는 상태이다.

종료(Terminated, Exit) : 프로세스의 실행이 끝나고 프로세스 할당이 해제된 상태이다.

 

4. 프로세스 상태 전이 관련 용어

- Dispatch : 준비 상태에서 대기하고 있는 프로세스 중 하나가 프로세서를 할당받아 실행 상태로 전이되는 과정이다.

- Wake up : 출력 작업이 완료되어 프로세스가 대기 상태에서 준비 상태로 전이 되는 과정이다.

- Spooling : 출력장치의 공유 및 상대적으로 느린 입출력장치의 처리 속도를 보완하고 다중 프로그래밍 시스템의 성능을 향상시키기 위해 입출력할 데이터를 직접 입출력장치에 보내지 않고 나중에 한꺼번에 입출력하기 위해 디스크에 저장하는 과정이다.

- 교통량 제어기(Traffic Controller) : 프로세스의 상태에 대한 조사와 통보를 담당한다.

 

5. 스레드(Thread)

- 프로세스 내에서의 작업 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위이다.

- 하나의 프로세스에 하나의 스레드가 존재하는 경우에는 단일 스레드, 하나 이상의 스레드가 존재하는 경우에는 다중 스레드라고 한다.

- 프로세스의 일부 특성을 갖고 있기 때문에 경량(Light Weight) 프로세스라고도 한다.

- 스레드 기반 시스템에서 스레드는 독립적인 스케줄링의 최소 단위로서 프로세스의 역할을 담당한다.

- 동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능하다.

스레드의 분류

사용자 수준의 스레드

사용자가 만든 라이브러리를 사용하여 스레드를 운용한다.

- 속도는 빠르지만 구현이 어렵다.

 

커널 수준의 스레드

- 운영체제의 커널에 의해 스레드를 운용한다.

- 구현이 쉽지만 속도가 느리다.

 

스레드 사용의 장점

- 하나의 프로세스를 여러 개의 스레드로 생성하여 병행성을 증진시킬 수 있다.

- 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율을 향상시킬 수 있다.

- 응용 프로그램의 응답 시간(Response Time)을 단축시킬 수 있다.

- 실행 환경을 공유시켜 기억장소의 낭비가 줄어든다.

- 프로세스들 간의 통신이 향상된다.

- 스레드는 공통적으로 접근 가능한 기억장치를 통해 효율적으로 통신한다.

 

 

Section152 인터넷

1. 인터넷(Internet)의 개요

- 인터넷이란 TCP/IP 프로토콜은 기반으로 하여 전 세계 수많은 컴퓨터와 네트워크들이 연결된 광범위한 컴퓨터 통신망이다.

- 인터넷은 미 국방성의 ARPANET에서 시작되었다.

- 인터넷은 유닉스 운영체제를 기반으로 한다.

- 통신망과 컴퓨터가 있는 곳이라면 시간과 장소에 구애받지 않고 정보를 교환할 수 있다.

- 인터넷에 연결된 모든 컴퓨터는 고유한 IP 주소를 갖는다.

- 컴퓨터 또는 네트워크를 서로 연결하기 위해서는 브리지, 라우터, 게이트웨이가 사용된다.

- 다른 네트워크 또는 같은 네트워크를 연결하여 중추적 역할을 하는 네트워크로, 보통 인터넷의 주가 되는 기간망을 일컫는 용어를 백본이라고 한다.

 

2. IP 주소(Internet Protocol Address)

- 인터넷에 연결된 모든 컴퓨터 자원을 구분하기 위한 고유한 주소이다.

- 숫자로 8비트씩 4부분, 32비트로 구성되어 있다.

- IP 주소는 네트워크 부분의 길이에 따라 다음과 같이 A 클래스에서 E 클래스까지 총 5단계로 구성되어 있다.

A Class : 국가나 대형 통신망에 사용 (0~127로 시작)

B Class : 중대형 통신망에 사용(128~191로 시작)

C Classs : 소규모 통신망에 사용(192~223으로 시작)

D Class : 멀티캐스트 용으로 사용(224~239로 시작)

E Class: 실험적 주소이며 공용되지 않음

 

3. 서브네팅(Subnetting)

- 할당된 네트워크 주소를 다시 여러 개의 작은 네트워크로 나누어 사용하는 것을 말한다.

- 4바이트의 IP 주소 중 네트워크 주소와 호스트 주소를 구분하기 위한 비트를 서브넷 마스크(Subnet Mask)라고 하며, 이를 변경하여 네트워크 주소를 여러 개로 분할하여 사용한다.

- 서브넷 마스크는 각 클래스마다 다르게 사용된다.

 

4. Ipv6(Internet Protocol version 6)의 개요

- Ipv6은 현재 사용하고 있는 IP 주소 체계인 Ipv4의 주소 부족 문제를 해결하기 위해 개발되었다.

- 128비트의 긴 주소를 사용하여 주소 부족 문제를 해결할 수 있으며, Ipv4에 비해 자료 전송 속도가 빠르다.

- 인증성, 기밀성, 데이터 무결성의 지원으로 보안 문제를 해결할 수 있따.

- Ipv4와 호환성이 뛰어나다.

- 주소의 확장성, 융통성, 연동성의 뛰어나며, 실시간 흐름 제어로 향상된 멀티미디어 기능을 지원한다.

- Traffic Class, Flow Label을 이용하여 등급별, 서비스별로 패킷을 구분할 수 있어 품질 보장이 용이하다.

 

5. Ipv6의 구성

- 16비트씩 8부분, 128비트로 구성되어 있다.

- 각 부분을 16진수로 표현하고, 콜론(:)으로 구분한다.

- Ipv6은 다음과 같이 세 가지 주소 체계로 나누어진다.

유니캐스트(Unicast) : 단일 송신자와 단일 수신자 간의 통신(11 통신에 사용)

멀티캐스트(Multicast) : 단일 송신자와 다중 수신자 간의 통신(1 대 다 통신에 사용)

애니캐스트(Anycast) : 단일 송신자와 가장 가까이 있는 단일 수신자 간의 통신(11 통신에 사용)

 

6. 도메인 네임(Domain Name)

- 숫자로 된 IP 주소를 사람이 이해하기 쉬운 문자 형태로 표현한 것이다.

- 호스트 컴퓨터 이름, 소속 기관 이름, 소속 기관의 종류, 소속 국가명 순으로 구성되며, 왼쪽에서 오른쪽으로 갈수록 상위 도메인을 의미한다.

- 문자로 된 도메인 네임을 컴퓨터가 이해할 수 있는 IP 주소로 변환하는 역할을 하는 시스템을 DNS(Domain Name System)라고 하며 이런 역할을 하는 서버를 DNS 서버라고 한다.

 

Section153 OSI 참조 모델

1. OSI(Open System Interconnection) 참조 모델의 개요

- OSI 참조 모델은 다른 시스템 간의 원활한 통신을 위해 ISO(국제표준화기구)에서 제안한 통신 규약(Protocol)이다.

- 개방형 시스템(Open System) 간의 데이터 통신 시 필요한 장비 및 처리 방법 등을 7단계로 표준화하여 규정했다.

- OSI 7계층은 1~3 계층을 하위 계층, 4~7 계층을 상위 계층이라고 한다.

하위 계층 : 물리 계층 데이터 링크 계층 네트워크 계층

상위 계층 : 전송 계층 세션 계층 표현 계층 응용 계층

 

2. OSI 참조 모델의 목적

- 서로 다른 시스템 간을 상호 접속하기 위한 개념을 규정한다.

- OSI 규격을 개발하기 위한 범위를 정한다.

- 관련 규정의 적합성을 조절하기 위한 공통적 기반을 제공한다.

 

3. OSI 참조 모델에서의 데이터 단위

프로토콜 데이터 단위(PDU; Protocol Data Unit)

- 프로토콜 데이터 단위는 동일 계층 간에 교환되는 정보의 단위.

- 물리 계층 : 비트

- 데이터 링크 계층 : 프레임

- 네트워크 계층 : 패킷

- 전송 계층 : 세그먼트

- 세션, 표현 응용 계층 : 메시지

서비스 데이터 단위(SDU; Service Date Unit)

- 서비스 데이터 단위는 서비스 접근점(SAP)을 통해 상하위 계층끼리 주고받는 정보의 단위이다.

 

4. 물리 계층(Physical Layer)

- 전송에 필요한 두 장치 간의 실제 접속과 절단 등 기계적, 전기적, 기능적, 절차적 특성에 대한 규칙을 정의한다.

- 물리적 전송 매체와 전송 신호 방식을 정의하며, RS-232C, X.21 등의 표준이 있었다.

- 관련 장비 : 리피터, 허브

 

5. 데이터 링크 계층(Data Link Layer)

- 두 개의 인접한 개방 시스템들 간에 신뢰성 있고 효율적인 정보전송을 할 수 있도록 한다.

- 송신 층과 수신 측의 속도 차이를 해결하기 위한 흐름 제어 기능을 한다.

- 프레임의 시작과 끝을 구분하기 위한 프레임의 동기화 기능을 한다.

- 오류의 검출과 회복을 위한 오류 제어 기능을 한다.

- 프레임의 순서적 전송을 위한 순서 제어 기능을 한다.

- HDLC, LAPB, LLC, MAC, LAPD, PPP 등의 표준이 있다.

관련 장비 : 랜카드, 브리지, 스위치

 

6. 네트워크 계층(Network Layer, 망 계층)

- 개방 시스템들 간의 네트워크 연결을 관리하는 기능과 데이터의 교환 및 중게 기능을 한다.

- 네트워크 연결을 설정, 유지, 해제하는 기능을 한다.

- 경로 설정(Routing), 데이터 교환 및 중계, 트래픽 제어, 패킷 정보 전송을 수행한다.

- X.25, IP 등 표준이 있다.

관련 장비 : 라우터

 

7. 전송 계층(Transport Layer)

- 전송 계층은 논리적 안정과 균일한 데이터 전송 서비스를 제공함으로써 종단 시스템(End-to-End) 간에 투명한 데이터 전송을 가능하게 한다.

- OSI 7계층 중 하위 3계층과 상위 3계층의 인터페이스(Interface)를 담당한다.

- 종단 시스템(End-to-End) 간의 전송 연결 설정, 데이터 전송, 연결 해제 기능을 한다.

- 주소 설정, 다중화(분할 및 재조립), 오류 제어, 흐름 제어를 수행한다.

- TCP, UDP 등의 표준이 있다.

관련 장비 : 게이트웨이

 

8. 세션 계층(Session Layer)

- 수신 측 간의 관련성을 유지하고 대화 제어를 담당한다.

- 대화(회화) 구성 및 동기 제어, 데이터 교환 관리 기능을 한다.

- 수신 측 간의 대화 동기를 위해 전송하는 정보의 일정한 부분에 체크점을 두어 정보의 수신 상태를 체크하며, 이때의 체크점을 동기점(Sysnchronization Point)라고 한다.

- 동기점은 오류가 있는 데이터의 회복을 위해 사용하는 것으로, 종류에는 소동기점과 대동기점이 있다.

 

9. 표현 계층(Presentation Layer)

- 응용 계층으로부터 받은 데이터를 세션 계층에 보내기 전에 통신에 적당한 형태로 변환하고, 세션 계층에서 받은 데이터는 응용 계층에 맞게 변환하는 기능을 한다.

- 서로 다른 데이터 표현 형태를 갖는 시스템 간의 상호 접속을 위해 필요한 계층이다.

- 코드 변환, 데이터 암호화, 데이터 압축, 구문 검색, 정보 형식(포맷) 변환, 문맥 관리 기능을 한다.

 

10. 응용 계층(Application Layer)

- 사용자(응용 프로그램)OSI 환경에 접근 할 수 있도록 서비스를 제공한다.

- 응용 프로세스 간의 정보 교환, 전자 사서함, 파일 전송, 가상 터미널 등의 서비스를 제공한다.

 

Section 156 TCP/IP

1. TCP/IP의 개요(Transmission Control Protocol/Internet Protocol)

- 인터넷에 연결된 서로 다른 기종의 컴퓨터들이 데이터를 주고받을 수 있도록 하는 표준 프로토콜이다.

- TCP/IP1960년대 말 ARPA에서 개발하여 ARPANET(1972)에서 사용하기 시작했다.

- TCP/IPUNIX의 기본 프로토콜로 사용되었고, 현재 인터넷 범용 프로토콜로 사용된다.

- TCP/IP는 다음과 같은 기능을 수행하는 TCP 프로토콜과 IP프로토콜이 결합된 것을 의미한다.

 

TCP(Transmission Contro Protocol)

- OSI 7계층의 전송 계층에 해당

- 신뢰성 있는 연결형 서비스를 제공

- 패킷의 다중화, 순서 제어, 오류 제어, 흐름 제어 기능을 제공

- 스트림 전송 기능 제공

- TCP 헤더에는 Source/Destination Port Number, Sequence Number,

Acknowledgment Number, Checksum 등이 포함된다.

 

IP(Internet Protocol)

- OSI 7계층의 네트워크 계층에 해당

- 데이터그램을 기반으로 하는 비연결형 서비스를 제공

- 패킷의 분해/조립, 주소 지정, 경로 선택 기능을 제공

- 헤더의 길이는 최소 20Byte에서 최대 60Byte이다.

- IP 헤더에는 Version, Header Length, Total Packet Length, Header Checksum, Source IP Address, Destination IP Address 등이 포함된다.

 

2. TCP/IP의 구조

응용 계층(응용, 표현, 세션 계층)

- 응용 프로그램 간의 데이터 송수신 제공

- TELNET, FTP, SMTP, SNMP, DNS, HTTP

 

전송 계층(전송 계층)

- 호스트들 간의 신뢰성 있는 통신 제공

- TCP, UDP

 

네트워크 계층(인터넷 계층)

- 데이터 전송을 위한 주소 지정, 경로 설정을 제공

- IP, ICMP, IGMP, ARP, RARP

 

네트워크 액세스 계층(데이터 링크 계층, 물리 계층)

- 실제 데이터(프레임)를 송수신하는 역할

-Ethernet, IEEE 802. HDLC, X.25, RS-232C, ARQ

 

3. 응용 계층의 주요 프로토콜

FTP(File Transfer Protocol) : 컴퓨터와 컴퓨터 또는 컴퓨터와 인터넷 사이에서 파일을 주고받을 수 있도록하는 원격 파일 전송 프로토콜

 

SMTP(Simple Mail Transer Protocol) : 전자 우편을 교환하는 서비스

 

TELNET

- 멀리 떨어져 있는 컴퓨터에 접속하여 자신의 컴퓨터처럼 사용할 수 있도록 해주는 서비스

- 프로그램을 실행하는 등 시스템 관리 작업을 할 수 있는 가상의 터미널 기능을 수행

 

SNMP(Simple Network Management Protocol)

- TCP/IP의 네트워크 관리 프로토콜로, 라우터나 허브 등 네트워크 기기의 네트워크 정보를 네트워크 관리 시스템에 보내는 데 사용되는 표준 통신 규약

 

DNS(Domain Name System)

- 도메인 네임을 IP 주소로 매핑(Mapping)하는 시스템

 

HTTP(HyperText Transfer Protocol)

- 월드 와이드 웹(WWW)에서 HTML 문서를 송수신 하기 위한 표준 프로토콜

 

4. 전송 계층의 주요 프로토콜

TCP(Transmission Control Protocol)

- 양방향 연결(Full Duplex Connection)형 서비스를 제공한다.

- 가상 회선 연결(Virtual Circuit Connection) 형태의 서비스를 제공한다.

- 스트림 위주의 전달(패킷 단위)을 한다.

- 신뢰성 있는 경로를 확립하고 메시지 전송을 감독한다.

- 순서 제어, 오류 제어, 흐름 제어 기능을 한다.

- 패킷의 분실, 손상, 지연이나 순서가 틀린 것 등이 발생할 때 투명성이 보장되는 통신을 제공한다.

 

UDP(User Datagram Protocol)

- 데이터 전송 전에 연결을 설정하지 않는 비연결형 서비스를 제공한다.

- TCP에 비해 상대적으로 단순한 헤더 구조를 가지므로, 오버헤드가 적다.

- 고속의 안정성 있는 전송 매체를 사용하여 빠른 속도를 필요로 하는 경우, 동시에 여러 사용자에게 데이터를 전달할 경우, 정기적으로 반복해서 전송할 경우에 사용한다.

- 실시간 전송에 유리하며, 신뢰성보다는 속도가 중요시되는 네트워크에서 사용된다.

- UDP 헤더에는 Source Port Number, Destination Port Number, Length, Checksum 등이 포함된다.

 

RTCP(Real-Time Control Protocol)

- RTP(Real-time Transport Protocol) 패킷의 전송 품질을 제어하기 위한 제어 프로토콜이다.

- 세션(Session)에 참여한 각 참여자들에게 주기적으로 제어 정보를 전송한다.

- 하위 프로토콜은 데이터 패킷과 제어 패킷의 다중화(Multiplexing)를 제공한다.

- 데이터 전송을 모니터링하고 최소한의 제어와 인증 기능만을 제공한다.

- RTCP 패킷은 항상 32비트의 경계로 끝난다.

 

5. 인터넷 계층의 주요 프로토콜

IP(Internet Protocol)

- 전송할 데이터에 주소를 지정하고, 경로를 설정하는 기능을 한다.

- 비연결형인 데이터그램 방식을 사용하는 것으로 신뢰성이 보장되지 않는다.

 

ICMP(Internet Control Message Protocol)

- IP와 조합하여 통신중에 발생하는 오류의 처리와 전송 경로 변경 등을 위한 제어 메시지를 관리하는 역할을 하며, 헤더는 8Byte로 구성된다.

 

IGMP(internet Group Management Protocol)

- 멀티캐스트를 지원하는 호스트나 라우터 사이에서 멀티캐스트 그룹 유지를 위해 사용된다.

 

ARP(Address Resolution Protocol)

- 호스트의 IP 주소를 호스트와 연결된 네트워크 접속 장치의 물리적 주소(MAC Address)로 바꾼다.

 

RARP(Reverse Address Resolution Protocol)

- 물리적 주소를 IP 주소로 변환하는 기능을 한다.

 

6. 네트워크 액세스 계층의 주요 프로토콜

Eternet(IEEE 802.3) : CSMA/CD 방식의 LAN

IEEE802 : LAN을 위한 표준 프로토콜

HDLC : 비트 위주의 데이터 링크 제어 프로토콜

X.25 : 패킷 교환망을 통한 DTEDCE 간의 인터페이스를 제공하는 프로토콜

RS-232C : 공중 전화 교환망(PSTN)을 통한 DTEDCE 간의 인터페이스를 제공하는 프로토콜

  Comments,     Trackbacks
정보처리기사 4과목 프로그래밍 언어 활용 2장 요점 정리

2장 프로그래밍 언어 활용

Section 127 변수

1. 변수의 개요

- 변수(Variable)은 컴퓨터가 명령을 처리하는 도중 발생하는 값을 젖아하기 위한 공간으로, 변할 수 있는 값을 의미한다.

- 변수는 저장하는 값에 따라 정수형, 실수형, 문자형, 포인터형 등으로 구분한다.

 

2. 변수명 작성 규칙

- 영문자, 숫자, _(under bar)를 사용할 수 있다.

- 첫 글자는 영문자나 _(unber bar)로 시작해야 하며, 숫자는 올 수 없다.

- 글자 수에 제한이 없다.

- 공백이나 *, +, -, / 등의 특수문자를 사용할 수 없다.

- 대 소문자를 구분한다.

- 예약어를 변수명으로 사용할 수 없다.

- 변수 선언 시 문장 끝에 반드시 세미콜론(;)을 붙여야 한다.

 

※ 예약어

- 정해진 기능을 수행하도록 이미 용도가 정해져 있는 단어로, 변수 이름이나 다른 목적으로 사용할 수 없다.

C 언어의 예약어 예시

Do, for, while(반복문)

Case, default, else, if, swith(선택문)

Break, continue, goto, return(분기문)

Char, double, enum, float, int, long, short, signed, struct, typedef, union, unsigned, void (자료형)

Auto, extern, register, static (기억 클래스)

Const, sizeof, volatile (기타)

 

※ 변수를 상수로 만들어 사용하기

- 변수는 실행하는 도중 발생한 값을 저장하기 위한 공간으로, 변수의 값은 변경될 수 있다. 하지만 변수에 저장된 값이 프로그램 종료까지 변경되지 않도록 상수로 만들어 사용할 수 있는데, 이런 경우 C언어에서는 const라는 예약어를 사용한다.

- 변수처럼 상수에 이름을 붙여 기호화하여 사용한다고 하여 심볼릭(Symbolic) 상수라고도 한다.

 

3. 기억 클래스

- 변수 선언 시 메모리 내에 변수의 값을 저장하기 위한 기억영역이 할당되는데, 할당되는 기억영역에 따라 사용 범위에 제한이 있다. 기억영역을 결정하는 작업을 기억 클래스(Storage Class)라 한다.

 

- C 언어에서는 다음과 같이 5가지 종류의 기억 클래스를 제공한다.

 

자동 변수(Automatic Variable)

- 함수나 코드의 범위를 한정하는 블록 내에서 선언되는 변수이다.

- 함수나 블록이 실행되느 동안에만 존재하며 이를 벗어나면 자동으로 소멸된다.

- 초기화하지 않으면 쓰레기값(Garbage Value)이 저장된다.

 

외부 변수(External Variable)

- 현재 파일이나 다른 파일에서 선언된 변수나 함수를 참조(reference)하기 위한 변수이다.

- 외부 변수는 함수 밖에서 선언한다.

- 함수가 종료된 뒤에도 값이 소멸되지 않는다.

- 초기화하지 않으면 자동으로 0으로 초기화된다.

- 다른 파일에서 선언된 변수를 참조할 경우 초기화 할 수 없다.

 

정적 변수(Static Variable)

- 정적 변수는 함수나 블록 내에서 선언하는 내부 정적 변수와 함수 외부에서 선언하는 외부 정적 변수가 있다.

- 내부 정적 변수는 선언한 함수나 블록 내에서만 사용할 수 있고, 외부 정적 변수는 모든 함수에서 사용할 수 있다.

- 두 변수 모두 함수나 블록이 종료된 뒤에도 값이 소멸되지 않는다.

- 초기화는 변수 선언 시 한 번만 할 수 있으며, 초기화를 생략하면 자동으로 0으로 초기화 된다.

 

레지스터 변수(Register Variable)

- 메모리가 아닌 CPU 내부의 레지스터에 기억영역을 할당받는 변수이다.

- 자주 사용되는 변수를 레지스터에 저장하여 처리 속도를 높이기 위해 사용한다.

- 함수나 블록이 실행되는 동안에만 존재하며 이를 벗어나면 자동으로 소멸된다.

- 레지스터의 사용 개수는 한정되어 있어 데이터를 저장할 레지스터가 없는 경우 자동 변수로 취급되어 메모리에 할당된다.

- CPU에 저장되어 메모리 주소를 가질 수 없기 때문에 변수의 주소를 구하는 주소 연산자(&)를 사용할 수 없다.

 

4. 변수의 선언

- 변수는 일반적으로 다음과 같읕 형식으로 선언

자료형 변수명 = ;

자료형 : 변수에 저장될 자료의 형식을 지정한다.

변수명 : 사용자가 원하는 이름을 임의로 지정한다. 단 변수명 작성 규칙에 맞게 지정해야 한다.

: 변수를 선언하면서 초기화할 값을 지정한다. 단 값은 지정하지 않아도 된다.

 

Section 128 연산자

산술 연산자는 가, , , 제 등의 산술 계산에 사용되는 연산자를 말한다.

- 산술 연산자에는 일반 산술식과 달리 한 변수의 값을 증가하거나 감소시키는 증감 연산자가 있다.

+ : 덧셈

- : 뺄셈

* : 곱셈

/ : 나눗셈

% : 나머지

++ : 증가 연산자 (전치 : 변수 앞에 증감 연산자가 오는 형태로, 먼저 변수의 값을 증감시킨 후 변수를 연산에 사용한다.)

-- : 감소 연산자 (후치 : 변수 뒤에 증감 연산자가 오는 형태로, 먼저 변수를 연산에 사용한 후 변수의 값을 증감시킨다.)

 

2. 관계 연산자

- 두 수의 관계를 비교하여 참(true) 또는 거짓(false)을 결과로 얻는 연산자이다.

- 거짓은 0, 참은 1로 사용되지만 0외의 모든 숫자도 참으로 간주된다.

 

== : 같다

!= : 같지않다

> : 크다

>= : 크거나 같다

< : 작다

<= : 작거나 같다

 

3. 비트 연산자

- 비트별(0, 1)로 연산하여 결과를 얻는 연산자이다.

& : and (모든 비트가 1일 때만 1)

^ : xor (모든 비트가 같으면 0, 하나라도 다르면 1)

| : or (모든 비트 중 한 비트라도 1이면 1)

~ : not (각 비트의 부정, 0이면 1, 1이면 0)

<< : 왼쪽 시프트(비트를 왼쪽으로 이동)

>> : 오른쪽 시프트(비트를 오른쪽으로 이동)

 

4. 논리 연산자

- 두개의 논리 값을 연산하여 참(true) 또는 거짓(false)을 결과로 얻는 연산자이다.

거짓은 0, 참은 1이다.

! : not (부정)

&& : and (모두 참이면 참)

|| : or (하나라도 참이면 참)

 

5. 대입 연산자

- 연산 후 결과를 대입하는 연산식을 간략하게 입력 할 수 있도록 대입 연산자를 제공한다.

- 산술, 관계, 비트, 논리 연산자에 모두 적용할 수 있다.

 

+=

-=

*=

/=

%=

<<=

>>=

 

6. 조건 연산자

- 조건에 따라 서로 다른 수식을 수행한다.

형식

조건 ? 수식1 : 수식2; (조건의 수식이 참이면 수식1, 거짓이면 수식2를 실행한다)

 

7. 기타 연산자

sizeof : 자료형의 크기를 표시한다.

,(콤마) :

- 콤마로 구분하여 한 줄에 두 개 이상의 수식을 작성하거나 변수를 정의한다.

- 왼쪽에 오른쪽에서 순서대로 수행되며, 순서 연산자로 부르기도 한다.

 

(자료형):

- 사용자가 자료형을 다른 자료형으로 변환할 때 사용하는 것으로, cast(캐스트) 연산자라고 부른다.

- 변환할 자료형을 괄호 안에 넣어서 변활할 값이나 변수명 앞에 놓는다.

 

8. 연산자 우선순위

- 한 개의 수식에 여러 개의 연산자가 사용되면 기본적으로 아래 표의 순서대로 처리된다.

- 아래 표의 한 줄에 가로로 나열된 연산자는 우선수위가 같기 떄문에 결합규칙에 따라 ←는 오른쪽에 있는 연산자부터, →는 왼쪽에 있는 연산자부터 차례로 계산된다.

 

대분류

중분류

연산자

결합규칙

우선 순위

단항 연산자

단항 연산자

! ~ ++ -- sizeof

높음

 

 

 

 

 

 

 

 

 

 

 

 

 

낮음

이항 연산자

산술 연산자

 * / %

+ -

시프트 연산자

<< >>

관계 연산자

< <= >= >

비트 연산자

== !=

논리 연산자

&& ||

삼항 연산자

조건 연산자

? :

대입 연산자

대입 연산자

= += -= *= /= %= <<= >>=

순서 연산자

순서 연산자

,

 

Section 129 제어문

1. 제어문의 개념

- 컴퓨터 프로그램은 명령어가 서술된 순서에 따라 위에 아래로 실행되는데, 조건을 지정해서 진행 순서를 변경할 수 있다. 이렇게 프로그램의 순서를 변경할 떄 사용하는 명령문을 제어문이라고 한다.

 

2. 단순 if

- if문은 조건에 따라서 실행할 문장을 달리하는 제어문이며, 단순 if문은 조건이 한 개일 때 사용하는 제어문이다.

- 조건이 참일 때만 실행할 문장을 지정할 수도 있고, 참과 거짓에 대해 각각 다른 실행문을 지정할 수도 있다.

- 형식1 : 조건이 참일 때만 실행한다.

- 조건이 참일 때 실행할 문장이 하나인 경우

If(조건)

           실행할 문장;

- 조건이 참일 때 실행할 문장이 두 문장 이상인 경우

If(조건) {

실행할 문장1;

실행할 문장2;

.

.

}

 

3. 다중 if

- 조건이 여러 개 일 때 사용하는 제어문이다.

If(조건1)

           실행할 문장1;

Else if(조건2)

           실행할 문장2;

Else if(조건3)

           실행할 문장3;

Else

           실행할 문장4;

 

4. switch문은 조건에 따라 분기할 곳이 여러 곳인 경우 간단하게 처리할 수 있는 제어문이다.

Switch(수식)

{

           Case 레이블1:

 

           실행할 문장1;

           Break;

           Case 레이블2;

           실행할 문장2;

           Break;

           Default;

           실행할 문장3;

}

- case 문의 레이블에는 한 개의 상수만 지정할 수 있으며, int char, enum형의 상수만 가능하다.

- case문의 레이블에는 변수를 지정할 수 없다.

- break문은 생략이 가능하지만 break문이 생략되면 수식과 레이블이 일치할 때 실행할 문장부터 break문 또는 switch문이 종료될 떄까지 모든 문장이 실행된다.

 

5. goto

- goto문은 프로그램 실행 중 현재 위치에서 원하는 다른 문장으로 건너뛰어 수행을 계속하기 위해 사용하는 제어문이다.

- goto문은 원하는 문장으로 쉽게 이동할 수 있지만 많이 사용하면 프로그램으 ㅣ이해와 유지보수가 어려워져 거의 사용하지 않는다.

형식

Goto 레이블;

레이블:

           실행할 문장

 

Section 130 반복문

1. 반복문의 개요

- 제어문의 한 종류로 일정한 횟수를 반복하는 명령문을 말한다. 보통 변수의 값을 일정하게 증가시키면서 정해진 수가 될 때까지 명령이나 명령 그룹을 반복 수행한다.

 

2. for

- 초기값, 최종값, 증가값을 지정하는 수식을 이용해 정해진 횟수를 반복하는 제어문이다.

- for문은 초기값을 정한 다음 최종값에 대한 조건이 참이면 실행할 문장을 실행한 후 초기값을 증가값 만큼 증가시키면서 최종값에 대한 조건이 참인 동안 실행할 문장을 반복 수행한다.

 

형식

For(1(초기값); 2(최종값); 3(증가값)

실행할 문장;

- 초기값, 최종값, 증가값 중 하나 이상을 생략할 수 있고, 각각의 요소에 여러 개의 수식을 지정할 수도 있다.

- for(; ;)와 같이 조건에 참여하는 수식을 모두 생략하면 for문은 무한 반복한다.

- for문은 처음부터 최종값에 대한 조건식을 만족하지 못하면 한 번도 수행하지 않는다.

- 문자도 for문을 수행할 수 있다.

 

3. while

- 조건이 참인 동안 실행할 문장을 반복 수행하는 제어문이다.

- while문은 조건이 참인동안 실행할 문장을 반복 수행하다가 조건이 거짓이면 while문을 끝낸 후 다음 코드를 실행한다.

- while문은 조건이 처음부터 거짓이면 한 번도 수행하지 않는다.

 

형식

While(조건)

           실행할 문장

 

4. do~while

- do while문은 조건이 참이 동안 정해진 문장을 반복 수행하다가 조건이 거짓이면 반복문을 벗어나는 while문과 같은 동작을 하는데, 다른 점은 do~while문은 실행할 문장을 무조건 한 번 실행한 다음 조건을 판단하여 탈출 여부를 결정한다는 것이다.

 

형식

Do

           실행할 문장;

While(조건);

 

5. break, continue

- switch문이나 반복문의 실행을 제어하기 위해 사용되는 예약어디ㅏ.

break

- switch문이나 반복문 안에서 break가 나오면 블록을 벗어난다.

continue

- continue 이후의 문장을 실행하지 않고 제어를 반복문의 처음으로 옮긴다.

-  반복문에서만 사용된다.

 

Section 131 배열과 문자열

1. 배열의 개념

- 배열은 동일한 데이터 유형을 여러 개 사용해야 할 경우 이를 손쉽게 처리하기 위해 여러 개의 변수들을 조합해서 하나의 이름으로 정의해 사용하는 것을 말한다.

- 배열은 하나의 이름으로 여러 기억장소를 가리키기 때문에 배열에서 개별적인 요소들의 위치는 첨자를 이용하여 지정한다.

- 배열은 변수명 뒤에 대괄호 []를 붙이고 그 안에 사용할 개수를 지정한다.

- C언어에서 배열의 위치는 0부터 시작된다.

- 배열은 행 우선으로 데이터가 기억장소에 할당된다.

- C 언어에서 배열 위치를 나타내는 첨자 없이 배열 이름을 사용하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같다.

 

2. 1차원 배열

- 1차원 배열은 변수들을 일직선상의 개념으로 조합한 배열이다.

형식

자료형 변수명[개수];

- 자료형: 배열에 저장할 자료의 형을 지정한다.

- 변수명 : 사용할 배열의 이름으로 사용자가 임의로 지정한다.

- 개수 : 배열의 크기를 지정하는 것으로 생략할 수 있다.

 

3. 2차원 배열

- 2차원 배열은 변수들을 평면, 즉 행과 열로 조합한 배열이다.

형식

- 자료형 변수명[행개수][열개수]

 

4. 배열의 초기화

- 배열 선언 시 초기값을 지정할 수 있다.

- 배열을 선언할 때 배열의 크기를 생략하는 경우에는 반드시 초기값을 지정해야 초기값을 지정한 개수 만큼의 배열이 선언된다.

 

5. 배열 형태의 문자열 변수

- C언어에서는 큰따옴표(“”)로 묶인 글자는 글자 수에 관계없이 문자열로 처리된다.

- C언어에는 문자열을 저장하는 자료형이 없기 때문에 배열, 또는 포인터를 이용하여 처리한다.

형식

Char 배열이름[크기] = “문자열

- 배열에 문자열을 저장하면 문자열의 끝을 알리기 위한 널 문자(‘\0’)가 문자열 끝에 자동으로 삽입된다.

- 배열에 문자열을 저장할 때는 배열 선언 시 초기값으로 지정해야 하며, 이미 선언된 배열에는 문자열을 저장할 수 없다.

- 문자열 끝에 자동으로 널 문자가 삽입되므로, 널 문자까지 고려하여 배열 크기를 지정해야 한다.

 

Section 132 포인터

1. 포인터와 포인터 변수

- 포인터는 변수의 주소를 말하며, C언어에서는 주소를 제어할 수 있는 기능을 제공한다.

- C언어에서 변수의 주소를 저장할 때 사용하는 변수를 포인터 변수라 한다.

- 포인터 변수를 선언할 때는 자료의 형을 먼저 쓰고 변수명 앞에 간접 연산자 *를 붙인다.

- 포인터 변수에 주소를 저장하기 위해 변수의 주소를 알아낼 때는 변수 앞에 번지 연산자 &를 붙인다.

- 실행문에서 포인터 변수에 간접 연산자 *를 붙이면 해당 포인터 변수가 가리키는 곳의 값을 말한다.

- 포인터 변수는 필요에 의해 동적으로 할당되는 메모리 영역인 힙 영역에 접근하는 동적 변수이다.

포인터 변수의 용도

- 연결된 자료 구조를 구성하기 위해 사용한다.

- 동적으로 할당된 자료 구조를 지정하기 위해 사용한다.

- 배열을 인수로 전달하기 위해 사용한다.

- 문자열을 표현하기 위해 사용한다.

- 커다란 배열에서 요소를 효율적으로 저장하기 위해 사용한다.

- 메모리에 직접 접근하기 위해 사용한다.

 

2. 포인터와 배열

- 배열을 포인터 변수에 저장한 후 포인터를 이용해 배열의 요소에 접근할 수 있다.

- 배열 위치를 나타내는 첨자를 생략하고 배열의 대표명만 지정하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같다.

- 배열 요소에 대한 주소를 지정할 때는 일반 변수와 동일하게 & 연산자를 사용한다.

- 배열의 요소가 포인터인 포인터형 배열을 선언할 수 있다.

 

Section 138 데이터 입∙출력

1. C 언어의 표준 입출력 함수의 개요

- 표준 입출력 함수란 키보드로 입력받아 화면으로 출력할 떄 사용하는 함수로, 대표적으로 scanf(), getchar(), gets(), printf(), putchar(), puts() 등이 있다.

2. scanf() 함수

- C언어의 표준 입력 함수로, 키보드로 입력받아 변수에 저장하는 함수이다.

형식

Scanf(서식 문자열, 변수의 주소)

서식문자열 : 입력받을 데이터의 자료형을 지정한다.

변수의 주소 : 데이터를 입력받을 변수를 적는다. 변수의 주소로 입력받아야 하기 때문에 변수에 주소연산자 &를 붙인다.

 

특징

- 입력받을 데이터의 자료형, 자릿수 등을 지정할 수 있다.

- 한 번에 여러 개의 데이터를 입력 받을 수 있다.

- 서식 문자열과 변수의 자료형은 일치해야 한다.

 

서식 문자열

- 서식 문자열은 printf() 함수로 출력할 때도 동일하게 적용된다.

%d : 정수형 10진수를 입∙출력하기 위해 지정한다.

%u : 부호없는 정수형 10진수를 입∙출력하기 위해 지정한다.

%o : 정수형 8진수를 입∙출력하기 위해 지정한다.

%x : 정수형 16진수를 입∙출력하기 위해 지정한다.

%c : 문자를 입∙출력하기 위해 지정한다.

%s : 문자열을 입∙출력하기 위해 지정한다.

%f : 소수점을 포함하는 실수를 입∙출력 하기 위해 지정한다.

%e : 지수형 실수를 입∙출력하기 위해 지정한다.

%ld : long10진수를 입∙출력하기 위해 지정한다.

%lo : long8진수를 입∙출력하기 위해 지정한다.

%lx : long16진수를 입∙출력하기 위해 지정한다.

%p : 주소를 16진수로 입∙출력하기 위해 지정한다.

 

3. printf() 함수

- C 언어의 표준 출력 함수로, 인수로 주어진 값을 화면에 출력하는 함수이다.

형식

Printf(서식 문자열, 변수)

서식 문자열: 변수의 자료형에 맞는 서식문자열을 입력한다.

변수 : 서식 문자열의 순서에 맞게 출력할 변수를 적는다. Scanf()와 달리 주소 연산자&를 붙이지 않는다.

주요 제어문자

- 입력 혹은 출력 내용을 제어하는 문자이다.

\n : new line (커서를 다음 줄 앞으로 이동한다.)

\b : backspace(커서를 왼쪽으로 한 칸 이동한다.)

\t : tab(커서를 일정 간격 띄운다.)

\r : carriage return(커서를 현재 줄의 처음으로 이동한다.)

\0 : null (널 문자를 출력한다.)

\’ : single quote(작은따옴표를 출력한다.)

\” : double quote(큰따옴표를 출력한다.)

\a : alert(스피커로 벨 소리를 출력한다.)

\\ : backslash : 역 슬래시를 출력한다.

\f : form feed : 한 페이지를 넘긴다.

 

4. 기타 표준 입∙출력 함수

입력

Getchar() : 키보드로 한 문자를 입력받아 변수에 저장하는 함수

Gets() : 키보드로 문자열을 입력받아 변수에 저장하는 함수로, enter를 누르기 전까지를 하나의 문자열로 인식하여 저장함

출력

Putchar() : 인수로 주어진 한 문자를 화면에 출력하는 함수

Puts() : 인수로 주어진 문자열을 화면에 출력한 후 커서를 자동을 hekdma 줄 앞으로 이동하는 함수

  Comments,     Trackbacks
정보처리기사 3과목 데이터베이스 구축 2장 물리 데이터베이스 설계 요점 정리

2장 물리 데이터베이스 설계

 

Section 88 인덱스 설계

 

1. 인덱스(Index) 개념

- 데이터 레코드를 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 데이터 구조이다.

- 인덱스는 데이터가 저장된 물리적 구조와 밀접한 관계가 있다.

- 인덱스는 레코드가 저장된 물리적 구조에 접근하는 방법을 제공한다.

- 인덱스를 통해서 파일의 레코드에 대한 액세스를 빠르게 수행할 수 있다.

- 레코드의 삽입과 삭제가 수시로 일어나는 경우에는 인덱스의 개수를 최소화 하는 것이 효율적이다.

- 인덱스가 없으면 특정한 값을 찾기 위해 모든 데이터 페이지를 확인하는 TABLE SCAN이 발생한다.

- 기본키를 위한 인덱스를 기본 인덱스라 하고, 기본 인덱스가 아닌 인덱스들을 보조 인덱스라 한다. 대부분의 관계형 데이터베이스 관리 시스템에서는 모든 기본키에 대해서 자동적으로 기본 인덱스를 생성한다.

- 레코드의 물리적 순서가 인덱스의 엔트리 순서와 일치하게 유지되도록 구성되는 인덱스를 클러스터드(Clustered) 인덱스라고 한다.

- 인덱스는 인덱스를 구성하는 구조나 특징에 따라 트리 기반 인덱스, 비트맵 인덱스, 함수 기반 인덱스, 비트맵 조인 인덱스, 도메인 인덱스 등으로 분류된다.

 

※ 클러스터드 인덱스 / 넌클러스터드 인덱스

클러스터드 인덱스

- 인덱스 키의 순서에 따라 데이터가 정렬되어 저장되는 방식이다.

- 실제 데이터가 순서대로 저장되어 있어 인덱스를 검색하지 않아도 원하는 데이터를 빠르게 찾을 수 있다.

- 데이터 삽입, 삭제 발생 시 순서를 유지하기 위해 데이터를 재정렬해야 한다.

- 한 개의 릴레이션에 하나의 인덱스만 생성할 수 있다.

 

넌클러스터드 인덱스

- 인덱스의 키 값만 정렬되어 있을 뿐 실제 데이터는 정렬되지 않는 방식이다.

- 데이터를 검색하기 위해서는 먼저 인덱스를 검색하여 실제 데이터 위치를 확인해야 하므로 클러스터드 인덱스에 비해 검색 속도가 떨어진다.

- 한 개의 릴레이션에 여러 개의 인덱스를 만들 수 있다.

 

2. 트리 기반 인덱스

- 인덱스를 저장하는 블록들이 트리 구조를 이루고 있는 것으로, 상용 DBMS에서는 트리 구조 기반의 B+ 트리 인덱스를 주로 활용한다.

 

B 트리 인덱스

- 일반적으로 사용되는 인덱스 방식으로, 루트 노드에서 하위 노드로 키 값의 크기를 비교해 나가면서 단말 노드에서 찾고자 하는 데이터를 검색한다.

- 키 값과 레코드를 가리키는 포인터들이 트리 노드에 오름차순으로 저장된다.

- 모든 리프 노드는 같은 레벨에 있다.

 

B+ 트리 인덱스

- B+ 트리는 B트리의 변형으로 단말 노드가 아닌 노드로 구성된 인덱스 세트와 단말 노드로만 구성된 순차 세트로 구분된다.

- 인덱스 세트에 있는 노드들은 단말 노드에 있는 키 값을 찾아갈 수 있는 경로로만 제공되며, 순차 세트에 있는 단말 노드가 해당 데이터 레코드의 주소를 가리킨다.

- 인덱스 세트에 있는 모든 키 값이 단말 노드에 다시 나타나므로 단말 노드만을 이용한 순차 처리가 가능하다.

 

3. 비트맵 인덱스

- 인덱스 컬럼의 데이터를 Bit 값인 0 또는 1로 변환하여 인덱스 키로 사용하는 방법이다.

- 비트맵 인덱스의 목적은 키 값을 포함하는 로우(Row)의 주소를 제공하는 것이다.

- 비트맵 인덱스는 분포도가 좋은 컬럼에 적합하며, 성능 향상 효과를 어등ㄹ 수 있다.

- 데이터가 Bit로 구성되어 있기 때문에 효율적인 논리 연산이 가능하고 저장 공간이 작다.

- 비트맵 인덱스는 다중 조건을 만족하는 튜플의 개수 계산에 적합하다.

- 비트맵 인덱스는 동일한 값이 반복되는 경우가 많아 압축 효율이 좋다.

4. 함수 기반 인덱스

- 컬럼의 값 대신 컬럼에 특정 함수나 수식을 적용하여 산출된 값을 사용하는 것으로, B+ 트리 인덱스 또는 비트맵 인덱스를 생성하여 사용한다.

- 함수 기반 인덱스는 데이터를 입력하거나 수정할 때 함수를 적용해야 하므로 부하가 발생할 수 있다.

- 사용된 함수가 사용자 정의 함수일 경우 시스템 함수보다 부하가 더 크다.

- 함수 기반 인덱스는 대소문자, 띄어쓰기 등에 상관없이 조회할 때 유용하게 사용된다.

- 적용 가능한 함수의 종류 : 산술식(Arithmetic Expression), 사용자 저으이 함수, PL/SQL Fucntion, SQL Function, Package, C Callot 

 

5. 비트맵 조인 인덱스

- 비트맵 조인 인덱스는 다수의 조인된 객체로 구성된 인덱스로, 단일 객체로 구성된 일반적인 인덱스와 액세스 방법이 다르다.

- 비트맵 조인 인덱스는 비트맵 인덱스와 물리적 구조가 동일하다.

 

6. 도메인 인덱스

- 개발자가 필요한 인덱스를 직접 만들어 사용하는 것으로, 확장형 인덱스라고도 한다.

- 개발자가 필요에 의해 만들었지만 프로그램에서 제공하는 인덱스처럼 사용할 수도 있다.

 

7. 인덱스 설계

- 인덱스를 설계할 때는 분명하게 드러난 컬럼에 대해 기본적인 인덱스를 먼저 저장한 후 개발 단계에서 필요한 인덱스의 설계를 반복적으로 진행한다.

인덱스 설계 순서

① 인덱스의 대상 테이블이나 컬럼 등을 선정한다.

② 인덱스의 효율성을 검토하여 인덱스 최적화를 수행한다.

③ 인덱스 정의서를 작성한다.

 

8. 인덱스 대상 테이블 선정 기준

- MULTI BLOCK READ 수에 따라 판단 (테이블 액세스시 메모리에 한 번에 읽어 들일 수 있는 블록의 수)

- 랜덤 액세스가 빈번한 테이블

- 특정 범위나 특정 순서로 데이터 조회가 필요한 테이블

- 다른 테이블과 순차적 조인이 발생되는 테이블

 

9. 인덱스 대상 컬럼 선정 기준

- 인덱스 컬럼의 분포도가 10~15% 이내인 컬럼

(분포도 = (컬럼값의 평균 Row / 테이블의 총 Row )) X 100

- 분포도가 10~15% 이상이어도 부분 처리를 목적으로 하는 컬럼

- 입∙출력 장표 등에서 조회 및 출력 조건으로 사용되는 컬럼

- 인덱스가 자동 생성되는 기본키와 Unique 키 제약 조거을 사용한 컬럼

- 가능한 한 수정이 빈번하지 않은 클럽

- ORDER BY, GROUP BY, UNION이 빈번한 컬럼

- 분포도가 좁은 컬럼은 단독 인덱스로 생성

- 인덱스들이 자주 조합되어 사용되는 경우 하나의 결합 인덱스로 생성

 

10. 인덱스 설계 시 고려사항

- 새로 추가되는 인덱스는 기존 액세스 경로에 영향을 미칠 수 있다.

- 인덱스를 지나치게 많이 만들면 오버헤드가 발생한다.

- 넓은 범위를 인덱스로 처리하면 많은 오버헤드가 발생한다.

- 인덱스를 만들면 추가적인 저장 공간이 필요하다.

- 인덱스와 테이블 데이터의 저장 공간이 분리되도록 설계한다.

 

Section 89 (View) 설계

1. (View)의 개요

- 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블이다.

- 뷰는 저장장치 내에 물리적으로 존재하지 않지만, 사용자에게는 있는 것처럼 간주된다.

- 뷰는 데이터 보정 작업, 처리 과정 시험 등 임시적인 작업을 위한 용도로 활용된다.

- 뷰는 조인문의 사용 최소화로 사용상의 편의성을 최대화한다.

- 뷰를 생서하면 뷰 정의가 시스템 내에 저장되었다가 생성된 뷰 이름을 질의어에서 사용할 경우 질의어가 실행될 때 뷰에 정의된 기본 테이블로 대체되어 기본 테이블에 대해 실행된다.

 

2. 뷰의 특징

- 뷰는 기본 테이블로부터 유도된 테이블이기 때문에 기본 테이블과 같은 형태의 구조를 사용하며, 조작도 기본 테이블과 거의 같다.

- 뷰는 가상 테이블이기 때문에 물리적으로 구현되어 있지 않다.

- 데이터의 논리적 독립성을 제공할 수 있다.

- 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해진다.

- 뷰를 통해서만 데이터에 접근하게 되면 뷰에 나타나지 않은 데이터를 안전하게 보호하는 효율적인 기법으로 사용할 수 있다.

- 기본 테이블의 기본키를 포함한 속성 집합으로 뷰를 구성해야만 삽입, 삭제, 갱신 연산이 가능하다.

- 일단 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다.

- 뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제된다.

 

3. 뷰의 장•단점

장점

- 논리적 데이터 독립성을 제공한다.

- 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원해 준다.

- 사용자의 데이터 관리를 간단하게 해준다.

- 접근 제어를 통한 자동 보안이 제공된다.

 

단점

- 독립적인 인덱스를 가질 수 없다.

- 뷰의 정의를 변경할 수 없다.

- 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약이 따른다.

 

4. 뷰 설계 순서

① 대상 테이블을 선정한다.

- 외부 시스템과 인터페이스에 관여하는 테이블

- CRUD 매트릭스를 통해 여러 테이블이 동시에 자주 조인되어 접근되는 테이블

- SQL문 작성 시 거의 모든 문장에서 인라인 뷰 방식으로 접근되는 테이블

② 대상 컬럼을 선정한다.

- 보안을 유지해야 하는 컬럼은 주의하여 선별한다.

③ 정의서를 작성한다.

5. 뷰 설계 시 고려 사항

- 테이블 구조가 단순화 될 수 있도록 반복적으로 조인을 설정하여 사용하거나 동일한 조건절을 사용하는 테이블을 뷰로 생성한다.

- 동일한 테이블이라도 업무에 따라 테이블을 이용하는 부분이 달라질 수 있으므로 사용할 데이터를 다양한 관점에서 제시해야 한다.

- 데이터의 보안 유지를 고려하여 설계한다.

 

Section90 클러스터 설계

1. 클러스터(Cluster)의 개요

- 클러스터는 데이터 저장 시 데이터 액세스 효율을 향상시키기 위해 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 물리적 저장 방법이다.

- 클러스터링키로 지정ㄷ왼 컬럼 값의 순서대로 저장되고, 여러 개의 테이블이 하나의 클러스터에 저장된다.

 

2. 클러스터의 특징

- 클러스터링 된 테이블은 데이터 조회 속도는 향상시키지만 데이터 입력, 수정, 삭제에 대한 성능은 저하시킨다.

- 클러스터는 데이터의 분포도가 넓을수록 유리하다.

- 데이터 분포도가 넓은 테이블을 클러스터링 하면 저장 공간을 절약할 수 있다.

- 클러스터링된 테이블은 클러스터링키 열을 공유하므로 저장 공간이 줄어든다.

- 대용량을 처리하는 트랜잭션은 전체 테이블을 스캔하는 일이 자주 발생하므로 클러스터링을 하지 않는 것이 좋다.

- 처리 범위가 넓은 경우에는 단일 테이블 클러스터링을, 조인이 많이 발생하는 경우에는 다중 테이블 클러스터링을 사용한다.

- 파티셔닝된 테이블에는 클러스터링을 할 수 없다.

- 클러스터링을 하면 비슷한 데이터가 동일한 데이터 블록에 저장되기 때문에 디스크 I/O가 줄어든다.

- 클러스터링된 테이블에 클러스터드 인덱스를 생성하면 접근 성능이 향상된다.

 

3. 클러스터 대상 테이블

- 분포도가 넓은 테이블

- 대량의 범위를 자주 조회하는 테이블

- 입력, 수정, 삭제가 자주 발생하지 않는 테이블

- 자주 조인되어 사용되는 테이블

- ORDER BY, GROUP BY, UNION이 빈번한 테이블

 

Section 91 파티션 설계

1. 파티션의 개요

- 데이터베이스에서 파티션은 대용량의 테이블이나 인덱스를 작은 논리적 단위인 파티션으로 나누는 것을 말한다.

- 대용량 DB의 경우 중요한 몇 개의 테이블에만 집중되어 데이터가 증가되므로, 이런 테이블들을 작은 단위로 나눠 분산시키면 성능 저하를 방지할 뿐만 아니라 데이터 관리도 쉬워진다.

- 테이블이나 인덱스를 파티셔닝 하면 파티션키 또는 인덱스키에 따라 물리적으로 별도의 공간에 데이터가 저장된다.

- 데이터 처리는 테이블 단위로 이뤄지고, 데이터 저장은 파티션별로 수행된다.

 

2. 파티션의 장•단점

장점

- 데이터의 접근 시 액세스 범위를 줄여 쿼리 성능이 향상된다.

- 파티션별로 데이터가 분산되어 저장되므로 디스크의 성능이 향상된다.

- 파티션별로 백업 및 복구를 수행하므로 속도가 빠르다.

- 시스템 장애 시 데이터 손상 정도를 최소화할 수 있다.

- 데이터 가용성이 향상된다.

- 파티션 단위로 입•출력을 분산시킬 수 있다.

 

단점

- 하나의 테이블을 세분화하여 관리하므로 세심한 관리가 요구된다.

- 테이블간 조인에 대한 비용이 증가한다.

- 용량이 작은 테이블에 파티셔닝을 수행하면 오히려 성능이 저하된다.

 

3. 파티션의 종류

- 파티션의 종류는 파티셔닝 방식에 따라 범위 분할, 해시 분할, 조합 분할 등으로 나뉜다.

범위 분할

- 지정한 열의 값을 기준을 ㅗ분할한다.

해시 분할

- 해시 함수를 적용한 결과 값에 따라 데이터를 분할한다.

- 특정 파티션에 데이터가 집중되는 범위 분할의 단점을 보완한 것으로, 데이터를 고르체 분산할 때 유용하다.

- 특정 데이터가 어디에 있는지 판단할 수 없다.

- 고객번호, 주민번호 등과 같이 데이터가 고른 컬럼에 효과적이다.

 

조합 분할

- 범위 분할로 분할한 다음 해시 함수를 적용하여 다시 분할하는 방식이다.

- 범위 분할한 파티션이 너무 커서 관리가 어려울 때 유용하다.

 

4. 파티션키 선정 시 고려 사항

- 파티션키는 테이블 접근 유형에 따라 파티셔닝이 이뤄지도록 선정한다.

- 데이터 관리의 용이성을 위해 이력성 데이터는 파티션 생성주기와 소멸주기를 일치시켜야 한다.

- 매일 생성되는 날짜 컬럼, 백업의 기준이 되는 날짜 컬럼, 파티션 간 이동이 없는 컬럼, I/O 병목을 줄일 수 있는 데이터 분포가 양호한 컬럼 등을 파티션키로 선정한다.

 

5. 인덱스 파티션

- 인덱스 파티션은 파티션된 테이블의 데이터를 관리하기 위해 인덱스를 나눈 것이다.

- 인덱스 파티션은 파티션된 테이블의 종속 여부에 따라 Local Partitioned Index Global Partitioned Index로 나뉜다.

Local Partitioned Index : 테이블 파티션과 인덱스 파티션이 1:1 대응되도록 파티셔닝한다.

 

Global Partitioned Index : 테이블 파티션과 인덱스 파티션이 독립적으로 구성되도록 파티셔닝한다.

- Local Partitioned Index Global Partitioned Index에 비해 데이터 관리가 쉽다.

 

- 인덱스 파티션은 인덱스 파티션키 컬럼의 위치에 따라 Prefixed Partitioned Index Non-prefixed Partitioned Index로 나뉜다.

Prefixed Partitioned Index :  인덱스 파티션키와 인덱스 첫 번째 칼럼이 같다.

Non-prefixed Partitioned Index :  인덱스 파티션키와 인덱스 첫 번째 칼럼이 다르다.

 

 

Section 93 분산 데이터베이스 설계

1. 분산 데이터베이스 정의

- 논리적으로는 하나의 시스템에 속하지만 물리적으로는 네트워크를 통해 연결된 여러 개 컴퓨터 사이트에 분산되어 있는 데이터베이스를 말한다.

- 분산 데이터베이스는 데이터의 처리나 이용이 많은 지역에 데이터베이스를 위치시킴으로써 데이터의 처리가 가능한 해당 지역에서 해결될 수 있도록 한다.

 

2. 분산 데이터베이스의 구성 요소

분산 처리기 : 자체적으로 처리 능력을 가지며, 지리적으로 분산되어 있는 컴퓨터 시스템을 말한다.

분산 데이터베이스 : 지리적으로 분산되어 있는 데이터베이스로서 해당 지역의 특성에 맞게 데이터베이스가 구성된다.

통신 네트워크 : 분산 처리기들을 통신망으로 연결하여 논리적으로 하나의 시스템처럼 작동할 수 있도록 하는 통신 네트워크를 말한다.

 

3. 분산 데이터베이스 설계 시 고려 사항

- 작업부하의 노드별 분산 정책

- 지역의 자치성 보장 정책

- 데이터의 일관성 정책

- 사이트나 회선의 고장으로부터의 회복 기능

- 통신 네트워크를 통한 원격 접근 기능

 

4. 분산 데이터베이스의 목표

- 위치 투명성(Location Transparency) : 액세스하려는 데이터베이스의 실제 위치를 알 필요 없이 단지 데이터베이스의 논리적인 명칭만으로 액세스할 수 있다.

- 중복 투명성(Replication Transparency) : 동일 데이터가 여러 곳에 중복되어 있어라도 사용자는 마치 하나의 데이터만 존재하는 것처럼 사용하고, 시스템은 자동으로 여러 자료에 대한 작업을 수행한다.

- 병행 투명성(Concurrency Transparency) : 분산 데이터베이스와 관련된 다수의 트랜잭션들이 동시에 실현되더라도 그 트랜잭션의 결과는 영향을 받지 않는다.

- 장애 투명성(Failure Transparency) : 트랜잭션, DBMS, 네트워크, 컴퓨터 장애에도 불구하고 트랜잭션을 정확하게 처리한다.

 

5. 분산 데이터베이스의 장•단점

장점

- 지역 자치성이 높다.

- 자료의 공유성이 향상된다.

- 분산 제어가 가능하다.

- 시스템 성능이 향상된다.

- 중앙 컴퓨터의 장애가 전체 시스템에 영향을 끼치지 않는다.

- 효율성와 융통성이 높다.

- 신뢰성 및 가용성이 높다.

- 점진적 시스템 용량 확장이 용이하다.

 

단점

- DBMS가 수행할 기능이 복잡하다.

- 데이터베이스 설계가 어렵다.

- 소프트웨어 개발 비용이 증가한다.

- 처리 비용이 증가한다.

- 잠재적 오류가 증가한다.

 

6. 분산 데이터베이스 설계

- 분산 데이터베이스 설계는 애플리케이션이나 사용자가 분산되어 저장된 데이터에 접근하게 하는 것을 목적으로 한다.

- 잘못 설계된 분산 데이터베이스는 복잡성 증가, 응답 속도 저하, 비용 증가 등의 문제가 발생한다.

- 분산 데이터베이스의 설게는 전역 관계망을 논리적 측면에서 소규모 단위로 분할한 후, 분할된 결과를 복수의 노드에 할당하는 과정으로 진행된다. 노드에 할당된 소규모 단위를 분할(Fragment)이라 부른다.

- 분산 설계 방법에는 테이블 위치 분산, 분할(Fragmentation), 할당(Allocation)이 있다.

 

7. 테이블 위치 분산

- 데이터베이스의 테이블을 각기 다른 서버에 분산시켜 배치하는 방법을 의미한다.

- 테이블 위치를 분산할 때는 테이블의 구조를 변경하지 않으며, 다른 데이터베이스의 테이블과 중복되지 않게 배치한다.

- 데이터베이스의 테이블을 각각 다른 위치에 배치하려면 해당 테이블들이 놓일 서버들을 미리 설정해야 한다.

 

8. 분할(Fragment)

- 분할은 테이블의 데이터를 분할시켜 분산시키는 것이다.

분할 규칙

- 완전성(Completeness) : 전체 데이터를 대상으로 분할해야 한다.

- 재구성(Reconstruction) : 분할된 데이터는 관계 연산을 활용하여 본래의 데이터를 재구성할 수 있어야 한다.

- 상호 중첩배제(Dis-jointness) : 분할된 데이터는 서로 다른 분할의 항목에 속하지 않아야 한다.

 

주요 분할 방법

- 수평 분할 : 특정 속성의 값을 기준으로 행(Row) 단위로 분할

- 수직 분할 : 데이터 컬럼(속성) 단위로 분할

 

9. 할당(Allocation)

- 할당은 동일한 분할을 여러 개의 서버에 생성하는 분산 방법으로, 중복이 없는 할당(Allocation)과 중복이 있는 할당(Allocation)으로 나뉜다.

비중복 할당 방식

- 최적의 노드를 선택해서 분산 데이터베이스의 단일 노드에서만 분할이 존재하도록 하는 방식이다.

- 일반적으로 애플리케이션에는 릴레이션을 배타적 분할로 분리하기 힘든 요구가 포함되므로 분할된 테이블 간의 의존성은 무시되고 비용 증가, 성능 저하 등의 문제가 발생할 수 있다.

- 중복 할당 방식 : 동일한 테이블을 다른 서버에 복제하는 방식으로, 일부만 복제하는 부분 복제와 전체를 복제하는 완전 복제가 있다.

 

Section 96 데이터베이스 보안 -접근 통제

1. 접근통제

- 데이터가 저장된 객체와 이를 사용하려는 주체 사이의 정보 흐름을 제한하는 것.

- 접근 통제는 데이터에 대해 다음과 같은 통제를 함으로써 자원의 불법적인 접근 및 파괴를 예방한다.

- 비인가 사용자의 접근 감시

- 접근 요구자의 사용자 식별

- 접근 요구의 정당성 확인 및 기록

- 보안 정책에 근거한 접근의 승인 및 거부 등

- 접근 통제 기술에는 임의 접근통제(DAC), 강제 접근통제(MAC)가 있다.

 

임의 접근통제(Discretioanry Access Control)

- 임의 접근통제는 데이터에 접근하는 사용자의 신원에 따라 접근 권한을 부여하는 방식이다.

- 통제 권한이 주체에 있어 주체가 접근통제 권한을 지정하고 제어할 수 있다.

- 일반적으로 특정 객체에 대한 조작권한은 데이터베이스 관리 시스템으로부터 부여받지만 임의 접근 통제에서는 객체를 생성한 사용자가 생성된 객체에 대한 모든 권한을 부여받고, 부여된 권한을 다시 사용자에게 허가할 수도 있다.

- 임의 접근통제에 사용되는 SQL 명령어에는 GRANT REVOKE가 있다.

 

강제 접근통제(Mandatory Access Control) :

- 강제 접근통제는 주체와 객체의 등급을 비교하여 접근 권한을 부여하는 방식이다.

- 3가자 접근통제 권한을 지정한다.

- 데이터베이스 객체별로 보안 등급을 부여할 수 있고, 사용자별로 인가 등급을 부여할 수 있다.

- 주체는 자신보다 보안 등급이 높은 객체에 대해 읽기, 수정, 등록이 모두 불가능하고, 보안 등급이 같은 객체에 대해서는 읽기, 수정, 등록이 가능하고, 보안 등급이 낮은 객체는 읽기가 가능하다.

 

- 접근 통제의 3요소는 접근통제 정책, 접근통제 매커니즘, 접근통제 보안모델이다.

 

2. 접근통제 정책

- 어떤 주체가(Who) 언제(When), 어디서(Where), 어떤 객체(what)에게, 어떤 행위(How)에 대한 허용 여부를 정의하는 것으로, 신분 기반 정책, 규칙 기반 정책, 역할 기반 정책이 있다.

 

신분 기반 정책

- 주체나 그룹의 신분에 근거하여 객체의 접근을 제한하는 방법으로, IBP GBP가 있다.

IBP(Individual-Based Policy) : 최소 권한 정책으로, 단일 주체에 하나의 객체에 대한 허가를 부여한다.

GBP(Group-Based Policy) : 복수 주체에 하나의 객체에 대한 허가를 부여한다.

 

규칙 기반 정책

- 주체가 갖는 권한에 근거하여 객체의 접근을 제한하는 방법으로, MLP CBP가 있다.

MLP(Multi-Level Policy) : 사용자 및 객체별로 지정된 기밀 분류에 따른 정책

CBP(Compartment-Based Policy) : 집단별로 지정된 기밀 허가에 따른 정ㅇ책

 

역할 기반 정책

- GBP의 변형된 정책으로, 주체의 신분이 아니라 주체가 맡은 역할에 근거하여 객체의 접근을 제한하는 방법이다.

 

3. 접근통제 매커니즘

- 정의도니 접근통제 정책을 구현하는 기술적인 방법으로, 접근통제 목록, 능력 리스트, 보안 등급, 패스워드, 암호화 등이 있다.

- 접근통제 목록(Access Control List): 객체를 기준으로 특정 객체에 대해 어떤 주체가 어떤 행위를 할 수 있는지를 기록한 목록이다.

- 능력 리스트(Capability List) : 주체를 기준으로 주체에게 허가된 자원 및 권한을 기록한 목록이다.

- 보안 등급(Security Level) : 주체나 객체 등에 부여된 보안 속성의 집합으로, 이 등급으 기반으로 접근 승인 여부가 결정된다.

- 패스워드 : 주체가 자신임을 증명할 때 사용하는 인증 방법이다.

- 암호화 : 데이터를 보낼 때 지정된 수신자 이외에는 내용을 알 수 없도록 평문을 암호문으로 변환하는 것으로, 무단 도용을 방지하기 위해 주로 사용된다.

 

4. 접근통제 보안 모델

- 보안 정책을 구현하기 위한 정형화 모델로, 기밀성 모델, 무결성 모델, 접근통제 모델이 있다.

기밀성 모델

- 군사적인 목적으로 개발된 최초의 수학적 모델로, 기밀성 보장이 최우선인 모델이다.

- 군대 시스템 등 특수한 환경에서 주로 사용된다.

제약 조건

- 단순 보안 규칙: 주체는 자신보다 높은 등급의 객체를 읽을 수 없다.

- -보안 규칙 : 주체는 자신보다 낮은 등급의 객체에 정보를 쓸 수 없다.

- 강한 ★ 보안 규칙 : 주체는 자신과 등급이 다른 객체를 읽거나 쓸 수 없다.

 

무결성 모델

- 기밀성 모델에서 발생하는 불법적인 정보 변경을 방지하기 위해 무결성을 기반으로 개발된 모델이다.

- 데이터 일관성 유지에 중점을 두어 개발되었다.

- 기밀성 모델과 동일하게 주체 및 객체의 보안 등급을 기반으로 한다.

제약 조건

- 단순 무결성 규칙 : 주체는 자신보다 낮은 등급의 객체를 읽을 수 없다.

- -무결성 규칙 : 주체는 자신보다 높은 등급의 객체에 정보를 쓸 수 없다.

 

접근통제 모델

- 접근통제 매커니즘을 보안 모델로 발전시킨 것으로, 대표적으로 접근통제 행렬(Access Control Matrix)이 있다.

접근통제 행렬

- 임의적인 접근통제를 관리하기 위한 보안 모델로, 행은 주체, 열은 객체 즉, 행과 열로 주체와 객체의 권한 유형을 나타낸다.

 : 주체로서 객체에 접근을 시도하는 사용자이다.

 : 객체로서 접근통제가 이뤄지는 테이블, 컬럼, 뷰 등과 같은 데이터베이스의 개체이다.

규칙 : 주체가 객체에 대하여 수행하는 입력, 수정, 삭제 등의 데이터베이스에 대한 조작이다.

 

5. 접근통제 조건

- 접근통제 매커니즘의 취약점을 보완하기 위해 접근통제 정책에 부가하여 적용할 수 있는 조건이다.

- 값 종속 통제(Value-Dependent Control) : 일반적으론느 객체에 저장된 값에 상관없이 접근통제를 동일하게 허용하지만 객체에 저장된 값에 따라 다르게 접근통제를 허용해야 하는 경우에 사용한다.

 

- 다중 사용자 통제(Multi-User Control) : 지정된 객체에 다수의 사용자가 동시에 접근을 요구하는 경우에 사용된다.

 

- 컨텍스트 기반 통제(Context-Based Control) : 특정 시간, 네트워크 주소, 접근 경로, 인증 수준 등에 근거하여 접근을 제어하는 방법으로, 다른 보안 정책과 결합하여 보안 시스템의 취약점을 보완할 때 사용된다.

 

6. 감사 추적

- 사용자나 애플리케이션이 데이터베이스에 접근하여 수행한 모든 활동을 기록하는 기능이다.

- 감사 추적은 오류가 발생한 데이터베이스를 복구하거나 부적절한 데이터 조작을 파악하기 위해 사용된다.

- 감사 추적 시 실행한 프로그램, 사용자, 날짜 및 시간, 접근한 데이터의 이전 값 및 이후 값 등이 저장된다.

 

Section 99 논리 데이터 모델의 물리 데이터 모델 변환

1. 테이블(Table)

- 테이블은 데이터를 저장하는 데이터베이스의 가장 기본적인 오브젝트이다.

- 테이블은 컬럼(Column, )과 로우(Row, )로 구성되며, 컬럼에는 지정된 유형에 따라 데이터가 저장된다.

- 테이블의 구성 요소

로우(Row) : 튜플 인스턴스, 어커런스라고도 한다.

컬럼(Column) : 각 속성 항목에 대한 값을 저장한다.

기본키(Primary key) :기본키는 후보키 중에서 선택한 주키이며 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다.

외래키(Foreign key) : 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합을 의미한다. 한 릴레이션에 속한 속성 A와 참조 릴레이션의 기본키인 B가 동일한 도메인 상에서 정의되었을 때의 속성 A를 외래키라고 한다.

 

2. 엔티티(Entity)를 테이블로 변환

- 논리 데이터 모델에서 정의된 엔티티를 물리 데이터 모델의 테이블로 변환하는 것이다.

- 엔티티를 테이블로 변환한 후 테이블 목록 정의서를 작성한다.

- 테이블 목록 정의서: 전체 테이블을 목록으로 요약 관리하는 문서로, 테이블 목록이라고도 한다.

 

엔티티  테이블

속성  컬럼

주 식별자  기본키

외부 식별자  외래키

관계  관계

 

변환 시 고려사항

- 일반적으론느 테이블과 엔티티 명칭은 동일하게 하는 것을 권고한다.

- 엔티티는 주로 한글명을 사용하지만 테이블은 소스 코드의 가독성을 위해 영문명을 사용한다.

- 메타 데이터 관리 시스템에 표준화된 용어가 있을 때는 메타에 등록된 단어를 사용하여 명명한다.

 

3. 슈퍼타입/서브타입을 테이블로 변환

- 논리 데이터 모델에서 이용되는 형태이므로 물리 데이터 모델을 설계할 때는 슈퍼타입/서브타입을 테이블로 변환해야 한다.

- 슈퍼타입/서브타입 모델을 테이블로 변환하는 방법에는 슈퍼타입 기준 테이블 변환, 서브타입 기준 테이블 변환, 개별타입 기준 테이블 변환이 있다.

슈퍼타입 기준 테이블 변환

- 서브타입을 슈퍼타입에 통합하여 하나의 테이블로 만드는 것

- 서브타입에 속성이나 관계가 적을 경우에 적용하는 방법으로, 하나로 통합된 테이블에는 서브타입의 모든 속성이 포함되어야 한다.

장점

- 데이터 액세스가 상대적으로 용이하다.

- 뷰를 이용하여 각각의 서브타입만을 액세스하거나 수정할 수 있다.

- 서브타입 구분이 없는 임의 집합에 대한 처리가 용이하다.

- 여러 테이블을 조인하지 않아도 되므로 수행 속도가 빨라진다.

- SQL 문장 구성이 단순해진다.

단점

- 테이블의 컬럼이 증가하므로 디스크 저장 공간이 증가한다.

- 처리마다 서브타입에 대한 구분(TYPE)이 필요한 경우가 많이 발생한다.

- 인덱스 크기의 증가로 인덱스 효율이 떨어진다.

 

서브타입 기준 테이블 변환

- 슈퍼타입 속성들을 각각의 서브타입에 추가하여 서브타입을을 개별적인 테이블로 만드는 것이다.

- 서브타입 속성이나 관계가 많이 포함된 경우 작용한다.

장점

- 각 서브타입 속성들의 선택 사양이 명확한 경우에 유리하다.

- 처리할 때마다 서브타입 유형을 구분할 필요가 없다.

- 여러 개의 테이블로 통합하므로 테이블당 크기가 감소하여 전체 테이블 스캔 시 유리하다.

 

단점

- 수행 속도가 감소할 수 있다.

- 복잡한 처리를 하는 SQL의 통합이 어렵다.

- 부분 범위에 대한 처리가 곤란해진다.

- 여러 테이블을 통합한 뷰는 조회만 가능하다.

- UID(Unique Identifier, 식별자)의 유지 관리가 어렵다.

 

개별타입 기준 테이블 변환

- 슈퍼타입과 서브타입들을 각각의 개별적인 테이블로 변환하는 것이다.

- 슈퍼타입과 서브타입들은 각각 1:1관계가 형성된다.

개별타입 기준 테이블 변환을 적용하는경우

- 전체 데이터에 대한 처리가 빈번한 경우

- 서브타입의 처리가 대부분 독립적으로 발생하는 경우

- 통합하는 테이블의 컬럼 수가 많은 경우

- 서브타입의 컬럼 수가 많은 경우

- 트랜잭션이 주로 슈퍼타입에서 발생하는 경우

- 슈퍼타입의 처리 범위가 넓고 빈번하게 발생하여 단일 테이블 클러스터링이 필요한 경우

 

장점

- 저장 공간이 상대적으로 적다

- 슈퍼타입 또는 서브타입 각각의 테이블에 속한 정보만 조회하는 경우 문장 작성이 용이하다.

 

단점

- 슈퍼타입 또는 서브타입의 정보를 같이 처리하면 항상 조인이 발생하여 성능이 저하된다.

 

4. 속성을 컬럼으로 변환

- 논리 데이터 모델에서 정의한 속성을 물리 데이터 모델의 컬럼으로 변환한다.

일반 속성 변환

- 속성과 컬럼은 명칭이 반드시 일치할 필요는 없으나, 개발자와 사용자 간 의사소통을 위하여 가능한 한 표준화된 약어를 사용하여 일치시키는 것이 좋다.

- 칼럼명은 SQL의 예약어 사용을 피한다.

- 칼럼명은 SQL 가독성을 높이기 위해 가능한 한 짧게 지정한다.

- 복합 단어를 칼럼명으로 사용할 때는 미리 정의된 표준을 따른다.

- 테이블의 컬럼을 정의한 후에는 한 로우(Row)에 해당하는 샘플 데이터를 작성하여 컬럼의 정확성을 검증한다.

 

5. 관계를 외래키로 변환

- 논리 데이터 모델에서 정의된 관계는 기본키와 이를 참조하는 외래키로 변환한다.

1:1 관계

- 개체 A의 기본키를 개체 B의 외래키로 추가하거나 개체 B의 기본키를 개체 A의 외래키로 추가하여 표현한다.

 

1:M 관계

- 개체 A의 기본키를 개체 B의 외래키로 추가하여 표현하거나 별도의 테이블로 표현한다.

 

N:M 관계

- 릴레이션 A B의 기본키를 모두 포함한 별도의 릴레이션으로 표현한다.

이 때 생성된 별도의 릴레이션을 교차 릴레이션 또는 교차 엔티티라고 한다.

 

1:M 순환 관계

- 개체 A에 개체 A의 기본키를 참조하는 외래키 컬럼을 추가하여 표현한다.

 

6. 관리 목적의 테이블/컬럼 추가

- 논리 데이터 모델에는 존재하지 않는 테이블이나 컬럼을 데이터베이스의 관리 혹은 데이터베이스를 이용하는 프로그래밍의 수행 속도를 향상시키기 위해 물리 데이터 모델에 추가할 수 있다.

 

7. 데이터 타입 선택

- 논리 데이터 모델에서 정의된 논리적인 데이터 타입을 물리적인 DBMS의 물리적 특성과 성능을 고려하여 최적의 데이터 타입과 데이터의 최대 길이를 선택한다.

- 주요 타입에는 문자 타입, 숫자 타입, 날짜 타입이 있다.

  Comments,     Trackbacks
정보처리기사 3과목 데이터베이스 구축 1장 논리 데이터베이스 설계 요점 정리

1장 논리 데이터베이스 설계

 

Section 70 데이터베이스 설계

 

1. 데이터베이스 설계의 개념

- 데이터베이스 설계란 사용자의 요구를 분석하여 그것들을 컴퓨터에 저장할 수 있는 데이터베이스의 구조에 맞게 변형한 후 특정 DBMS로 데이터베이스를 구현하여 일반 사용자들이 사용하게 하는 것이다.

2. 데이터베이스 설계 시 고려사항

- 무결성 : 삽입, 삭제, 갱신 등의 연산 후에도 데이터베이스에 저장된 데이터가 정해진 제약 조건을 항상 만족해야 한다.

- 일관성 : 데이터베이스에 저장된 데이터들 사이나, 특정 질의에 대한 응답이 처음부터 끝까지 변함없이 일정해야 한다.

- 회복 : 시스템에 장애가 발생했을 때 장애 발생 직전 상태로 복구할 수 있어야 한다.

- 보안 : 불법적인 데이터의 노출 또는 변경이나 손실로부터 보호할 수 있어야 한다.

- 효율성 : 응답시간의 단축, 시스템의 생산성, 저장 공간의 최적화 등이 가능해야 한다.

- 데이터베이스 확장 : 데이터베이스 운영에 영향을 주지 않으면서 지속적으로 데이터를 추가할 수 있어야 한다.

 

3. 데이터베이스 설계 순서

요구 조건 분석 => 개념적 설계 => 논리적 설계 => 물리적 설계 => 구현

 

4. 요구조건 분석

- 데이터베이스를 사용할 사람들로부터 필요한 용도를 파악하는 것.

- 데이터베이스 사용자에 따른 수행 업무와 필요한 데이터의 종류, 용도, 처리 형태, 흐름, 제약 조건 등을 수집한다.

- 수집된 정보를 바탕으로 요구 조건 명세를 작성한다.

 

5. 개념적 설계(정보 모델링, 개념화)

- 정보의 구조를 얻기 위하여 현실 세계의 무한성과 계속성을 이해하고, 다른 사람과 통신하기 위하여 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정이다.

- 개념적 설계 단계에서는 개념 스키마 모델링과 트랜잭션 모델링을 병행 수행한다.

- 개념적 설계 단계에서는 요구 분석 단계에서 나온 결과인 요구 조건 명세를 DBMS에 독립적인 E-R 다이어그램으로 작성한다.

- DBMS에 독립적인 개념 스키마를 설계한다.

 

6. 논리적 설계(데이터 모델링)

- 현실 세계에서 발생하는 자료를 컴퓨터가 이해하고 처리할 수 있는 물리적 저장장치에 저장할 수 있도록 변환하기 위해 특정 DBMS가 지원하는 논리적 자료 구조로 변환시키는 과정이다.

- 개념 세계의 데이터를 필드로 기술된 데이터 타입과 이 데이터 타입들 간의 관계로 표현되는 논리적 구조의 데이터로 모델화한다.

- 개념적 설계가 개념 스키마를 설계하는 단계라면 논리적 설계에서는 개념 스키마를 평가 및 정제하고 DBMS에 따라 서로 다른 논리적 스키마를 설계하는 단계이다.

- 트랜잭션의 인터페이스를 설계한다.

- 관계형 데이터베이스라면 테이블을 설계하는 단계이다.

 

7. 물리적 설계(데이터 구조화)

- 논리적 설계 단계에서 논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 과정이다.

- 물리적 설계 단계에서는 다양한 데이터베이스 응용에 대해 처리 성능을 얻기 위해 데이터베이스 파일의 저장 구조 및 액세스 경로를 결정한다.

- 저장 레코드의 형식, 순서, 접근 경로와 같은 정보를 사용하여 데이터가 컴퓨터에 저장되는 방법을 묘사한다.

 

8. 데이터베이스 구현

- 논리적 설계 단계와 물리적 설계 단계에서 도출된 데이터베이스 스키마를 파일로 생성하는 과정이다.

- 사용하려는 특정 DBMS DDL(데이터 정의어)을 이용하여 데이터베이스 스키마를 기술한 후 컴파일하여 빈 데이터베이스 파일을 생성한다.

- 생성된 빈 데이터베이스 파일에 입력한다.

- 응용 프로그램을 위한 트랜잭션을 작성한다.

- 데이터베이스 접근을 위한 응용 프로그램을 작성한다.

Section 72 데이터 모델의 구성 요소  개체(Entity)

1. 개체의 정의 및 특징

- 개체(Entity)는 데이터베이스에 표현하려는 것으로, 사람이 생각하는 개념이나 정보단위 같은 현실 세계의 대상체이다.

- 개체는 실세계에 독립적으로 존재하는 유형, 무형의 정보로서 서로 연관된 몇 개의 속성으로 구성된다.

- 파일 시스템의 레코드에 대응하는 것으로 어떤 정보를 제공하는 역할을 수행한다.

- 영속적(Persistence)으로 존재하는 개체의 집합이다.

- 독립적으로 존재하거나 그 자체로서도 구별이 가능하다.

- 유일한 식별자(Unique Identifier)에 의해 식별이 가능하다.

- 개체는 업무 프로세스에 의해 이용된다.

- 다른 개체와 하나 이상의 관계(Relationship)가 있다.

 

2. 개체 선정 방법

- 업무 분석에 관한 내용을 구체적으로 설명한 업무 기술서를 이용한다.

- 실제 업무를 담당하고 있는 담당자와 인터뷰를 한다.

- 업무 기술서와 인터뷰에서 확인하지 못한 정보가 있는지 실제 업무를 직접 견학하여 확인할 수 있다.

- 실제 업무에 사용되고 있는 장부와 전표를 이용한다.

- 이미 구축된 시스템이 있는 경우 해당 시스템의 산출물을 검토한다.

- 자료 흐름도(DFD)를 통해 업무 분석을 수행했을 경우 자료 흐름도의 자료 저장소를 이용한다.

- BPR(업무 프로세스 재설계)에 의해 업무를 재정의한 경우 관련 개체를 찾는다.

 

3. 개체명 지정 방법

- 일반적으로 해당 업무에 사용하는 용어로 지정한다.

- 약어 사용은 되도록 제한한다.

- 가능하면 단수 명사를 사용한다.

- 모든 개체명은 유일해야 한다.

- 가능하면 개체가 생성되는 의미에 따라 이름을 부여한다.

 

Section 76 E-R(개체-관계) 모델

1. E-R(Entity-Relationship, 개체-관계) 모델의 개요

- 개념적 데이터 모델의 가장 대표적인 것으로, 1976년 피터 첸에 의해 제안되고 기본적인 구성 요소가 정립되었다.

- E-R 모델은 개체와 개체 간의 관계를 기본 요소로 이용하여 현실 세계의 무질서한 데이터를 개념적인 논리 데이터로 표현하기 위한 방법으로 많이 사용되고 있다.

- E-R 모델은 개체 타입과 이들 간의 관계 타입을 이용해 현실 세계를 개념적으로 표현한다.

- E-R 모델에서는 데이터를 개체, 관계, 속성으로 묘사한다.

- E-R 모델은 특정 DBMS를 고려한 것은 아니다.

- E-R 다이어그램으로 표현하며, 1:1, 1:N, N:M 등의 관계 유형을 제한 없이 나타낼 수 있다.

- 최초에는 개체, 관계, 속성과 같은 개념들로 구성되었으나 나중에는 일반화 계층 같은 복잡한 개념들이 첨가되어 확장된 모델로 발전했다.

 

2. E-R 다이어그램

- E-R 다이어그램은 E-R모델의 기본 아이디어를 이해하기 쉽게 기호를 사용하여 시각적으로 표현한 그림이다.

- E-R 다이어그램은 실체 간의 관계는 물론 조직, 사용자, 프로그램, 데이터 등 시스템 내에서 역할을 가진 모든 실체들을 표현한다.

- E-R 다이어그램은 데이터에 대해 개발자, 관리자, 사용자들이 서로 다르게 인식하고 있는 뷰(Veiw)들을 하나로 단일화시킨다.

- E-R 다이어그램 표기법에는 피터 첸 표기법, 정보 공학 표기법, 바커 표기법 등이 있다.

 

3. 피터 첸 표기법

- 197년 피터 첸이 개발하였다.

- 사각형 : 개체(Entity) 타입

- 마름모 : 관계(Relationship) 타입

- 타원 : 속성(Attribute)

- 이중 타원 : 다중값 속성(복합 속성)

- 밑줄 타원 : 기본키 속성

- 복수 타원 : 복합 속성

- 관계 : 개체 간 관계에 대한 대응수를 선 위에 기술함

- 선 링크 : 개체 타입과 속성을 연결

- 밑줄 친 속성은 기본키를 나타낸다.

 

4. 정보 공학 표기법(Information Engineering Notation)

- 정보 공학 표기법은 1981년에 클리프 핀켈쉬타인과 제임스 마틴이 공동 개발하였다.

- 개체는 사각형 박스로 표시하고 개체명은 박스 바깥쪽 위에 표시한다.

- 속성은 기본키 속성과 일반 속성을 분리하여 표시한다.

- 관계는 관께 표기 기호를 사용하여 표시한다.

 

5. 바커 표기법

- 영국 컨설팅 회사 CACI에서 개발하였고, 리차드 바커에 의해 정립되었다.

- 개체는 모서리가 둥근 박스로 표시하고 개체명은 박스 안 가장 위에 표시한다.

- 속성은 반드시 값이 저장되어야 하는경우 *(Mandatory)를 표시하고, 값이 저장될 수도, 안될 수도 있는 경우 O(Optional)을 표시한다.

- 관계는 관계 표기 기호를 사용하여 표시한 후 해당 개체의 역할을 동사적 단어로 입력한다.

 

Section 78 관계형 데이터베이스의 구조

1. 관계형 데이터베이스의 개요

- 1970년 근무하던 코드(E. F. Codd)에 의해 처음 제안되었다.

- 관계형 데이터베이스를 구성하는 개체(Entity)나 관계(Relationship)를 모두 릴레이션(Realtionship)이라는 표(Table)로 표현한다.

- 릴레이션은 개체를 표현하는 개체 릴레이션, 관계를 나타내는 관계 릴레이션으로 구분할 수 있다.

- 장점 : 간결하고 보기 편리하며, 다른 데이터베이스로의 변환이 용이하다.

- 단점 : 성능이 다소 떨어진다.

 

2. 관계형 데이터베이스의 Relation 구조

- 릴레이션은 데이터들을 표의 형태로 표현한 것으로 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성된다.

튜플(Tuple)

- 튜플은 릴레이션을 구성하는 각각의 행을 말한다.

- 튜플은 속성의 모임으로 구성된다.

- 파일 구조에서 레코드와 같은 의미이다.

- 튜플의 수를 카디널리티(Cardinality) 또는 기수, 대응수라고 한다.

 

속성(Attribute)

- 속성은 데이터베이스를 구성하는 가장 작은 논리적 단위이다.

- 파일 구조상의 데이터 항목 또는 데이터 필드에 해당된다.

- 속성은 개체의 특성을 기술한다.

- 속성의 수를 디그리(Degree) 또는 차수라고 한다.

 

도메인(Domain)

- 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자(Atomic)값들의 집합이다.

- 도메인은 실제 애트리뷰트 값이 나타낼 때 그 값의 합법 여부를 시스템이 검사하는데에도 이용된다.

 

3. 릴레이션의 특징

- 한 릴레이션에는 똑 같은 튜플이 포함될 수 없으므로 릴레이션에 포함된 튜플들은 모두 상이하다.

- 한 릴레이션에 포함된 튜플 사이에는 순서가 없다.

- 튜플들의 삽입, 삭제 등의 작업으로 인해 릴레이션은 시간에 따라 변한다.

- 릴레이션 스키마를 구성하는 속성들 간의 순서는 중요하지 않다.

- 속성의 유일한 식별을 위해 속성의 명칭은 유일해야 하지만, 속성을 구성하는 값은 동일한 값이 있을 수 있다.

- 릴레이션을 구성하는 튜플을 유일하게 식별하기 위해 속성들의 부분집합을 키(Key)로 설정한다.

- 속성의 값은 논리적으로 더 이상 쪼갤 수 없는 원자값만을 저장한다.

 

Section 79 관계형 데이터베이스의 제약 조건  (Key)

- 제약 조건이란 데이터베이스에 저장되는 데이터의 정확성을 보장하기 위하여 키(Key)를 이용하여 입력되는 데이터에 제한을 주는 것으로 개체 무결성 제약, 참조 무결성 제약 등이 해당된다.

1. (Key)의 개념 및 종류

- 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 기준이 되는 애트리뷰트를 말한다.

 

2. 후보키(Candidate Key)

- 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들을 말한다.

- 하나의 릴레이션내에서는 중복된 튜플들이 있을 수 없으므로 모든 릴레이션에는 반드시 하나 이상의 후보키가 존재한다.

- 후보키는 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 한다.

- 유일성(Unique) : 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 한다.

- 최소성(Minimality) : 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성으로만 구성되어야 한다.

 

3. 기본키(Primary Key)

- 기본키는 후보키 중에서 특별히 선정된 주키(Main Key)로 중복된 값을 가질 수 없다.

- 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다.

- 기본키는 후보키의 성질을 가는다. , 유일성과 최소성을 가지며 튜플을 식별하기 위해 반드시 필요한 키이다.

- 기본키는 NULL 값을 가질 수 없다. 즉 튜플에서 기본키로 설정된 속성에는 NULL 값이 있어서는 안된다.

 

4. 대체키(Alternate Key)

- 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키를 의미한다.

- 보조키라고도 한다.

 

5. 슈퍼키(Super Key)

- 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키로서 릴레이션을 구성하는 모든 튜플들 중 슈퍼키로 구성된 속성의 집합과 동일한 값은 나타나지 않는다.

- 슈퍼키는 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족시키지만, 최소성은 만족시키지 못한다.

 

6. 외래키(Foreign Key)

- 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합을 의미한다.

- 참조되는 릴레이션의 기본키와 대응되어 릴레이션 간에 참조 관계를 표현하는데 중요한 도구이다.

- 한 릴레이션에 속한 속성 A와 참조 릴레이션의 기본키인 B가 동일한 도메인 상에서 정의되었을 때의 속성 A를 외래키라고 한다.

- 외래키로 지정되면 참조 릴레이션의 기본키에 없는 값은 입력할 수 없다.

 

Section 81 관계대수 및 관계해석

1. 관계대수의 개요

- 관계대수는 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어이다.

- 관계대수는 릴레이션을 처리하기 위해 연산자와 연산규칙을 제공하는 언어로 피연산자가 릴레이션이고, 결과도 릴레이션이다.

- 질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서를 명시한다.

- 관계대수에는 관계 데이터베이스에 적용하기 위해 특별히 개발한 순수 관계 연산자와 수학적 집합 이론에서 사용하는 일반 집합 연산자가 있다.

- 순수 관계 연산자: Select, Project, Join, Division

- 일반 집합 연산자: UNION(합집합), INTERSECTION(교집합), DIFFERENCE(차집합), CARTESIAN PRODUCT(교차곱)

 

2. Select

- 릴레이션에 존재하는 튜플 중에서 선택 조건을 만족하는 튜프의 부분집합을 구하여 새로운 릴레이션을 만드는 연산이다.

- 릴레이션의 행에 해당하는 튜플을 구하는 것이므로 수평 연산이라고도 한다.

- 연산자의 기호는 그리스 문자 시그마를 사용한다

.표기 형식 σ(R)

- R은 릴레이션 이름이다.

- 조건에서는 비교 연산이 허용되며, 논리 연산자를 사용하여 여러 개의 조건들을 하나의 조건으로 결합시킬 수도 있다.

 

3. Project

- 주어진 릴레이션에서 속성 리스트(Attribute List)에 제시된 속성 값만을 추출하여 새로운 릴레이션을 만드는 연산이다. 단 연산 결과에 중복이 발생하면 중복이 제거된다.

- 릴레이션의 열에 해당하는 Attribute를 추출하는 것이므로 수직 연산자라고도 한다.

- 연산자의 기호는 그리스 문자 파이(π)를 사용한다.

- 표기 형식 : π(R)

 

4. Join

- 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만드는 연산이다.

- Join의 결과로 만들어진 릴레이션의 차수는 조인된 두 릴레이션의 차수를 합한 것과 같다.

- Join의 결과는 Cartesian Product(교차곱)을 수행한다음 Select를 수행한 것과 같다.

 

※ 자연 조인(Natural Join)

- 조인 조건이 ‘=’일 떄 동일한 속성이 두 번 나타나게 되는데, 이중 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법을 자연 조인이라고 한다.

- 자연 조인이 성립되려면 두 릴레이션의 속성명과 도메인이 같아야 한다.

 

5. Division

- XY인 두 개의 릴레이션 R(X) S(Y)가 있을 때, R의 속성이 S의 속성값을 가진 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산이다.

- 연산자의 기호는 ÷를 사용한다.

- 표기형식 : R[속성r ÷ 속성s] S

- 속성 r은 릴레이션 R의 속성, 속성 s는 릴레이션 S의 속성, 속성 r과 속성 s는 동일 속성값을 가지는 속성이어야 한다.

 

6. 일반 집합 연산자는 수학적 집합 이론에서 사용하는 연산자로서 릴레이션 연산에도 그대로 적용할 수 있다.

- 일반 집합 연산자 중 합집합(UNION), 교집합(INTERSECTION), 차집합(DIFFERENCE)을 처리하기 위해서는 합병 조건을 만족해야 한다.

- 합병 가능한 두 릴레이션 R S가 있을 때 각 연산의 특징을 요약하면 다음과 같다.

 

합집합 UNION

- 두 릴레이션에 존재하는 튜플의 합집합을 구하되, 결과로 생성된 릴레이션에서 중복되는 튜플은 제거되는 연산이다.

- R  S = {t | t  R  t  S} (t는 릴레이션 R또는 S에 존재하는 튜플)

- 카디널리티 (|RS|  |R| + |S|) : 합집합의 카디널리티는 두 릴레이션 카디널리티의 합보다 크지 않다.

 

교집합 INTERSECTION

- 두 릴레이션에 존재하는 튜플의 교집합을 구하는 연산이다.

- R  S = {t | t  R  t  S } – t는 릴레이션 R 그리고 S에 동시에 존재하는 튜플이다.

- 카디널리티 (|RS|  MIN{|R|,|S|}) : 교집합의 카디널리티는 두 릴레이션 중 카디널리티가 적은 릴레이션의 카디널리티보다 크지 않다.

 

차집합 DIFFERENCE

- 두 릴레이션에 존재하는 튜플의 차집합을 구하는 연산이다.

- R – S = {t|t  R  t / S } (t는 릴레이션 R에는 존재하고 S에 없는 튜플이다.

- 카디널리티 (|R-S|  |R|) : 차집합의 카디널리티는 릴레이션 R의 카디널리티보다 크지 않다.

 

교차곱 CARTESIAN PRODUCT

- 두 릴레이션에 있는 튜플들의 순서쌍을 구하는 연산이다.

- R X S = {rs| r  R  s  S} (r R에 존재하는 튜플이고, s S에 존재하는 튜플이다.)

- |R X S | = |R| X |S|

- 교차곱은 두 릴레이션의 카디널리티를 곱한 것과 같다.

 

7. 관계해석(Relational Calculus)

- 관계 데이터 모델의 제안자인 코드(E. F. Codd)가 수학의 Predicate Calculus(술어 해석)에 기반을 두고 관계 데이터베이스를 위해 제안했다.

- 관계해석은 관계 데이터의 연산을 두고 표현하는 방법으로, 원하는 정보를 정의할 때는 계산 수식을 사용한다.

- 관계해석은 원하는 정보가 무엇이라는 것만 정의하는 비절차적인 특성을 지닌다.

- 튜플 관계해석과 도메인 관계해석이 있다.

- 기본적으로 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력면에서 동등하며, 관계대수로 표현한 식은 관게해석으로 표현할 수 있다.

 

Section 82 정규화(Normalization)

1. 정규화의 개요

- 함수적 종속성 등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정이다.

- 하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해해가는 과정이라 할 수 있다.

- 정규형에는 제1정규형, 2정규형, 3정규형, BCNF, 4정규형, 5정규형이 있으며, 차수가 높아질수록 만족시켜야 할 제약 조건이 늘어난다.

- 정규화는 데이터베이스의 논리적 설계 단계에서 수행한다.

- 정규화는 논리적 처리 및 품질에 큰 영향을 미친다.

- 정규화된 모든 데이터 모델은 일관성, 정확성, 단순성, 비중복성, 안정성 등을 보장한다.

- 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다.

 

2. 정규화의 목적

- 데이터 구조의 안성정 및 무결성을 유지한다.

- 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 만든다.

- 효과적인 검색 알고리즘을 생성할 수 있다.

- 데이터 중복을 배제하여 이상(Anomaly)의 발생 방지 및 자료 저장 공간의 최소화가 가능하다.

- 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄인다.

- 데이터 모형의 단순화가 가능하다.

- 속성의 배열 상태 검증이 가능하다.

- 개체와 속성의 누락 여부 확인이 가능하다.

- 자료 검색과 추출의 효율성을 추구한다.

 

3. 이상(Anomaly)의 개념 및 종류

- 정규화를 거치지 않으면 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 예기치 못한 곤란한 현상이 발생하는데, 이를 이상(Anomaly)이라 하며 삽입 이상, 삭제 이상, 갱신 이상이 있다.

- 삽입 이상(Insertion Anomaly) : 릴레이션에 데이터를 삽입할 때 의도와는 상관없이 원하지 않은 값들도 함께 삽입되는 현상이다.

- 삭제 이상(Deletion Anomaly) : 릴레이션에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 연쇄가 일어나는 현상이다.

- 갱신 이상(Update Anomaly) : 릴레이션에서 튜플에 있는 속성값을 갱싱할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상이다.

 

4. 정규화의 원칙

- 정보의 무손실 표현, 즉 하나의 스키마를 다른 스키마로 변환할 때 정보의 손실이 있어서는 안 된다.

- 분리의 원칙, 즉 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜 표현해야 한다.

- 데이터의 중복성이 감소되어야 한다.

 

5. 정규화 과정

1NF(1정규형)

- 1NF는 릴레이션에 속한 모든 도메인이 원자값(Atomic Value)만으로 되어 있는 정규형이다. , 릴레이션의 모든 속성 값이 원자 값으로만 되어 있는 정규형이다.

 

2NF(2정규형)

- 2NF는 릴레이션 R 1NF이고, 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형이다.

 

※ 함수적 종속/ 완전/부분 함수적 종속 및 이해

함수적 종속(Functional Dependency)

- 함수적 종속은 데이터들이 어떤 기준값에 의해 종속되는 것을 의미함.

 

완전 함수적 종속

- 어떤 테이블 R에서 속성 A가 다른 속성 집합 B 전체에 대해 함수적 종속이지만 속성 집합 B의 어떠한 진 부분 집합 C에는 함수적 종속이 아닐 때, 속성 A는 속성 집합 B에 완전 함수적 종속이라고 한다.

 

부분 함수적 종속

- 어떤 테이블 R에서 속성 A가 다른 속성 집합 B 전체에 대해 함수적 종속이면서 속성 집합 B의 어떠한 진부분 집합에도 함수적 종속일 때, 속성 A는 속성 집합 B에 부분 함수적 종속이라고 한다.

 

완전/부분 함수적 종속의 이해

- 완전 함수적 종속은 어떤 속성이 기본키에 대해 완전히 종속적일 때를 말한다.

 

3NF(3정규형)

- 릴레이션 R 2NF이고, 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 만족하지 않는 정규형이다.

- 무손실 조인 또는 종속성 보존을 저해하지 않고도 항상 3NF 설계를 얻을 수 있다.

 

BCNF(Boyce-Codd 정규형)

- BCNF는 릴레이션 R에서 결정자가 모두 후보키(Candidate Key)인 정규형이다.

- 키가 아닌 모든 속성은 각 키에 대하여 완전 종속해야 한다.

- 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가 있지 않은 모든 키에 대하여 완전 종속해야 한다.

- 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속할 수 없다.

 

4NF(4정규형)

- 릴레이션 R에 다치 종속이 성립하는 경우 R의 모든 속성이 A에 함수적 종속 관계를 만족하는 정규형이다.

 

5NF(5정규형, PJ/NF)

- 릴레이션 R의 모든 조인 종속이 R의 후보키를 통해서만 성립되는 정규형이다.

 

※ 정규화 과정 정리

비정규 릴레이션 => 1NF => 2NF => 3NF => BCNF => 4NF => 5NF

 

 

 

 

Section 84 시스템 카탈로그

1. 시스템 카탈로그(System Catalog)의 의미

- 시스템 그 자체에 관련이 있는 다양한 객체에 관한 정보를 포함하는 시스템 데이터베이스이다.

- 시스템 카탈로그 내의 각 테이블은 사용자를 포함하여 DBMS에 지원하는 모든 데이터 객체에 대한 정의나 명세에 관한 정보를 유지 관리하는 시스템 테이블이다.

- 카탈로그들이 생성되면 데이터 사전(Data Dictionary)에 저장되기 때문에 좁은 의미로는 카탈로그를 데이터 사전이라고도 한다.

 

2. 시스템 카탈로그 저장 정보

- 메타 데이터(Meta-Data)라고도 한다.

※ 메타 데이터의 유형

- 데이터베이스의 객체 정보 : 테이블, 인덱스, 뷰 등의 구조 및 통계 정보

- 사용자 정보 : 아이디, 패스워드, 접근 권한 등

- 테이블의 무결성 제약 조건 정보 : 기본키, 외래키, NULL 값 허용 여부 등

- 함수, 프로시저, 트리거 등에 대한 정보

 

3. 카탈로그 특징

- 카탈로그 자체도 시스템 테이블로 구성되어 있어 일반 이용자도 SQL을 이용하여 내용을 검색해 볼 수 있다.

- INSERT, DELETE, UPDATE 문으로 카탈로그를 갱신하는 것은 허용되지 않는다.

- 데이터베이스 시스템에 따라 상이한 구조를 갖는다.

- 카탈로그는 DBMS가 스스로 생성하고 유지한다.

- 카탈로그의 갱신 : 사용자가 SQL문을 실행시켜 기본 테이블, , 인덱스 등에 변화를 주면 시스템이 자동으로 갱신한다.

- 분산 시스템에서의 카탈로그 : 보통의 릴레이션, 인덱스, 사용자 등의 정보를 포함할 뿐 아니라 위치 투명성 및 중복 투명성을 제공하기 위해 필요한 모든 제어 정보를 가져야 한다.

 

4. 카탈로그/데이터 사전을 참조하기 위한 DBMS 내의 모듈 시스템

- 데이터 정의어 번역기(DDL Compiler) : DDL을 메타 데이터를 갖는 테이블로 변환하여 데이터 사전에 저장시킨다.

- 데이터 조작어 번역기(DML Compiler) : 응용 프로그램에 삽입된 DML문을 주 언어로 표현한 프로시저 호출로 변환하여 질의 처리기와 상호 통신한다.

Data Directory

- 데이터 사전에 수록된 데이터를 실제로 접근하는 데 필요한 정보를 관리 유지하는 시스템이다.

- 시스템 카탈로그는 사용자와 시스템 모두 접근할 수 있지만 데이터 디렉터리는 시스템만 접근할 수 있다.

- 질의 최적화기 : 사용자의 요구를 효율적인 형태로 변환하고 질의를 처리하는 좋은 전략을 모색한다.

- 트랜잭션 처리기 : 복수 사용자 환경에서 평행으로 동시에 일어나는 트랜잭션 문제를 해결하여, 각각의 사용자가 데이터베이스 자원을 배타적으로 이용할 수 있도록 한다.

  Comments,     Trackbacks
정보처리기사 2과목 소프트웨어 개발 5장 인터페이스 구현 요점 정리

5장 인터페이스 구현

 

Section61 모듈 연계를 위한 인터페이스 기능 식별

 

1. 모듈 연계의 개요

- 모듈 연계는 내부 모듈과 외부 모듈 또는 내부 모듈 간 데이터의 교환을 위해 관계를 설정하는 것으로, 대표적인 모듈 연계 방법에는 EAI ESB 방식이 있다.

EAI(Enterprise Application Integration)

- EAI는 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션이다.

- EAI는 비즈니스 간 통합 및 연게성을 증대시켜 효율성 및 각 시스템 간의 확정성(Determinacy)을 높여 준다.

EAI 구축 유형

Point-to-Point

- 가장 기본적인 애플리케이션 통합 방식으로, 애플리케이션을 1:1로 연결한다.

- 변경 및 재사용이 어렵다.

Hub & Spoke

- 단일 접점인 허브 시스템을 통해 데이터를 전송하는 중앙 집중형 방식이다.

- 확장 및 유지 보수가 용이하다.

- 허브 장애 발생 시 시스템 전체에 영향을 미친다.

Message Bus

- 애플리케이션 사이에 미들웨어를 두어 처리하는 방식이다.

- 확장성이 뛰어나며 대용량 처리가 가능하다.

Hybrid

- Hub & Spoke Message Bus의 혼합 방식이다

- 그룹 내에서는 Hub & Spoke 방식을, 그룹 간에는 Message Bus 방식을 사용한다.

- 필요한 경우 한 가지 방식으로 EAI 구현이 가능하다.

- 데이터 병목 현상을 최소화 할 수 있다.

 

ESB(Enterprise Service Bus)

- ESB는 애플리케이션 간 연계, 데이터 변환, 웹 서비스 지원 등 표준 기반 인터페이스를 제공하는 솔루션이다.

- ESB는 애플리케이션 통합 측면에서 EAI와 유사하지만 애플리케이션 보다는 서비스 중심의 통합을 지향한다.

- ESB는 특정 서비스에 국한되지 않고 범용적으로 사용하기 위하여 애플리케이션과의 결합도를 약하게 유지한다.

- 관리 및 보안 유지가 쉽고, 높은 수준의 품질 지원이 가능하다.

 

2. 모듈 간 연계 기능 식별

- 모듈 간 공통 기능 및 데이터 인터페이스를 기반으로 모듈과 연계된 기능을 시나리오 형태로 구체화하여 식별한다.

- 식별된 연계 기능은 인터페이스 기능을 식별하는데 사용된다.

 

3. 모듈 간 인터페이스 기능 식별

- 식별된 모듈 간 관련 기능을 검토하여 인터페이스 동작에 필요한 기능을 식별한다.

- 인터페이스 동작은 대부분 외부 모듈의 결과 또는 요청에 의해 수행되므로 외부 및 인터페이스 모듈 간 동작하는 기능을 통해 인터페이스 기능을 식별한다.

- 내부 모듈의 동작은 외부 모듈에서 호출된 인터페이스에 의해 수행되고 결과를 나타내는 것이므로 해당 업무에 대한 시나리오를 통해 내부 모듈과 관련된 인터페이스 기능을 식별한다.

- 식별된 인터페이스 기능 중에서 실제적으로 필요한 이넡페이스 기능을 최종적으로 선별한다.

- 식별된 인터페이스 기능은 인터페이스 기능 구현을 정의하는데 사용한다.

 

Section 68 인터페이스 구현 검증

1. 인터페이스 구현 검증의 개요

- 인터페이스가 정상적으로 문제없이 작동하는지 확인하는 것이다.

- 인터페이스 구현 검증 도구와 감시 도구를 이용하여 인터페이스의 동작 상태를 확인한다.

 

2. 인터페이스 구현 검증 도구

- 인터페이스 구현을 검증하기 위해서는 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요하다.

-통합 테스트는 테스트 자동화 도구를 이용하면 효율적으로 수행할 수 있다.

 

※ 테스트도구 종류

xUnit – Java, C++, .Net 등 다양한 언어를 지원하는 단위 테스트 프레임워크이다.

STAF – 서비스 호출 및 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크이다.

FitNesse – 웹 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크이다.

NTAF – FitNesse의 장점인 협업 기능과 STAF의 장점인 재사용 및 확장성을 통합한 NHN의 테스트 자동화 프레임워크이다.

Selenium – 다양한 브라우저 및 개발 언어를 지원하는 웹 애플리케이션 테스트 프레임워크이다.

Watir – Ruby를 사용하는 애플리케이션 테스트 프레임워크이다.

 

3. 인터페이스 구현 감시 도구

- 인터페이스 동작 상태는 APM을 사용하여 감시(Monitoring)할 수 있다.

- 애플리케이션 성능 관리 도구를 통해 데이터베이스와 웹 애플리케이션의 트랜잭션, 변숙밧, 호출 함수, 로그 및 시스템 부하 등 종합적인 정보를 조회하고 분석할 수 있다.

- 대표적인 애플리케이션 성능 관리 도구에는 스카우터, 제니퍼 등이 있다.

 

 APM(Application Performance Management/Monitoring)

- APM은 애플리케이션의 성능 관리를 위해 접속자, 자원 현황, 트랜잭션 수행 내역, 장애 진단 등 다양한 모니터링 기능을 제공하는 도구를 의미한다.

- APM은 리소스 방식와 엔드투엔드의 두 가지 유형이 있다.

리소스 방식 : Nagios, Zabbix, Cacti 

엔드투엔드 방식 : VisualVM, 제니퍼, 스카우터 등

 

4. 인터페이스 구현 검증 도구 및 감시 도구 선택

- 인터페이스 기능 구현 정의를 통해 구현된 인터페이스 명세서의 세부 기능을 참조하여 인터페이스의 정상적인 동작 여부를 확인하기 위한 검증 도구와 감시 도구의 요건을 분석한다.

- 분석이 끝나면 시장 및 솔루션 조사를 통해서 적절한 인터페이스 구현을 검증하고 감시하는데 필요한 인터페이스 구현 검증 도구와 감시 도구를 선택한다.

 

5. 인터페이스 구현 검증 확인

- 인터페이스 구현 검증 도구를 이용하여 외부 시스템과 연계 모듈의 동작 상태를 확인한다.

- 최초 입력값과 입력값에 의해 선택되는 데이터, 생성되는 객체의 데이터 등 전반적인 인터페이스 동작 프로세스상에서 예상되는 결과값과 실제 검증값이 동일한지를 비교한다.

- 추가적으로 각 단계별 오류 처리도 적절하게 구현되어 있는지 확인한다.

 

6. 인터페이스 구현 감시 확인

- 인터페이스 구현 감시 도구를 이용하여 외부 시스템과 연결 모듈이 서비스를 제공하는 동안 정상적으로 동작하는지 확인한다.

- 인터페이스 동작 여부, 에러 발생 여부 등 감시 도구에서 제공해 주는 리포트를 활용한다.

  Comments,     Trackbacks
정보처리기사 2과목 소프트웨어 개발 4장 애플리케이션 테스트 관리 요점 정리

4장 애플리케이션 테스트 관리

 

Section 51 테스트 기법에 따른 애플리케이션 테스트

 

1. 화이트박스 테스트(White Box Test)

- 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법이다.

- 화이트박스 테스트는 설계된 절차에 초점을 둔 구조적 테스트로 프로시저 설계의 제어 구조를 사용하여 테스트 케이스를 설계하며, 테스트 과정의 초기에 적용된다.

- 모듈 안의 작동을 직접 관찰한다.

- 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행된다.

- 프로그램의 제어 구조에 따라 선택, 반복 등의 분기점 부분들을 수행함으로써 논리적 경로를 제어한다.

 

2. 화이트박스 테스트의 종류

- 기초 경로 검사, 제어 구조 검사 등이 있다.

기초 경로 검사 :

- 대표적 화이트박스 테스트 기법이다.

- 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법으로, 테스트 측정 결과는 실행 경로의 기초를 정의하는 데 지침으로 사용된다.

 

제어 구조 검사

- 조건 검사 : 프로그램 모듈 내에 있는 논리적 조건을 테스트하는 테스트 케이스 설계 기법

- 루프 검사 : 프로그램의 반복 구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법

- 데이터 흐름 검사 : 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 설계 기법

 

3. 화이트박스 테스트의 검증 기준

- 테스트 케이스들이 테스트에 얼마나 적정한지를 판단하느 기준으로, 문장 검증 기준, 분기 검증 기준, 조건 검증 기준, 분기/조건 기준이 있다.

 

문장 검증 기준

- 소스 코드의 모든 구문이 한 번 이상 수행되도록 테스트 케이스 설계

분기 검증 기준

- 소스 코드의 모든 조건문이 한 번 이상 수행되도록 테스트 케이스 설계

조건 검증 기준

- 모든 조건문에 대해 조건이 True인 경우와 False 인 경우가 한 번 이상 수행되도록 테스트 케이스 설계

분기/조건 기준

- 소스 코드의 모든 조건문과 각 조건문에 포함된 개별 조건식의 결과가 True인 경우과 False인 경우가 한 번 이상 수행되도록 테스트 케이스 설계

 

※ 검증 기준의 종류 (기능 기반 커버리지, 라인 커버리지, 코드 커버리지)

- 화이트 박스테스트에서 사용 되는 기준은 모두 코드 커버리지에 속함

기능 기반 커버리지 : 실제 테스트가 수행된 기능의 수/ 전체 기능의 수

라인 커버리지 : 테스트 시나리오가 수행한 소스 코드의 라인 수 / 전체 소스 코드의 라인 수

코드 커버리지 : 소스 코드의 구문, 분기, 조건 등의 구조 코드 자체가 얼마나 테스트되었는지를 측정하는 방법

 

4. 블랙박스 테스트

- 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트로, 기능 테스트라고도 한다.

- 사용자의 요구사항을 명세를 보면서 테스트하는 것으로, 주로 구현된 기능을 테스트 한다.

- 소프트웨어 인터페이스에서 실시되는 테스트이다.

- 부정확하거나 누락된 기능, 인터페이스 오류, 자료 구조나 외부 데이터베이스 접근에 따른 오류, 행위나 성능 오류, 초기화와 종료 오류 등을 발견하기 위해 사용되며, 테스트 과정의 후반부에 적용된다.

- 종류에는 동치 분할 검사/ 경계값 분석/ 원인-효과 그래프 검사/ 오류 예측 검사/ 비교 검사 등이 있다.

 

5. 블랙박스 테스트의 종류

동치 분할 검사(Equivalence Partitioning Testing)

- 입력 자료에 초점을 맞춰 테스트 케이스를 만들고 검사하는 방법으로 동등분할 기법이라고도 한다.

- 프로그램의 입력 조건에 타당한 입력 자료와 타당하지 않은 입력 자료의 개수를 균등하게 하여 테스트케이스를 정하고, 해당 입력 자료에 맞는 결과가 출력되는지 확인하는 기법이다.

 

경계값 분석(Boundary Value Analysis)

- 입력 자료에만 치중한 동치 분할 기법을 보완하기 위한 기법이다.

- 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용하여 입력 조건의 경계값을 테스트 케이스로 선정하여 검사하는 기법이다.

 

원인 효과 그래프 검사(Cause-Effect Graphing Testng)

- 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법이다.

 

오류 예측 검사(Error Guessing)

- 과거의 경험이나 확인자의 감각으로 테스트하는 기법이다.

- 다른 블랙 박스 테스트 기법으로는 찾아낼 수 없는 오류를 찾아내는 일련의 보충적 검사 기법이며, 데이터 확인 검사라고도 한다.

 

비교 검사(Comparison Testing)

- 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법이다.

 

Section52 개발 단계에 따른 애플리케이션 테스트

1. 개발 단계에 따른 애플리케이션 테스트

- 애플리케이션 테스트는 소프트웨어 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류되며 이를 테스트 레벨이라고 한다.

- 애플리케이션 테스트는 소프트웨어의 개발 단계에서부터 테스트를 수행하므로 단순히 소프트웨어에 포함된 코드 상의 오류뿐만 아니라 요구 분석의 오류, 설계 인퍼테이스 오류 등도 발견할 수 있다.

- 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것을 V-모델이라 한다.

 

요구사항=>분석=>설계=>구현=>단위 테스트=> 통합 테스트=> 시스템 테스트=> 인수 테스트

 

2. 단위 테스트

- 단위 테스트는 코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트하는 것이다.

- 단위 테스트에서는 인터페이스, 외부적 I/Q, 자료 구조, 독립적 기초 경로, 오류 처리 경로, 경계 조건 등을 검사한다.

- 단위 테스트는 사용자의 요구사항을 기반으로 한 기능성 테스트를 최우선으로 수행한다.

- 단위 테스트는 구조 기반 테스트와 명세 기반 테스트로 나뉘지만 주로 구조 기반 테스트를 시행한다.

 

구조 기반 테스트 : 프로그램 내부 구조 및 복잡도를 검증하는 화이트박스 테스트 시행

(제어 흐름, 조건 결정)

 

명세 기반 테스트 : 목적 및 실행 코드 기반의 블랙박스 테스트 시행

(동등 분할, 경계 값 분석)

 

3. 통합 테스트

- 단위 테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미한다.

- 통합 테스트는 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사한다.

 

4. 시스템 테스트

- 개발된 소프트웨어가 해당 컴퓨터 시스템에서 완벽하게 수행되는가를 점검하는 테스트이다.

- 환경적인 장애 리스크를 최소화하기 위해서는 실제 사용 환경과 유사하게 만든 테스트 환경에서 테스트를 수행해야 한다.

- 시스템 테스트는 기능적 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족시키는지 테스트한다.

 

기능적 요구사항 : 요구사항 명세서, 비즈니스 절차, 유스케이스 등 명세서 기반의 블랙박스 테스트 시행

 

비기능적 요구사항 : 성능테스트, 회복테스트, 보안테스트, 내부 시스템의 메뉴 구조, 웹 페이지의 네비게이션 등 구조적 요소에 대한 화이트박스 테스트 시행

 

5. 인수 테스트

- 개발한 소프트웨어가 사용자의 요구사항을 충족하는지에 중점을 두고 테스트하는 방법이다.

- 인수 테스트는 개발한 소프트웨어를 사용자가 직접 테스트한다.

- 인수 테스트에 문제가 없으면 사용자는 소프트웨어를 인수하게 되고, 프로젝트는 종료된다.

- 인수 테스트는 다음과 같이 6가지 종류로 구분해서 테스트한다.

 

사용자 인수 테스트 : 사용자가 시스템 사용의 적절성 여부를 확인한다.

운영상의 인수 테스트 : 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법으로, 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검등을 확인한다.

계약 인수 테스트 : 게약상의 인수/검수 조건을 준수하는지 여부를 확인한다.

규정 인수 테스트 : 소프트웨어가 정부 지침, 법규, 규정 등 규정에 맞게 개발되었는지 확인한다.

알파 테스트 : 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트 기법이다.

통제된 환경에서 행해지며 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 기록한다.

베타 테스트 : 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법이다.

- 실업무를 가지고 사용자가 직접 테스트하는 것으로, 개발자에 의해 제어되지 않은 상태에서 테스트가 행해지며, 발견된 오류와 사용상의 문제점을 기록하고 개발자에게 주기적으로 보고한다.

 

Section 53 통합 테스트

1. 통합 테스트

- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법이다.

- 통합 테스트 방법에는 비점진적 통합 방식과 점진적 통합 방식이 있다.

비점진적 통합 방식 : 단계적으로 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스하는 방법으로, 빅뱅 통합 테스트 방식이 있다.

규모가 작은 소프트웨어에 유리하며 단시간 내에 테스트가 가능하다

전체 프로그램을 대상으로 하기 때문에 오류 발견 및 장애 위치 파악 및 수정이 어렵다.

 

점진적 통합 방식 : 모듈 단위로 단계적으로 통합하면서 테스트하는 방법으로, 하향식, 상향식, 혼합식 통합 방식이 있다.

오류 수정이 용이하고, 인터페이스와 연관된 오류를 완전히 테스트할 가능성이 높다.

 

2. 하향식 통합 테스트

- 프로그램의 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법이다.

- 주요 제어 모듈을 기준으로 하여 아래 단계로 이동하면서 통합하는데, 이 때 깊이 우선 통합법이나 넓이 우선 통합법을 사용한다.

- 테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있다.

- 상위 모듈에서는 테스트 케이스를 사용하기 어렵다.

- 하향식 통합 방법 절차

① 주요 제어 모듈은 작성된 프로그램을 사용하고, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체한다.

② 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체된다.

③ 모듈이 통합될 때마다 테스트를 실시한다.

④ 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시한다.

 

3. 상향식 통합 테스트

- 프로그램 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법이다.

- 가장 하위 단계의 모듈부터 통합 및 테스트가 수행디므로 스텁은 필요하지 않지만, 하나의 제어 모듈과 관련된 종속 모듈의 그룹인 클러스가 필요하다.

-상향식 통합 방법 절차

① 하위 모듈들을 클러스터로 결한다.

② 상위 모듈에서 데이터의 입•출력을 확인하기 위해 더미 모듈인 드라이버를 작성한다.

③ 통합된 클러스터 단위로 테스트한다.

④ 테스트가 완료되면 클러스터는 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체된다.

 

※ 드라이버와 테스트 스텁의 차이점

필요 시기 : 드라이버는 상위 모듈 없이 하위 모듈이 있을 경우 하위모듈 구동에 필요하며,

스텁은 상위 모듈은 있지만 하위 모듈이 없는 경우 하위 모듈 대체한다.

테스트 방식 : 드라이버는 상향식, 스텁은 하향식 테스트

공통점 : 소프트웨어 개발과 테스트를 병행할 경우 이용

차이점 : 드라이버는 이미 존재하는 하위 모듈과 존재하지 않는 상위 모듈간의 인터페이스 역할을 하며, 개발완료되면 드라이버는 본래의 모듈로 교체

반면 스텁은 일시적으로 필요한 조건만을 가지고 임시로 제공되는 가짜 모듈의 역할을 하며, 시험용 모듈이기 때문에 일반적으로 드라이버보다 작성하기 쉽다.

 

4. 혼합식 통합 테스트

- 하위 수준에서는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원하는 방식으로, 샌드위치식 통합 테스트 방법이라고도 한다.

 

5. 회귀 테스팅

- 이미 테스트된 프로그램의 테스팅을 반복하는 것으로, 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인하는 테스트이다.

- 회귀 테스트는 수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 테스트하여 새로운 오류가 발생하지 않음을 보증하기 위해 반복테스트한다.

- 회귀 테스트는 모든 테스트 케이스를 이용해 테스팅하는 것이 가장 좋지만 시간과 비용이 많이 필요하므로 기존 테스트 케이스 중 변경된 부분을 테스트할 수 있는 테스트 케이스만을 선정하여 수행한다.

- 회귀 테스트의 테스트 케이스 선정 방법

- 모든 애플리케이션의 기능을 수행할 수 있는 대표적인 테스트 케이스를 선정한다.

- 애플리케이션 기능 변경에 의한 파급 효과를 분석하여 파급 효과가 높은 부분이 포함된 테스트 케이스를 선정한다.

- 실제 수정이 발생한 모듈 또는 컴포넌트에서 시행하는 테스트 케이스를 선정한다.

  Comments,     Trackbacks
정보처리기사 2과목 소프트웨어 개발 3장 제품 소프트웨어 패키징 요점 정리

3장 제품 소프트웨어 패키징

 

Section 43 디지털 저작권 관리(DRM)

 

1. 저작권의 개요

- 소설, , 논문, 강연, 연술, 음악, 연극, 무용, 회화, 서예, 건축물, 사진, 영상, 지도, 도표, 컴퓨터 프로그램 저작물 등에 대하여 창작자가 가지는 배타적 독점적 권리로 타인의 침해를 받지 않을 고유한 권한이다.

 

- 컴퓨터 프로그램들과 같이 복제하기 쉬운 저작물에 대해 불법 복제 및 배포 등을 막기 위한 기술적인 방법을 통칭해 저작권 보호 기술이라고 한다.

 

2. 디지털 저작권 관리(DRM; Digital Right Management)의 개요

- 디지털 저작권 관리는 저작권자가 배포한 디지털 콘텐츠가 저작권자가 의도한 용도로만 사용되도록 디지털 콘텐츠의 생성, 유동, 이용까지의 전 과정에 걸쳐 사용되는 디지털 콘텐츠 관리 및 보호 기술이다.

- 원본 콘텐츠가 아날로그인 경우에는 디지털로 변환한 후 패키저에 의해 DRM 패키징을 수행한다.

- 콘텐츠의 크기에 따라 음원이나 문서와 같이 크기가 작은 경우에는 사용자가 콘텐츠를 요청하는 시점에서 실시간으로 패키징을 수행하고, 크기가 큰 경우에는 미리 패키징을 수행한 후 배포한다.

- 패키징을 수행하면 콘텐츠에는 암호화된 저작권자의 전자서명이 포함되고 저작권자가 설정한 라이선스 정보가 클리어링 하우스에 등록된다.

- 사용자가 콘텐츠를 사용하기 위해서는 클리어링 하우스에 등록된 라이선스 정보를 통해 사용자 인증과 콘텐츠 사용 권한 소유 여부를 확인받아야 한다.

- 종량제 방식을 적용한 소프트웨어의 경우 클리어링 하우스를 통해 서비스의 실제 사용량을 측정하여 이용한 마큼의 요금을 부여한다.

 

3. 디지털 저작권 관리의 흐름도

- 클리어링 하우스 : 저작권에 대한 사용 권한, 라이선스 발급, 사용량에 따른 결제 관리 등을 수행하는 곳

- 콘텐츠 제공자: 콘텐츠를 제공하는 저작권자

- 패키저: 콘텐츠를 메타 데이터와 함께 배포 가능한 형태로 묶어 암호화 하는 프로그램

- 콘텐츠 분배자 : 암호화된 콘텐츠를 유통하는 곳이나 사람

- 콘텐츠 소비자: 콘텐츠를 구매해서 사용하는 주체

- DRM 컨트롤러 : 배포된 콘텐츠의 이용 권한을 통제하는 프프로그램

- 보안 컨테이너 : 콘텐츠 원본을 안전하게 유통하기 위한 전자적 보안 장치

 

4. 디지털 저작권 관리의 기술 요소

암호화 : 콘텐츠 및 라이선스를 암호화하고 전자 서명을 할 수 있는 기술

키 관리: 콘텐츠를 암호화한 키에 대한 저장 및 분배 기술

암호화 파일 생성: 콤텐츠를 암호화된 콘텐츠로 생성하기 위한 기술

식별 기술: 콘텐츠에 대한 식별 체계 표현 기술

저작권 표현 : 라이선스의 내용 표현 기술

정책 관리: 라이선스 발급 및 사용에 대한 정책 표현 및 관리 기술

크랙 방지 : 크랙에 의한 콘텐츠 사용 방지 기술

인증 : 라이선스 발급 및 사용의 기준이 되는 사용자 인증 기술

 

 

Section 47 소프트웨어 버전 관리 도구

1. 공유 폴더 방식

- 버전관리 자료가 로컬 컴퓨터의 공유 폴더에 저장되어 관리되는 방식이다.

- 개발자들은 개발이 완료된 파일을 약속된 공유 폴더에 매일 복사한다.

- 담당자는 공유 폴더의 파일을 자기 PC로 복사한 후 컴파일 하여 이상 유무를 확인한다.

- 이상 유무 확인 과정에서 파일의 오류가 확인되면, 해당 파일을 등록한 개발자에게 수정을 의뢰한다.

- 파일에 이상이 없다면 다음날 각 개발자들이 동작 여부를 다시 확인한다.

- 파일을 잘못 복사하거나 다른 위치로 복사하는 것에 대비하기 위해 파일의 변경사항을 데이터베이스에 기록하여 관리한다.

- 종류에는 SCSS, RCS, PVCS, QVCS 등이 있다.

 

2. 클라이언트/서버 방식

- 클라이언트/서버 방식은 버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식으로, 다음과 같은 특징이 있다.

- 서버의 자료를 개발자별로 자신의 PC(클라이언트)로 복사하여 작업한 후 변경된 내용을 서버에 반영한다.

- 모든 버전 관리는 서버에서 수행된다.

- 하나의 파일을 서로 다른 개발자가 작업할 경우 경고 메시지를 출력한다.

- 서버에 문제가 생기면, 서버가 복구되기 전까지 다른 개발자와의 협업 및 버전 관리 작업은 중단된다.

- 종류에는 CVS, SVN(Subversion), CVSNT, Clear Case, CMVC, Perforce 등이 있다.

 

3. 분산 저장소 방식

- 버전 관리 자료가 하나의 원격 저장소와 분산된 개발자 PC의 로컬 저장소에 함께 저장되어 관리되는 방식이다.

- 개발자별로 원격 저장소의 자료를 자신의 로컬 저장소로 복사하여 작업한 후 변경된 내용을 로컬 저장소에서 우선 반영(버전 관리)한 다음 이를 원격 저장소에 반영한다.

- 로컬 저장소에서 버전 관리가 가능하므로 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용하여 작업 할 수 있다.

- 종류에는 Git, GNU arch, DVCS, Bazzar, Mercurial, TeamWare, Bitkeeper, Plastic SCM 등이 있다.

 

4. Subversion(서브버저, SVN)

- CVS를 개선한 것으로, 아파치 소프트웨어 재단에서 2000년에 발표하였다.

- 클라이언트/서버 구조로, 서버(저장소, Repository)에는 최신 버전의 파일들과 변경 내역이 관리된다.

- 서버의 자료를 클라이언트로 복사해와 작업한 후 변경 내용을 서버에 반영(Commit)한다.

- 모든 개발 작업은 trunk 디렉터리에서 수행되며, 추가 작업은 branches 디렉터리 안에 별도의 디렉터리를 만들어 작업을 완료한 후 trunk 디렉터리와 병합한다.

- 커밋(Commit) 할 때마다 리비전(Revision) 1씩 증가한다.

- 클라이언트는 대부분의 운영체제에서 사용되지만, 서버는 주로 유닉스를 사용한다.

- 소스가 오픈되어 있어 무료로 사용할 수 있다.

- CVS의 단점이었던 파일이나 디렉터리의 이름 변경, 이동 등이 가능하다.

Subversion

명령어

Add : 새로운 파일이나 디렉터리를 버전 관리 대상으로 등록한다.

Add로 등록되지 않은 대상은 commit이 적용되지 않는다.

Commit: 버전 관리 대상으로 등록된 클라이언트의 소스 파일을 서버의 소스 파일에 적용한다.

Update: 서버의 최신 commit 이력을 클라이언트의 소스 파일에 적용한다.

Commit 전에 매번 update를 수행하여 클라이언트에 적용되지 않은 서버의 변동 내역을 클라이언트에 적용한다.

Checkout: 버전 관리 정보와 소스 파일을 서버에 클라이언트로 받아온다.

Lock/unlock: 서버의 소스파일이나 디렉터리를 잠그거나 해제한다.

Import : 아무것도 없는 서버의 저장소에 맨 처음 소스 파일을 저장하는 명령으로, 한 번 사용하면 다시 사용하지 않는다.

Export : 버전 관리에 대한 정보를 제외한 순수한 소스 파일만을 서버에서 받아온다.

Info: 지정한 파일에 대한 위치나 마지막 수정 일자 등에 대한 정보를 표시한다.

Diff: 지정된 파일이나 경로에 대해 이전 리비전과의 차이를 표시한다.

Merge: 다른 디렉터리에서 작업된 버전 관리 내역을 기본 개발 작업과 병합한다.

 

5. Git()

- Git은 리누스 토발즈가 2005년 리눅스 커널 개발에 사용할 관리 도구로 개발한 이후 주니오 하마노에 의해 유지 보수되고 있다.

- Git은 분산 버전 관리 시스템으로 2개의 저장소, 즉 지역 저장소와 원격 저장소가 존재한다.

- 지역 저장소는 개발자들이 실제 개발을 진행하는 장소로, 버전 관리가 수행된다.

- 원격 저장소는 여러 사람들이 협업을 위해 버전을 공동 관리하는 곳으로, 자신의 버전 관리 내역을 반영하거나 다른 개발자의 변경 내용을 가져올 때 사용한다.

- 버전 관리가 지역 저장소에서 진행되므로 버전 관리가 신속하게 처리되고, 원격 저장소나 네트워크에 문제가 있어도 작업이 가능하다.

- 브랜치를 이용하면 기본 버전 관리 틀에 영향을 주지 않으면서 다양한 형태의 기능 테스팅이 가능하다.

- 파일의 변화를 스냅샷으로 저장하는데, 스냅샷은 이전 스냅샷의 포이터를 가지므로 버전의 흐름을 파악할 수 있다.

Git의 주요 명령어

Add : 작업 내영을 지역 저장소에 저장하기 위해 스테이징 영역에 추가한다.

- ‘-all’ 옵션으로 작업 디렉터리의 모든 파일을 스테이징 영역에 추가할 수 있다.

 

Commit: 작업 내역을 지역 저장소에 저장한다.

 

Branch: 새로운 브랜치를 생성한다.

최초로 Commit을 하면 마스터 브랜치가 생성된다.

- commit할 때마다 해당 브랜치는 가장 최근의 commit한 내용을 가리키게 된다.

- ‘-d’옵션으로 브랜치를 삭제할 수 있다.

 

Checkout: 지정한 브랜치로 이동한다.

- 현재 작업 중인 브랜치는 HEAD 포인터가 가리키는데, checkout 명령을 통해 HEAD 포인터를 지정한 브랜치로 이동시킨다.

 

Merge: 지정한 브랜치의 변경 내역을 현재 HEAD 포인터가 가리키는 브랜치에 반영함으로써 두 브랜치를 병합한다.

 

Init: 지역 저장소를 생성한다.

 

Remote Add : 원격 저장소에 연결한다.

 

Push : 로컬 저장소의 변경 내역을 원격 저장소에 반영한다.

 

Fetch : 원격 저장소의 변경 이력만을 지역 저장소로 가져와 반영한다.

 

Clone : 원격 저장소의 전체 내용을 지역 저장소로 복제한다.

 

Fork: 지정한 원격 저장소의 내요을 자신의 원격 저장소로 복제한다.

Section 43 디지털 저작권 관리(DRM)

 

1. 저작권의 개요

- 소설, , 논문, 강연, 연술, 음악, 연극, 무용, 회화, 서예, 건축물, 사진, 영상, 지도, 도표, 컴퓨터 프로그램 저작물 등에 대하여 창작자가 가지는 배타적 독점적 권리로 타인의 침해를 받지 않을 고유한 권한이다.

 

- 컴퓨터 프로그램들과 같이 복제하기 쉬운 저작물에 대해 불법 복제 및 배포 등을 막기 위한 기술적인 방법을 통칭해 저작권 보호 기술이라고 한다.

 

2. 디지털 저작권 관리(DRM; Digital Right Management)의 개요

- 디지털 저작권 관리는 저작권자가 배포한 디지털 콘텐츠가 저작권자가 의도한 용도로만 사용되도록 디지털 콘텐츠의 생성, 유동, 이용까지의 전 과정에 걸쳐 사용되는 디지털 콘텐츠 관리 및 보호 기술이다.

- 원본 콘텐츠가 아날로그인 경우에는 디지털로 변환한 후 패키저에 의해 DRM 패키징을 수행한다.

- 콘텐츠의 크기에 따라 음원이나 문서와 같이 크기가 작은 경우에는 사용자가 콘텐츠를 요청하는 시점에서 실시간으로 패키징을 수행하고, 크기가 큰 경우에는 미리 패키징을 수행한 후 배포한다.

- 패키징을 수행하면 콘텐츠에는 암호화된 저작권자의 전자서명이 포함되고 저작권자가 설정한 라이선스 정보가 클리어링 하우스에 등록된다.

- 사용자가 콘텐츠를 사용하기 위해서는 클리어링 하우스에 등록된 라이선스 정보를 통해 사용자 인증과 콘텐츠 사용 권한 소유 여부를 확인받아야 한다.

- 종량제 방식을 적용한 소프트웨어의 경우 클리어링 하우스를 통해 서비스의 실제 사용량을 측정하여 이용한 마큼의 요금을 부여한다.

 

3. 디지털 저작권 관리의 흐름도

- 클리어링 하우스 : 저작권에 대한 사용 권한, 라이선스 발급, 사용량에 따른 결제 관리 등을 수행하는 곳

- 콘텐츠 제공자: 콘텐츠를 제공하는 저작권자

- 패키저: 콘텐츠를 메타 데이터와 함께 배포 가능한 형태로 묶어 암호화 하는 프로그램

- 콘텐츠 분배자 : 암호화된 콘텐츠를 유통하는 곳이나 사람

- 콘텐츠 소비자: 콘텐츠를 구매해서 사용하는 주체

- DRM 컨트롤러 : 배포된 콘텐츠의 이용 권한을 통제하는 프프로그램

- 보안 컨테이너 : 콘텐츠 원본을 안전하게 유통하기 위한 전자적 보안 장치

 

4. 디지털 저작권 관리의 기술 요소

암호화 : 콘텐츠 및 라이선스를 암호화하고 전자 서명을 할 수 있는 기술

키 관리: 콘텐츠를 암호화한 키에 대한 저장 및 분배 기술

암호화 파일 생성: 콤텐츠를 암호화된 콘텐츠로 생성하기 위한 기술

식별 기술: 콘텐츠에 대한 식별 체계 표현 기술

저작권 표현 : 라이선스의 내용 표현 기술

정책 관리: 라이선스 발급 및 사용에 대한 정책 표현 및 관리 기술

크랙 방지 : 크랙에 의한 콘텐츠 사용 방지 기술

인증 : 라이선스 발급 및 사용의 기준이 되는 사용자 인증 기술

 

 

Section 47 소프트웨어 버전 관리 도구

1. 공유 폴더 방식

- 버전관리 자료가 로컬 컴퓨터의 공유 폴더에 저장되어 관리되는 방식이다.

- 개발자들은 개발이 완료된 파일을 약속된 공유 폴더에 매일 복사한다.

- 담당자는 공유 폴더의 파일을 자기 PC로 복사한 후 컴파일 하여 이상 유무를 확인한다.

- 이상 유무 확인 과정에서 파일의 오류가 확인되면, 해당 파일을 등록한 개발자에게 수정을 의뢰한다.

- 파일에 이상이 없다면 다음날 각 개발자들이 동작 여부를 다시 확인한다.

- 파일을 잘못 복사하거나 다른 위치로 복사하는 것에 대비하기 위해 파일의 변경사항을 데이터베이스에 기록하여 관리한다.

- 종류에는 SCSS, RCS, PVCS, QVCS 등이 있다.

 

2. 클라이언트/서버 방식

- 클라이언트/서버 방식은 버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식으로, 다음과 같은 특징이 있다.

- 서버의 자료를 개발자별로 자신의 PC(클라이언트)로 복사하여 작업한 후 변경된 내용을 서버에 반영한다.

- 모든 버전 관리는 서버에서 수행된다.

- 하나의 파일을 서로 다른 개발자가 작업할 경우 경고 메시지를 출력한다.

- 서버에 문제가 생기면, 서버가 복구되기 전까지 다른 개발자와의 협업 및 버전 관리 작업은 중단된다.

- 종류에는 CVS, SVN(Subversion), CVSNT, Clear Case, CMVC, Perforce 등이 있다.

 

3. 분산 저장소 방식

- 버전 관리 자료가 하나의 원격 저장소와 분산된 개발자 PC의 로컬 저장소에 함께 저장되어 관리되는 방식이다.

- 개발자별로 원격 저장소의 자료를 자신의 로컬 저장소로 복사하여 작업한 후 변경된 내용을 로컬 저장소에서 우선 반영(버전 관리)한 다음 이를 원격 저장소에 반영한다.

- 로컬 저장소에서 버전 관리가 가능하므로 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용하여 작업 할 수 있다.

- 종류에는 Git, GNU arch, DVCS, Bazzar, Mercurial, TeamWare, Bitkeeper, Plastic SCM 등이 있다.

 

4. Subversion(서브버저, SVN)

- CVS를 개선한 것으로, 아파치 소프트웨어 재단에서 2000년에 발표하였다.

- 클라이언트/서버 구조로, 서버(저장소, Repository)에는 최신 버전의 파일들과 변경 내역이 관리된다.

- 서버의 자료를 클라이언트로 복사해와 작업한 후 변경 내용을 서버에 반영(Commit)한다.

- 모든 개발 작업은 trunk 디렉터리에서 수행되며, 추가 작업은 branches 디렉터리 안에 별도의 디렉터리를 만들어 작업을 완료한 후 trunk 디렉터리와 병합한다.

- 커밋(Commit) 할 때마다 리비전(Revision) 1씩 증가한다.

- 클라이언트는 대부분의 운영체제에서 사용되지만, 서버는 주로 유닉스를 사용한다.

- 소스가 오픈되어 있어 무료로 사용할 수 있다.

- CVS의 단점이었던 파일이나 디렉터리의 이름 변경, 이동 등이 가능하다.

Subversion

명령어

Add : 새로운 파일이나 디렉터리를 버전 관리 대상으로 등록한다.

Add로 등록되지 않은 대상은 commit이 적용되지 않는다.

Commit: 버전 관리 대상으로 등록된 클라이언트의 소스 파일을 서버의 소스 파일에 적용한다.

Update: 서버의 최신 commit 이력을 클라이언트의 소스 파일에 적용한다.

Commit 전에 매번 update를 수행하여 클라이언트에 적용되지 않은 서버의 변동 내역을 클라이언트에 적용한다.

Checkout: 버전 관리 정보와 소스 파일을 서버에 클라이언트로 받아온다.

Lock/unlock: 서버의 소스파일이나 디렉터리를 잠그거나 해제한다.

Import : 아무것도 없는 서버의 저장소에 맨 처음 소스 파일을 저장하는 명령으로, 한 번 사용하면 다시 사용하지 않는다.

Export : 버전 관리에 대한 정보를 제외한 순수한 소스 파일만을 서버에서 받아온다.

Info: 지정한 파일에 대한 위치나 마지막 수정 일자 등에 대한 정보를 표시한다.

Diff: 지정된 파일이나 경로에 대해 이전 리비전과의 차이를 표시한다.

Merge: 다른 디렉터리에서 작업된 버전 관리 내역을 기본 개발 작업과 병합한다.

 

5. Git()

- Git은 리누스 토발즈가 2005년 리눅스 커널 개발에 사용할 관리 도구로 개발한 이후 주니오 하마노에 의해 유지 보수되고 있다.

- Git은 분산 버전 관리 시스템으로 2개의 저장소, 즉 지역 저장소와 원격 저장소가 존재한다.

- 지역 저장소는 개발자들이 실제 개발을 진행하는 장소로, 버전 관리가 수행된다.

- 원격 저장소는 여러 사람들이 협업을 위해 버전을 공동 관리하는 곳으로, 자신의 버전 관리 내역을 반영하거나 다른 개발자의 변경 내용을 가져올 때 사용한다.

- 버전 관리가 지역 저장소에서 진행되므로 버전 관리가 신속하게 처리되고, 원격 저장소나 네트워크에 문제가 있어도 작업이 가능하다.

- 브랜치를 이용하면 기본 버전 관리 틀에 영향을 주지 않으면서 다양한 형태의 기능 테스팅이 가능하다.

- 파일의 변화를 스냅샷으로 저장하는데, 스냅샷은 이전 스냅샷의 포이터를 가지므로 버전의 흐름을 파악할 수 있다.

Git의 주요 명령어

Add : 작업 내영을 지역 저장소에 저장하기 위해 스테이징 영역에 추가한다.

- ‘-all’ 옵션으로 작업 디렉터리의 모든 파일을 스테이징 영역에 추가할 수 있다.

 

Commit: 작업 내역을 지역 저장소에 저장한다.

 

Branch: 새로운 브랜치를 생성한다.

최초로 Commit을 하면 마스터 브랜치가 생성된다.

- commit할 때마다 해당 브랜치는 가장 최근의 commit한 내용을 가리키게 된다.

- ‘-d’옵션으로 브랜치를 삭제할 수 있다.

 

Checkout: 지정한 브랜치로 이동한다.

- 현재 작업 중인 브랜치는 HEAD 포인터가 가리키는데, checkout 명령을 통해 HEAD 포인터를 지정한 브랜치로 이동시킨다.

 

Merge: 지정한 브랜치의 변경 내역을 현재 HEAD 포인터가 가리키는 브랜치에 반영함으로써 두 브랜치를 병합한다.

 

Init: 지역 저장소를 생성한다.

 

Remote Add : 원격 저장소에 연결한다.

 

Push : 로컬 저장소의 변경 내역을 원격 저장소에 반영한다.

 

Fetch : 원격 저장소의 변경 이력만을 지역 저장소로 가져와 반영한다.

 

Clone : 원격 저장소의 전체 내용을 지역 저장소로 복제한다.

 

Fork: 지정한 원격 저장소의 내요을 자신의 원격 저장소로 복제한다.

  Comments,     Trackbacks