정보처리기사 필기 - 3과목 운영체제


1장 운영체제의 개요


077 시스템 소프트웨어의 개념과 구성


① 시스템 소프트웨어의 개념


· 시스템 소프트웨어는 시스템 전체는 작동시키는 프로그램으로, 프로그램을 주기억장치에 적재시키거나 인터럽트 관리, 장치 관리, 언어 번역 등의 기능 담당

· 시스템 소프트웨어의 가장 대표적인 프로그램으로 운영체제가 있으며 그 외에는 언어 번역 프로그램, 매크로 프로세서, 링커, 라이브러리, 정렬/합병 프로그램, 로더 등이 있음


② 시스템 소프트웨어의 구성


· 시스템 소프트웨어 기능별로 분류


제어 프로그램

- 감시 프로그램

- 작업 제어 프로그램 : Job Scheduler, Master Scheduler

- 자료 관리 프로그램


처리 프로그램

- 언어 버역기 : 어셈블러, 컴파일러, 인터프리터

- 서비스 프로그램 : 연결 편집기, 정렬/합병 프로그램, 라이브러리안, 유틸리티 프로그램

- 문제 프로그램


③ 제어 프로그램(Control Program)


제어 프로그램은 시스템 전체의 작동 상태 감시, 작업의 순서 지정, 작업에 사용되는 데이터 관리 등의 역할을 수행하는 것으로 다음과 같이 구분


· 감시 프로그램(Supervisor Program) : 제어 프로그램 중 가장 중요한 역할을 담당하는 것으로, 각종 프로그램의 실행과 시스템 전체의 작동 상태를 감시·감독하는 프로그램

· 작업 제어 프로그램(Job Control Program) : 어떤 업무를 처리하고 다른 업무로의 이행을 자동으로 수행하기 위한 준비 및 그 처리에 대한 완료를 담당하는 프로그램으로, 작업의 연속 처리를 위한 스케줄 및 시스템 자원 할당 담당

 Job Scheduler

 여러 개의 작업을 연속적으로 처리하기 위하여 특정 작업이 끝났을 때 다음 작업을 준비시키는 역할을 하는 프로그램

 - 컴퓨터는 한순간에 두 개 이상의 동작을 동시에 수행하지 못함. 그러므로 여러 프로그램을 실행시키면 그 중 어느 하나의 프로그램만 처리하고 실행이 종료되면 그 다음 프로그램을 처리. 이때 프로그램들의 실행 순서를 정하고 준비시켜 주는 것

 Master Scheduler

 컴퓨터 시스템과 운영자(Operator) 사이에서 정보를 주고받을 수 있도록 중개자 역할을 담당하는 프로그램

 - DOS나 WINDOWS에서 명령어 처리기인 COMMAND.COM이 이 역할을 하는데, DOS를 사용하는 컴퓨터 환경을 생각해 보면 쉽게 그 역할 이해 가능. DOS 환경에서는 C:\>와 함께 커서가 나타나있을 때 사용자가 직접 명령을 입력한 후 Enter를 누르면 Master Scheduler가 그 명령을 받아들여 명령에 대한 프로그램을 찾아 실행시키고, 프로그램 실행이 끝나면 C:\>와 커서를 다시 나타내어 사용자에게 명령을 입력해도 된다는 것을 알려줌

· 자료 관리 시스템(Data Management Program) : 주기억장치와 보조기억장치 사이의 데이터 전송과 보조기억장치의 자료 갱신 및 유지보수 기능을 수행하는 프로그램


④ 처리 프로그램(Processing Program)


제어 프로그램의 지시를 받아 사용자가 요구한 문제를 해결하기 위한 프로그램으로, 언어 번역 프로그램과 서비스 프로그램, 문제 프로그램 등으로 구분하며, 다음과 같은 프로그램 과정에서 사용 가능

[그림 1] 프로그램 처리 과정

· 언어 번역 프로그램(Language Translate Program) : 원시 프로그램(Source Program)을 기계에 형태의 목적 프로그램(Obcjet Program)으로 번역하는 프로그램을, 어셈블러(Assembler), 컴파일러(Compiler), 인터프리터(Interpreter)

· 서비스 프로그램(Service Program) : 컴퓨터를 효율적으로 사용할 수 있는 사용 빈도가 높은 프로그램

 연결 편집기(Linkage Editor), 링커(Linker)

 언어 번역 프로그램이 생성한 목적 프로그램과 또 다른 목적 프로그램, 라이브러리 함수 등을 연결하여 실행 가능한 프로그램(로드 모듈)을 만드는 프로그램

 정렬/합병 프로그램(Sort/Merge Program)

 데이터를 일정한 기준으로 정렬하거나 정려로딘 두 개 이상의 파일을 하나로 합치는 프로그램

 라이브러리안(Librarian)

 프로그램의 라이브러리를 유지·관리하는 프로그램

 유틸리티 프로그램(Utility Program)

 사용자의 편의를 도모하기 위한 프로그램으로 텍스트 에디터, 디버거 등이 있음

(텍스트 에디터 : 원시프로그램, 데이터 파일 등을 작성·수정 할 수 있는 문서 편집기 프로그램

디버거 : 사용자가 작성한 프로그램의 오류를 찾아내어 수정할 수 있도록 지원하는 프로그램)

· 문제 프로그램(Problem Program) : 특정 업무 및 문제 해결을 위해 사용자가 작성한 프로그램



078 운영체제의 개념


① 운영체제의 정의


· 운영체제(OS, Operating System)는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임으로 Windows 98, XP등이 여기 속함

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

· 사용자 / 응용 프로그램 / 유틸리티 / 운영체제 / 하드웨어


② 운영체제의 목적


운영체제의 목적 : 처리 능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축


 처리 능력(Throughput)

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

 반환 시간(Turn Around Time)

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

 사용 가능도(Availability)

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

 신뢰도(Reliability)

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


③ 운영체제의 기능


· 프로세서(처리기, Processor), 기억장치(주기억장치, 보조기억장치), 입·출력 장치, 파일 및 정보 등의 자원 관리

· 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능 제공(스케줄링 : 어떤 자원을 누가, 언제, 어떤 방식으로 사용할지를 결정해 주는 것)

· 사용자와 시스템 간의 편리한 인터페이스 제공

· 시스템의 각종 하드웨어와 네트워크를 관리·제어

· 데이터를 관리하고, 데이터 및 자원의 공유 기능 제공

· 시스템의 오류를 검사하고 복구함

· 자원 보호 기능 제공

· 입·출력에 대한 보조 기능 제공

· 가상 계산기 기능 제공(가상 계산기 : 한 대의 컴퓨터를 여러 대의 컴퓨터처럼 보이게 하는 가상 컴퓨터 운영체제에 의해 만들어지며 사용자의 관점에서는 가상 컴퓨터가 실제 컴퓨터처럼 보일 수도 있고 아주 다르게 보일 수도 있음)


④ 운영체제의 주요 자원 관리


 자원

 기능

 프로세스 관리

 · 프로세스 스케줄링 및 동기화 관리 담당(프로세스 : 일반적으로 실행중인 프로그램)

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

 기억장치 관리

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

 주변장치 관리

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

 파일 관리

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


⑤ 운영체제의 종류


· 운영체제의 종류 : Windows98, Windows XP, UNIX, LINUX, MS-DOS

· Windows 98, Windows XP는 개인용, Windows NT, UNIX, LINUX는 서버용 운영체제

· 단일 작업 처리 시스템(Single Tasking System)

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

- DOS에서 워드 작업을 하다가 PC 통신을 하려면 워드 작업을 종료해야 함

· 다중 작업 처리 시스템(Multi-Tasking System)

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

- Windows 98, Windows NT, UNIX, LINUX에서 워드 작업을 하고 있는 상태에서 음악을 들으며 엑셀, 그림판 등의 프로그램을 실행시켜 놓고, 필요할 때마다 해당 프로그램으로 바로 바로 전환하여 사용 가능



079 운영체제의 기법


① 일괄 처리 시스템


일괄 처리 시스템(Batch Processing System)은 초기의 컴퓨터 시스템에서 사용된 형태로, 일정량 또는 일정 기간 도안 데이터를 모아서 한꺼번에 처리하는 방식


· 일괄 처리를 위해 적절한 작업 제어 언어(JCL; Job Control Language)를 제공해야함

· 컴퓨터 시스템을 효율적으로 사용 가능

· 반환 시간(Turn Around Time)이 늦지만 하나의 작업이 모든 자원을 독접하므로 CPU 유효시간이 줄어듦

(CPU 유효시간 : CPU의 처리 시간과 입·출력장치에서의 처리 시간 차이로 인해 CPU를 사용할 수 있는 상태임에도 CPU가 작업을 하지 않고 쉬고 있는 시간)

· 급여 시간, 지불 계산, 연말 결산 등의 업무에 사용됨


② 다중 프로그래밍 시스템


다중 프로그래밍 시스템(Multi-Programming System)은 하나의 CPU와 주기억장치를 이용하여러 개의 프로그램을 동시에 처리는 방식


· 하나의 주기억장치에 두 개 이상의 프로그램을 기억시켜 놓고, 하나의 CPU와 대화하면서 동시에 처리

· CPU의 사용률과 처리량 증가 


③ 시분할 시스템


시분할 시스템(Time Sharing System)은 여러 명의 사용자가 사용하는 시스템에서 컴퓨터가 사용자들의 프로그램을 번갈아가며 처리해 줌으로써 각 사용자에게 독리된 컴퓨터를 사용하는 느낌을 주는 것으로, 라운드 로빈(Round Robin)방식이라고도 함


· 여러 사용자가 각자의 단말 장치를 통하여 동시에 운영체제와 대화하면서 각자의 프로그램을 실행함

· 하나의 CPU는 같은 시점에서 여러 개의 작업을 동시에 수행할 수 없기 때문에, CPU의 전체 사용 시간을 작은 작업 시간량(Time Slice, Quantum)으로 나누어서 그 시간량 동안만 번갈아가면서 CPU를 할당하여 각 작업 처리

· 다중 프로그래밍 방식과 결합하여 모든 작업이 동시에 진행되는 것처럼 대화식 처리 가능

· 시스템의 전체 효율은 좋아지나 개인별 사용자 입장에서는 반응 속도가 느려질 수 있음

· 각 작업에 대한 응답시간을 최소한으로 줄이는 것을 목적으로 하며, 하드웨어를 보다 능률적으로 사용 가능


④ 다중 처리 시스템


다중 처리 시스템(Multi-Processing System)은 여러 개의 CPU와 하나의 주기억장치를 이용하여 여러 개의 프로그램을 동시에 처리하는 방식


· 하나의 CPU가 고장나더라도 다른 CPU를 이용하여 업무를 처리할 수 있으므로 시스템의 신뢰성과 안정성 높음

· 여러 CPU는 하나의 메모리를 공유하면서 단일 운영체제에 의해 관리됨

· 프로그램의 처리 속도는 빠르지만 기억장치, 입·출력 장치 등의 자원 공유에 대한 문제점을 해결해야 함


⑤ 실시간 처리 시스템


실시간 처리 시스템(Real Time Processing System)은 데이터 발생 즉시, 또는 데이터 처리 요구가 있는 즉시 처리하여 결과를 산출하는 방식


· 처리 시간 단축, 처리 비용 절감

· 우주선 운행, 교통 제어, 레이터 추적기, 핵물리학 실험 및 데이터 수집, 전화 교환장치의 제어, 은행의 온라인 업무 등 시간에 제한을 두고 수행되어야 하는 작업에 사용됨


⑥ 다중 모드 처리


다중 모드 처리(Multi-Mode Processing)는 일괄 처리 시스템, 시분할 시스템, 다중 처리 시스템, 실시간 처리 시스템에서 모두 제공하는 방식


⑦ 분산 처리 시스템


분산 처리 시스템(Distributed Processing System)은 여러 개의 컴퓨터(프로세서)를 통신 회선으로 연결하여 하나의 작업을 처리하는 방식


· 각 단말장치나 컴퓨터 시스템은 고유의 운영체제와 CPU, 메모리를 가지고 있음

※ 운영체제 운용 기법의 발달 과정

1세대 : 일괄 처리 시스템 → 2세대 : 다중 프로그래밍 시스템/다중 처리 시스템/시분할 시스템/실시간 처리 시스템 → 3세대 : 다중 모드 4세대 : 분산 처리 시스템



080 컴파일러와 인터프리터


① 프로그래밍 언어의 개요


· 프로그래밍 언어는 컴퓨터를 이용하여 특정 문제를 해결하기 위한 프로그램을 작성하기 위해 사용되는 언어

· 프로그래밍 언어는 일반적으로 저급 언어(기계어, 어벰블리어)와 고급 언어(컴파일러 언어)로 분류됨· 


② 저급 언어


 기계어

 · 컴퓨터 직접 이해할 수 있는 언어

 · 0과 1의 2진수 형태로 표현되며 수행 시간이 빠름

 · CPU에 내장된 명령들을 직접 사용하는 것으로, 프로그램을 작성하고 이해하기가 어려움

 · 기종마다 기계어가 다르므로 언어의 호환성 없음

 어셈블리어

 · 기계어와 1:1로 대응되는 기호로 이루어진 언어로, 니모닉(Mnemonic, 상징어)언어라고도 함

 · 하드웨어 제어에 주로 사용되며, 언어의 호환성 없음

 · 컴퓨터가 직접 이해할 수 없으므로 어셈블리어로 작성된 프로그램은 어셈블러를 사용하여 기계어로 번역해야 함


③ 고급 언어


· 고급 언어(High Level Language)는 컴파일러 언어라고도 하며, 인간이 실생활에서 사용하는 자연어와 비슷한 형태 및 구조

· 하드웨어에 대한 깊은 지식 없어도 프로그램 작성과 수정 용이함

· 컴퓨터가 이해할 수 있는 기계어로 번역하기 위해 컴파일러나 인터프리터가 사용됨

· 기계어와 어셈블리어를 제외한 C, BASIC, COBOL, ALGOL 등의 언어가 고급 언어에 해당됨


④ 컴파일러와 인터프리터의 개요


· 컴파일러와 인터프리터는 고급 언어로 원시 프로그램(Source Program)을 목적 프로그램(Object Program)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분


⑤ 컴파일러


· 컴파일러는 고급 언어로 작성된 프로그램 전체를 목적 프로그램으로 번역한 후, 링킹 작업을 통해 컴퓨터에서 실행 가능한 실행 프로그램 생성

· 번역과 실행 과정을 거쳐야 하기 때문에 번역 과정이 번거롭고 번역 시간이 오래 걸리지만, 한번 번역한 후에는 다시 번역하지 않으므로 실행 속도 빠름

· 컴파일러를 사용하는 언어 : FORTRAN, COBOL, PASCAL, C, C++, PL/1


인터프리터


· 인터프리터는 고급 언어로 작성된 프로그램을 한 줄 단위로 받아들여 번역하고, 번역과 동시에 프로그램을 한 줄 단위로 즉시 실행시키는 프로그램

· 프로그램이 직접 실행되므로 목적 프로그램이 생성되지 않음

· 줄 단위로 번역·실행되기 때문에 시분할 시스템에 유용하며 원시 프로그램의 변화에 대한 반응이 빠름

· 번역 속도는 빠르지만 프로그램 실행 시 매번 번역해야 하므로 실행 속도는 느림

· 인터프리터를 사용하는 언어 : BASIC, SNOBOL, LISP, APL

· CPU의 사용 시간 낭비 큼 


※ 컴파일러와 인터프리터의 비교

구분

컴파일러

인터프리터

번역 단위

전체

행(줄)

목적 프로그램

생성함

생성하지 않음

실행 속도

빠름

느림

번역 속도

느림

빠름

관련 언어

FORTRAN, COBOL, C, ALGOL 등

BAIC, LISP, APL, SNOBOL 등



081 어셈블리어와 어셈블러


① 어셈블리어


어셈블리어의 개요

어셈블리어(Assembly Language)는 사용자가 이해하기 어려운 기계어 대신에 명령 기능을 쉽게 연상할 수 있는 기호로 기계어와 1:1로 대응시켜 코드화한 기호 언어


· 어셈블리어로 작성한 원시 프로그램은 어셈블러를 통해 목적 프로그램(기계어)으로 어셈블하는 과정 거침

· 사용자가 프로그램을 쉽게 읽고 이해 가능

· 프로그램에 기호화된 명령 및 주소 사용

· 어셈블리어의 기본 동작은 동일하지만 작성한 CPU마다 사용되는 어셈블리어가 다를 수 있음

· 어셈블리어에서 사용되는 명령

 의사(지시) 명령

 = 어셈블러 명령

 원시 프로그램을 어셈블할 때 어셈블러가 해야 할 동작을 지시하는 명령

 ex) START, END, USING, DROP, EQU 등

 실행(집행) 명령

 = 어셈블리어 명령

 데이터를 처리하는 명령

 ex) A, AH, AR, S, SR, L, LA, ST, C, BNE 등


어셈블리어의 명령어 형식

① Lable : 데이터를 기억할 기억장소, 또는 분기할 위치, 기호 상수 등에 대한 기호(Symbol)를 기술하는 부분으로 생략 가능

② OP : 명령어(OP-code)를 기술하는 부분

③ Operand : OP-code가 연산을 수행하기 위한 연산의 대상이 되는 Literal(상수, 데이터)이나 주소, Register 번호 등을 기술하는 부분


② 어셈블러와 어셈블 과정


어셈블러(Assembler)는 어셈블리어로 작성된 원시 프로그램을 기계어로 된 목적 프로그램을 어셈블하는 언어 번역 프로그램


· 어셈블리어로 작성한 원시 프로그램을 목적 프로그램으로 어셈블하는 과정은 크게 2단계(Pass)로 나누어서 수행됨

· 두 개의 Pass를 사용하면 기호를 정의하기 전에 사용할 수 있는 프로그램 작업이 용이함


 ※ 단일 패스 어셈블러와 이중 패스 어셈블러 / 크로스 어셈블러

단일 패스 어셈블러와 이중 패스 어셈블러

· 단일 패스 어셈블러(One Pass Assembler) : 원시 프로그램을 하나의 명령문을 읽는 즉시 기계어로 번역하여 목적 프로그램 만듦

· 이중 패스 어셈블러(Two Pass Assembler) : 언시 프로그램을 앞에서부터 끝까지 읽어서 1단계의 작업을 수행한 후 다시 처음부터 읽으면서 1단계에서 수행한 결과를 사용하여 완전한 목적 프로그램 만듦


크로스 어셈블러(Cross Assembler)

· 현재 사용하는 컴퓨터와는 다른 명령 형태로 동작하는 컴퓨터에서 사용할 프로그램을 어셈블 할 때 사용되는 어셈블러

· 현재 어셈블하는 컴퓨터가 아닌 어셈블된 프로그램을 실행시킬 컴퓨터에 맞게 목적 프로그램을 생성


Table의 종류 및 구성

어셈블리어를 목적 프로그램으로 번역하는 어셈블 과정에서 사용되는 주요 테이블의 종류와 의미

· 기계 명령어 테이블(MOT; Machine Operating Table) : 어셈블리어의 실행 명령에 대응하는 기계어(2진 연산 코드)에 대한 정보를 가지고 있는 테이블로, 어셈블러에 기본적으로 포함됨

· 의사 명령어 테이블(POT; Pseudo Operating Table) : 의사 명령과 그 명령을 처리하는 실행 루틴의 주소를 가지고 있는  테이블로, 어셈블러에 기본적으로 포함되어 있음

· 기호 테이블(ST; Symbol Table) : 원시 프로그램의 Label 부분에 있는 기호들을 모두 차례로 저장하는 테이블

· 리터럴 테이블(LT; Literal Table) : 원시 프로그램의 Operand 부분에 있는 Literal 들을 차례로 작성하는 테이블


Pass-1과 Pass-2 과정 비교

 구분

 Pass-1

 Pass-2

 목적

 기호와 리터럴 정의

 기호 번지에 대한 상대 번지를 생성하고, 목적 프로그램 생성

 기능

 · 기계 명령어의 길이 정의

 · 위치 계수가 (PL, LC) 관리

 · 기호들의 값을 ST에 기억

 · 사용된 리터럴들을 LT에 기억

 · 해당하는 의사 명령어 처리

 · 기계 명령어 생성

 · ST에서 기호들의 값을 찾음

 · 의사 명령어 처리

 · 리터럴 발생

 사용 관련 데이터베이스

 · 원시 프로그램(Source Program)

 · 위치 계수기(PC)

 · MOT, POT, ST, LT

 · 원시 프로그램(Source Program)의 사본

 · 위치 계수기(PC)

 · Pass-1에서 만든 ST, LT

 · MOT, POT, 베이스 레지스터 테이블

 · PRINT LINE(어셈블 결과 보고서 인쇄)

 · 목적 프로그램(Object Program)



082 매크로와 매크로 프로세서


① 매크로의 개념 및 특징


매크로(Macro)는 프로그램 작성 시 한 프로그램 내에서 동일한 코드가 반복될 경우 반복되는 코드를 한 번만 작성하여 특정 이름으로 정의한 후 그 코드가 필요할 때마다 정의된 이름을 호출하여 사용하는 것


· 일종의 부 프로그램(Sub-Program)으로 개방 서브루틴(Opened Sub-routine)이라고도 함

(매크로는 프로그램 작성 시 프로그램의 맨 위에 작성. 그래서 필요할 때마다 매크로 이름으로 매크로를 호출하여, 프로그램이 실행되면 매크로가 호출된 부분에 매크로 코드가 표시되어 확인할 수 있음. 즉 프로그램 내에서 매크로 코드를 확인할 수 있다 하여 개방 서브루틴이라고 함)

· 매크로는 문자열 바꾸기와 같이 매크로 이름이 호출되면 호출된 횟수만큼 정의된 매크로 코드가 해당 위치에 삽입되어 실행됨

· 매크로 정의 내에 또 다른 매크로 정의 가능

· 사용자의 반복적인 코드 입력 줄여줌

· 매크로 정의 형태


※ 매크로와 부 프로그램의 비교

매크로는 부 프로그램의 일종으로, 반복되는 코드를 한 번만 작성하여 사용한다는 것은 동일하지만 반복되는 코드의 처리 방식이 서로 다름

 구분

 매크로

 부 프로그램

 다른 이름

 개방 서브루틴(Opened Sub-routine)

 폐쇄 서브루틴(Closed Sub-routine)

 처리 방식

 주 프로그램의 매크로 호출 명령이 있는 위치마다 매크로 내용을 삽입하여 확장된 프로그램을 만들어 놓고 연속적으로 실행

 부 프로그램이 호출될 때마다 제어가 부 프로그램으로 넘어갔다가 다시 주 프로그램으로 복귀됨

 특징

 · 코딩이 간편해짐

 · 부 프로그램은 매크로에 비해 프로그램의 크기가 작아지고, 기억장소가 절약되지만 실행 시간은 약간 느려짐


② 매크로 관련 용어


· 매크로 정의(Macro Define) : 프로그래머가 일정한 형식에 따라 매크로를 작성하는 것

· 매크로 호출(Macro Call) : 정의된 매크로 이름을 주 프로그램에 기술하는 것

· 매크로 확장(Macro Extension) : 매크로 호출 부분에 정의된 매크로 코드를 삽입하는 것

· 매크로 라이브러리 : 여러 프로그램에서 공통적으로 자주 사용되는 매크로들을 모아 놓은 라이브러리


③ 매크로 프로세서


매크로 프로세서(Macro Processor)는 원시 프로그램에 존재하는 매크로 호출 부분에 매크로(Mecro) 프로그램을 삽입하여 확장된 원시 프로그램을 생성하는 시스템 소프트웨어


매크로 프로세서의 처리 과정

매크로가 포함된 원시 프로그램에서 매크로 프로세서는 다음과 같은 과정을 거쳐 확장된 원시 프로그램을 만듦

① 매크로 정의 인식 : 원시 프로그램 내에 매크로의 시작을 알리는 'Macro' 명령을 인식

② 매크로 정의 저장 : 매크로를 저장하기 위해 매크로 이름과 매크로 내용을 매크로 테이블에 저장

③ 매크로 호출 인식 : 주 프로그램의 명령부(Op-code)에서 매크로 이름으로 매크로 호축을 인식

④ 매크로 확장과 인수(매개 변수) 치환 : 주 프로그램의 매크로 이름 위치에 매크로 내용과 인수를 치환하여 확장된 원시 프로그램 만듦



083 링커와 로더


① 링커(Linker), 연결 편집기(Linkage Editor)


· 링커는 언어 번역 프로그램이 생성한 목적 프로그램들과 라이브러리, 또 다른 실행 프로그램(로드 모듈) 등을 연결하여 실행 가능한 로드 모듈을 만드는 시스템 소프트웨어이며 연결 편집기(Linkage Editor)라고도 함

· 연결 기능만 수행하는 로더의 한 형태로, 링커에 의해 수행되는 작업을 링킹(Linking)이라고 함


② 로더(Loader, Module Loader)의 개념

 

· 로더는 컴퓨터 내부로 정보를 들여오거나 로드 모듈을 디스크 등의 보조기억장치로부터 주기억장치에 적재하는 시스템 소프트웨어


③ 로더의 기능


로더는 기본적으로 다음과 같은 기능을 차례로 수행하지만, 로더의 각 기능을 언어 번역 프로그램 또는 링커 등의 시스템 소프트웨어가 수행할 수도 있음


· 할당(Allocation) : 실행 프로그램을 실행시키기 위해 기억장치 내에 옮겨놓을 공간을 확보하는 기능

· 연결(Linking) : 부 프로그램 호출 시 그 부 프로그램이 할당된 기억장소의 시작 주소를 호출한 부분에 등록하여 연결하는 기능

· 재배치(Relocation) : 디스크 등의 보조기억장치에 저장된 프로그램이 사용하는 각 주소들을 할당된 기억장소의 실제 주소로 배시키는 기능

· 적재(Loading) : 실행 프로그램을 할당된 기억공간에 실제로 옮기는 기능


④ 로더의 종류


Compile And Go 로더

· 별도의 로더 없이 언어 번역 프로그램이 로더의 기능까지 수행하는 방식

· 연결 기능은 수행하지 않고 할당, 재배치, 적재 작업을 모두 언어 번역 프로그램이 담당

절대 로더(Absolute Loader)

· 목적 프로그램을 기억 장소에 적재시키는 기능만 수행하는 로더로, 로더 중 가장 간단한 프로그램으로 구성되어 있음

· 기억 장소 할당이나 연결을 프로그래머가 직접 지정하며 한번 지정한 주기억장소의 위치는 변경이 어려움

직접 연결 로더(Direct Linking Loader)

· 일반적인 기능의 로더로, 로더의 기본 기능 네 가지를 모두 수행하는 로더

· 재배치 로더(Relocation Loader), 상대(Relative Loader)

동적 적재 로더(Dynamic Loading Loader)

· 프로그램을 한꺼번에 적재하는 것이 아니라 실행 시 필요한 부분만 적재하고, 나머지 부분은 보조기억장치에 저장해두는 것으로, 호출 시 적재(Load-On-Call)

· 프로그램의 크기가 주기억장치의 크기보다 큰 경우에 유리한 방법




출처 : 2017 시나공 정보처리기사 필기

'정보처리기사 > 운영체제' 카테고리의 다른 글

6장 운영체제의 실제  (0) 2017.02.12
5장 분산 운영체제  (0) 2017.02.12
4장 정보 관리  (0) 2017.02.12
3장 기억장치 관리  (0) 2017.02.10
2장 프로세스 관리  (0) 2017.02.10

정보처리기사 필기 - 4과목 소프트웨어 공학


5장 S/W 공학의 발전적 추세


142 소프트웨어 재사용


① 재사용의 개요


소프트웨어 재사용(Software Reuse)은 이미 개발되어 인정받은 소프트웨어의 전체 혹은 일부분을 다른 소프트웨어 개발이나 유지에 사용하는 것


· 소프트웨어 개발의 품질과 생산성을 높이기 위한 방법으로, 기존에 개발된 소프트웨어와 경험, 지식 등을 새로운 소프트웨어에 적용

· 클래스, 잭체 등의 소프트웨어 요소는 소프트웨어 재사용성을 크게 향상 시킴

· 소프트웨어 재사요에 가장 많이 이용되는 것은 소스 코드(Source Code)

· 재사용이 가능한 요소 : 전체 프로그램, 부분 코드, 응용 분야에 관한 지식, 논리적인 데이터 모형, 프로세스 구조, 시험 계획, 설계에 관한 결정, 시스템 구조에 관한 지식, 요구 분석 사항, 문서화, 전문적인 기술과 개발 경험, 품질 보증, 응용 분야 지식 등

· 소프트웨어 부품(모듈)의 크기가 작고 일반적인 설계일수록 재사용률이 높다


② 재사용의 이점


· 개발 시간과 비용 단축

· 소프트웨어 품질 향상

· 소프트웨어 개발의 생산성 향상

· 프로젝트 실패의 위험 감소

· 시스템 구축 방법에 대한 지식 공유

· 시스템 명세, 설계, 코드 등 문서를 공유


③ 재사용 도입이 문제점


· 어떤 것을 재사용할 것인지 선정해야함

· 시스템에 공통적으로 사용되는 요소들을 발견해야 함

· 프로그램의 표준화가 부족

· 새로운 개발 방법론을 도입하기 어려움

· 재사용을 위한 관리 및 지원이 부족함

· 기존 소프트웨어에 재사용 소프트웨어를 추가하기 어려움

· 프로그램 언어 종속적

· 소프트웨어 요소의 내부뿐만 아니라 인터페이스 요구사항의 이해 필요

· 라이브러리 안에 포함시킬 재사용 요소의 명확한 결정 기준 없음


④ 재사용 방법


 합성 중심

 (Composition-Based)

 전자 칩과 같은 소프트웨어 부품, 즉 블록(모듈)을 만들어서 끼워 맞추어 소프트웨어를 완성시키는 방법으로, 블록 구성 방법이락도 함

 생성 중심

 (Generation-Based)

 추상화 형태로 쓰여진 명세를 구체화하여 프로그램을 만드는 방법으로, 패턴 구성 방법이라고도 함



143 소프트웨어 재공학


① 재공학의 개요


소프트웨어 재공학(Software Reengineering)은 새로운 요구에 맞도록 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 ㅜ가하여 소프트웨어 성능을 향상시키는 것


· 유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하는 문제를 염두에 두어 기존 소프트웨어의 데이터와 기능들의 개조 및 개선을 통해 유지보수성과 품질을 향상시키려는 기술

· 유지보수 생산성 향상을 통해 소프트웨어 위기를 해결하는 방법

· 기존 소프트웨어의 기능을 개조하거나 개선하므로, 예방 유지보수 측면에서 소프트웨어 위기를 해결하는 방법

· 소프트웨어 재공학도 자동화된 도구를 이용하여 소프트웨어를 분석하고 수정하는 과정을 포함

· 스프트웨어에서 발생할 수 있는 오류가 줄어 들고, 비용이 절감 됨


② 재공학의 등장 배경


· 기존 소프트웨어가 노후되어 새로운 소프트웨어로 대치해야할 경우 현재 시스템보다 훨씬 더 좋은 시스템을 만들 수 있다는 보장 없음

· 현재 소프트웨어 품질이 더 좋은 소프트웨어로 교체된다고 해도 사용상의 문제점이 없다고 장담할 수 없음

· 새로운 소프트웨어를 개발해도 기존 시스템과의 호환성이 100% 이루어질 수도 없을 뿐만 아니라, 사용자의 교육에도 많은 영향을 줄 수 있음


③ 재공학의 목표


소프트웨어 재공학은 유지보수성 및 기술 향상, 유지보수의 생산성 향상, 소프트웨어 수명 연장, 소프트웨어 요소들을 추출하여 정보 저장소에 저장하는 것을 주된 목적으로 하며, 다음과 같은 목표를 가지고 있음


· 복잡한 시스템을 다루는 방법 구현 : 시스템이 복잡해질수록 시스템을 다루는 방법이 필요하여 이를 위해 자동화 도구 사용 가능

· 다른 뷰의 생성 : 기존 시스템 개발에 대한 관점 외에 다른 방향의 관점 생성

· 잃어버린 정보의 복구 및 제거 : 시스템이 계속적인 개발을 거치면서 잃어버린 정보를 복구하거나 필요없는 정보 제거

· 부작용의 발견 : 의도되지 않았던 내용이 구현될 경우 이를 발견

· 고수준의 추상 : 추상화된 어려운 내요을 여러 형태로 추출하여 이해에 도움 줌

· 재사용 용이 : 재사용이 가능한 모듈을 추출하여 재사용이 용이하도록 함


④ 소프트웨어 재공학의 주요 활동


 분석(Analysis)

 기존 소프트웨어의 명세서를 확인하여 소프트웨어의 동작을 이해하고, 제공할 대상 선정

 개조(재구조, 재구성)

 · 개조(Restructuring)는 상대적으로 같은 추상적 수준에서 하나의 표현을 다른 표현 형태로 바꾸는 것

 · 기존 소프트웨어의 구조를 향상시키기 위하여 코드를 재구성하는 것으로 소프트웨어의 기능과 외적인 동작은 바뀌지 않음

 역공학(Reverse Engineering)

 기존 소프트웨어를 분석하여 소프트웨어 개발 과정과 데이터 처리 과정을 설명하는 분석 및 설계 정보를 재발견하거나 다시 만들어내는 작업

 · 정공학(일반적인 개발 단계)과는 반대 방향으로 기존 코드를 복구하는 방법

 · 대상 소프트웨어가 있어야 하므로 이로부터 작업 시작됨

 · 기존 소프트웨어의 구성 요소와 그 관계를 파악하여 설계도를 추출하거나, 구현과는 독립적인 추상화 표현 만듦

 · 코드 역공학 : 코드→흐름도→자료 구조도→자료 흐름도 순으로 재생

 · 데이터 역공학 : 코드→자료사전→개체 관계도 순으로 재생

 · 역공학의 가장 간단하고 오래된 형태 : 재문서화(같은 수준의 추상 표현을 새로이 만들거나 다시 제작)

 이식(Migration)

 기존 소프트웨어를 다른 운영체제나 하드웨어 환경에서 사용할 수 있도록 변환하는 작업




144 클라이언트/서버/ S/W 공학


① 클라이언트/서버 시스템의 개요


· 클라이언트/서버 시스템은 분산 시스템의 가장 대표적인 모델로, 정보를 제공하는 서버와 정보를 요구하는 클라이언트로 구성된 방식

· LAN을 통하여 클라이언트(워크스테이션, PC)와 서버가 하나의 작업을 분산, 협동 처리

· 중대형 컴퓨터보다 훨씬 적은 비용으로 지원 가능

· 처리햘 자료가 발생한 그 지역에서 처리 가능

· 고성능 워크스테이션에서 가능한 그래픽 사용자 인터페이스를 쉽게 지원

· 서버는 공유된 다양한 시스템 기능과 자원을 클라이언트에게 제공

· 서비스 기능에 따른 서버의 종류

 파일 서버(File Server)

 클라이언트가 요청한 파일 내의 레코드 제공

 데이터베이스 서버(Database Server)

 클라이언트가 요청한 SQL(질의어) 처리하여 결과 제공

 트랜잭션 서버(Transaction Server)

 클라이언트가 요청한 원격 프로시저 실행 후 결과 제공

 그룹웨어 서버(Groupware Server)

 서버가 클라이언트와 통신할 수 있도록 하는 응용 소프트웨어 집합을 제공 


② 클라이언트/서버 시스템의 소프트웨어 요소


· 애플리케이션(응용 프로그램) 요소 : 응용 프로그램에 의해 정의된 요구사항을 구현하는 것으로, 서버와 클라이언트에 위치 가능

· 데이터베이스 요소 : 응용 프로그램에서 요구하는 데이터 조작과 관리를 수행하는 것으로 서버에 위치

· 프레젠테이션/상호작용 요소 : 그래픽 사용자 인터페이스(GUI)와 관련된 모든 기능을 구현하는 것으로, 클라이언틍에 위치


③ 미들웨어


미들웨어(Middleware)는 클라이언트가 서버 측에 어떠한 처리를 요구하고, 또 서버가 그 처리한 결과를 클라이언트에게 돌려주는 과정을 효율적으로 수행하도록 도와주는 소프트웨어로 클라이언트와 서버 사이에 존재


· 미들웨어가 정상적으로 수행되기 위해서는 클라이언트와 서버에 각각의 미들웨어 있어야 함

· 클라이언트와 서버 간의 데이터 통로 제공, 작업 처리 서비스 검색, 프로그램 보안 및 감시 등의 기능 수행

· 미들웨어의 종류

 통신 미들웨어

 NOS(Network Operating System)

 데이터베이스 미들웨어

 ODBC

 분산 객체 미들웨어

 CORBA, DCOM


※ 객체 요청 브로커 / CORBA

· 객체 요청 브로커(ORB; Object Request Broker)

- 객체 요청 브로커는 분산 객체 미들웨어의 일종으로 기존의 미들웨어보다 기능이 강화되었으며 클라이언트의 객체가 서버 객체의 캡슐화된 메소드에게 메시지를 보낼 수 있게 하는 것

· CORBA(Common Object Request Broker Architecture)

- 가장 많이 사용되는 객체 요청 브로커의 표준이며, OMG(Object Management Group)라는 개발자 연합에서 인기했음

- CORBA가 클라이언트/서버 시스템에서 구현될 때 클라이언트와 서버 간에 정보를 송·수신하는 데 필요한 인터페이스 언어는 IDL(Interface Description Language)



145 CASE


① CASE의 개요


CASE(Computer Aided Software Engineering)는 소프트웨어 개발 과정에서 사용되는 요구 분석, 설계, 구현, 검사 및 디버깅 과정 전체 또는 일부를 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 것


· 소프트웨어 생명 주기의 전체 단계를 연결해주고 자동화해주는 통합된 도구를 제공해주는 기술

· 소프트웨어 개발 도구와 방법론이 결합된 것으로, 정형화된 구조 및 방법(메커니즘)을 소프트웨어 개발에 적용하여 생산성 향상을 구현하는 공학 기법

· 소프트웨어 개바르이 모든 단계에 걸쳐 일관된 방법론을 제공하는 자동화 도구(CASE Tool)들을 지원하고, 개발자들은 이 도구를 사용하겨 소프트웨어 개발의 표준화를 지향하며, 자동화의 이점을 얻을 수 있게 해줌

· CASE의 주요 기능 : 소프트웨어 생명주기 전 단계의 연결, 다양한 소프트웨어 개발 모형 지원, 그래픽 지원 등


② CASE 사용의 이점


· 소프트웨어 개발 기간을 단축하고 개발 비용 절감 가능

· 자동화된 기법을 통해 소프트웨어 품질 향상

· 소프트웨어의 유지보수를 간편하게 수행 가능

· 소프트웨어의 생산성이 향상되고 생산, 운용 활동을 효과적으로 관리·통제 가능

· 품질과 일관성을 효과적으로 제어 가능

· 소프트웨어 개발의 모든 단계에 걸친 표준 확립 가능

· 소프트웨어 모듈의 재사용성 향상됨

· 소프트웨어의 개발 기법을 실용화할 수 있고, 문서화를 쉽게 작성 가능


③ CASE 분류


CASE는 소프트웨어 생명 주기의 어느 부분을 지원하느냐에 다라 다음과 같이 분류 가능


상위(Upper) CASE

· 소프트웨어 생명 주기의 전반부에서 사용되는 것으로, 문제를 기술하고 계획하며 요구 분석과 설계 단계를 지원하는 CASE

· 여러 가지 명세와 문서를 작성하는 데 사용됨

· 상위 CASE 도구에는 SREM, PSL/PSA, SERA, FOUNDATION


하위(Lower) CASE

· 소프트웨어 생명 주기의 하반부에서 사용되는 것으로 코드의 작성과 테스트, 문서화하는 과정을 지원하는 CASE

· 하위 CASE 도구에는 구문 중심 편집기, 코드 생성기


통합(Integrate) CASE

· 소프트웨어 생명 주기에 포함되는 전체 과정을 지원하기 위한 CASE로, 공통의 정보 저장 장소와 통일된 사용자 인터페이스를 사용하여 도구들을 통합

· 통합 CASE 도구에는 IEF, POWERTOOLS, TAGS/IORL, TEAMWORK


④ 정보 저장소


정보 저장소의 개요

정보 저장소는 소프트웨어를 개발하는 과정 동안에 모아진 정보를 보관하여 관리하는 곳으로 CASE 정보 저장소, CASE 데이터베이스, 요구사항 사전, 저장소

· 초기의 소프트 개발 환경에서는 사람이 정보 저장소 역할을 했지만 오늘날에는 데이터베이스가 정보 저장소 역할 담당

· 도구들의 통합, 소프트웨어 시스템의 표준화, 소프트웨어 시스템 정보의 공유, 소프트웨어 재사용성의 기본이 됨


정보 저장소 사용의 이점

· 도구들과 생명 주기 활동, 사용자들, 응용 소프트웨어들 사이의 통신과 소프트웨어 시스템의 정보 공유 향상

· 소프트웨어 시스템 구성 요소들과 시스템 정보 저장소에 의해 관리되므로 유지 보수성 향상됨

· CASE 도구들 간에 정보를 쉽게 교환하고, 사용자가 쉽게 새로운 도구를 추가 가능하도록 해줌

· CASE 도구들을 통합하여 통합 CASE 도구 사용 가능

· 중복된 공통 정보를 통합하며 불필요한 정보 제거

· 생명 주기 정보를 재사용할 수 있도록 함

· 소프트웨어 시스템의 이식과 변환을 용이하게 함



출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 4과목 소프트웨어 공학


4장 객체지향 S/W 공학


138 객체지향 소프트웨어 공학


① 객체지향 기법의 개요


객체지향 기법은 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체로 만들어, 기계적인 부품들을 조립하여 제품을 만들 듯이 소프트웨어를 개발할 때에도 객체들을 조립해서 작성할 수 있도록 하는 기법


· 객체지향 기법은 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택되어 사용중

· 소프트웨어의 재사용 및 확장을 용이하게 함으로서 고품질의 소프트웨어를 빠르게 개발할 수 있으며 유지보수 쉬움

· 복잡한 구조를 단계적·계층적으로 표현하고, 멀티미디어 데이터 및 병렬 처리를 지원

· 현실 세계를 모형화하여 사용자와 개발자가 쉽게 이해 가능

· 객체지향 기법의 구성 요소 : 객체, 클래스,  메시지


② 객체(Object)


· 객체는 데이터와 데이터를 처리하는 함수를 묶어 놓은 (캡슐화한) 하나의 소프트웨어 모듈

데이터

 · 객체가 가지고 있는 정보로 속성이나 상태, 분류 등을 나타냄

 · 속성, 상태, 변수, 상수, 자료 구조

함수

 · 객체가 수행하는 기능으로 객체가 갖는 데이터(속성, 상태)를 처리하는 알고리즘

 · 객체의 상태를 참조하거나 변경하는 수단이 되는 것을 메소드(Method, 행위), 서비스, 동작, 연산 이라고도 함

 · 기존의 구조적 기법에서의 함수, 프로시저에 해당하는 연산 기능

· 객체는 상태와 행위를 가지고 있음

· 객체는 다른 객체들과 구별될 수 있는 이름을 갖고 있으며, 일정한 기억 장소를 가지고 있음

· 객체의 메소드는 다른 객체로부터 메시지를 받았을 때 수행


③ 클래스(Class)


· 클래스는 공통된 속성과 연산(행위)을 갖는 객체의 집합으로 객체의 일반적인 타입을 의미

· 클래스는 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀

· 클래스에 속한 각각의 객체를 인스턴스라 하며, 클래스로부터 새로운 객체를 생성하는 것을 인스턴스화 라고 함

· 동일 클래스에 속한 각가그이 객체(인스턴스)들은 공통된 속성과 행위를 가지고 있으면서, 그 속성에 대한 정보가 ㅓ로 달라서 동일 기능을 하는 여러 가지 객체를 나타내게 됨

· 최상위 클래스는 상위 클래스를 갖지 않는 유일한 클래스를 의미

· 슈퍼 클래스는 특정 클래스의 상위(부모) 클래스이고, 서브클래스는 특정 클래스의 하위(자식) 클래스를 의미


④ 메시지(Message)


· 메시지는 객체들 간에 상호작용을 하는 데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구사항

· 메시지의 구성 요소 : 메시지를 받는 객체(수신자)의 이름, 객체가 수행할 메소드 이름, 메소드를 수행할 때 필요한 인자(속성값)

· 인자는 옵션, 즉 필요할 때만 사용

· 메시지를 받은 수신 객체는 요구된 메소드(동작, 연산)를 수행하여 결과를 반환하게 됨



139 객체지향 기법의 기본 원칙


객체지향 기법의 기본 원칙에는 캡슐화, 정보 은닉, 추상화, 상속성, 다형성 등이 있으며, 이 중 구조적 기법과 차별되는 개념은 캡슐화, 상속성, 다형성


① 캡슐화(Encapsulation) 


캡슐화는 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것


· 캡슐화된 객체의 세부 내용이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류의 파급 효과가 적음

· 캡슐화된 객체들은 재사용이 용이함

· 객체들 간의 메시지를 주고 받을 때 각 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐


② 정보 은닉


캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것


· 각 객체의 수정이 다른 객체에게 주는 영향을 최소화하는 기술

· 외부 객체가 특정 객체의 데이터와 함수를 직접 접근하여 사용하거나 변경하지 못하므로 유지보수와 소프트웨어 확장 시 오류 최소화 가능


③ 추상화(Abstraction)


추상화는 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화 하는 것, 즉 모델화 하는 것


· 인간이 복잡한 문제를 다루는데 가장 기본이 되는 방법으로, 완전한 시스템을 구축하기 전에 그 시스템과 유사한 모델을 만들어서 여러 가지 요인들을 테스트할 수 있음

· 추상화는 최소의 비용으로 실제 상황에 대처 가능하고, 시스템의 구조 및 구성을 가시적으로 볼 수 있음


④ 상속성(Inheritance)


상속성은 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스가 물려받는 것


· 상속성을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 자신의 속성으로 사용 가능

· 하위 클래스는 상위 클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용 가능

· 상위 클래스의 속성과 연산을 하위 클래스가 공유할 수 있기 때문에 객체와 클래스의 재사용, 즉 소프트웨어 재사용을 증대시키는 중요한 개념

· 다중 상속성(Multiple Inheritance) : 한 개의 클래스가 두 개 이상의 상위 클래스로부터 속성과 연산을 상속받는 것


다형성(Polymorphism)


다형성은 메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각 객체(클래스)가 가지고 있는 고유한 방법(특성)으로 응답할 수 있는 능력


· 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 함

· 응용 프로그램 상에서 하나의 함수나 연산자가 두 개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한 인스턴스처럼 수행 가능하도록 하는 것



140 객체지향 기법의 생명 주기와 분석


① 객체지향 기법의 생명 주기


· 객체지향 기법을 사용하는 소프트웨어 개발 과정의 가장 큰 특징은 각 과정에서 사용되는 객체, 클래스, 메소드, 속성 등이 동일한 개념으로 사용된다는 것

· 개발 전 과정에 걸쳐 동일한 방법론과 표현 기법이 적용된다는 장점 갖고 있음

· 개발 과정 사이에서 같은 용어와 개념을 사용하여 분석, 설계, 구현 단계 사이의 전환이 쉬우므로 각 과정이 명확하게 순차적으로 이루어지지는 않음

· 객체지향 기법의 생명 주기 : (계획 및 분석) → (설계) → (구현) → (테스트 및 검증)


② 객체지향 분석의 개념


객체지향 분석(OOA; Object Oriented Analysis)은 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 이와 연관된 속성과 연산, 그들 간의 관계 등을 정의하여 모델링하는 작업


· 소프트웨어를 개발하기 위한 비즈니스(업무)를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석

· 분석가에게 주요한 모델링 구성 요소인 클래스, 객체, 속성, 연산 들을 표현해서 문제를 모형화 할 수 있게 해줌

· 객체는 클래스로부터 인스턴스화되고, 이 클래스를 식별하는 것이 객체지향 분석의 주요한 목적


③ 객체지향 분석의 방법론


객체지향 분석을 위한 여러 방법론이 제시되었으며 각 방법론은 다음과 같음


· Rumbaugh(럼바우) 방법 : 가장 일반적으로 사용되는 방법으로 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법

· Booch(부치) 방법 : 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용하는 분석 방법으로, 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산 정의

· Jacobson 방법 : Use Case를 강조하여 사용하는 분석 방법

· Coad와 Yourdon 방법 : E-R 다이어그램을 사용하여 객체의 행위를 모델링하며, 객체 식별, 구조 식별, 주제 저으이, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성하는 기법

· Wirfs-Brock 방법 : 분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행하는 기법


④ 럼바우(Rumbaugh)의 분석 기법


럼바우의 분석 기법은 모든 소프트웨어 구성 요소를 그래픽 표기법을 이요하여 모델링하는 기법으로, 객체 모델링 기법이라고도 함

분석활동은 객체 모델링, 동적 모델링, 기능 모델링을 통해 이루어짐


· 객체 모델링(Object Modeling)

- 정보 모델링이라고도 하며, 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 객체 다이어그램으로 표시하는 것

- 분석 활동의 세 가지 모델 중 가장 중요하며 선행되어야 할 모델링

- 객체 모델링의 순서

① 객체와 클래스 식별

② 클래스에 대한 자료 사전 작성

③ 클래스 간의 관계 정의

④ 객체 속성 및 연결 관계 정의

⑤ 클래스를 계층화하고 모듈로 정의

⑥ 생성된 모형을 반복적으로 검정


· 동적 모델링(Dynamic Modeling)

상태 다이어그램(상태도)을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링

- 동적 모델링에서는 객체나 클래스의 상태, 사건을 중심으로 다룸

사건

 하나의 객체로부터 다른 객체에 자극을 주어 객체의 상태를 변화시키는 것

상태

 특정 시점의 객체에 대한 속성 값

- 동적 모델링 순서

① 사건의 상호 작용 순서에 대한 시나리오 작성

② 사건 시나리오를 역할과 시간에 따라 표기한 후 사건 추적도 작성

③ 사건 추적도를 사건 발생자의 관계로 설명하는 사건 흐름도 작성

④ 사건과 상태를 연겨시킨 상태도 작성


· 기능 모델링(Functional Modeling)

- 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링

- 어떤 데이터를 입력하여 어떤 결과를 구할 것인지를 표현하는 것

- 기능 모델링 순서

① 외부와 시스템 간의 입·출력 자료를 정의

② 자료 흐름도 상세화

③ 프로세스 기능에 대한 정의를 기능 명세서로 작성

④ 제약 조건 파악

⑤ 최적화 기준 명세화



141 객체지향 설계, 구현, 테스트


① 객체지향 설계의 개요


객체지향 설계(OOD; Object Oriented Design)는 객체지향 분석(OOA)을 사용해서 생성한 여러 가지 분석 모델을 설계 모델로 변환하는 작업으로, 시스템 설계와 객체 설계를 수행


· 최근 소프트웨어 제품의 전형적인 타입인 사용자 중심, 대화식 프로그램의 개발에 적합

· 객체지향 설계에서 가장 중요한 문제는 시스템을 구성하는 객체와 속성, 연산을 인식하는 것

· 객체지향 설계의 설계 개념은 추상화, 정보 은닉, 기능 독립성, 모듈화, 상속성을 바탕으로 하며 이 중 가장 중요한 개념은 모듈화

· 객체지향 설꼐를 위해 럼바우의 객체지향 설계, 부치의 객체지향 설꼐, 윌리엄 로렌스의 객체지향 설계 방법등이 제안되었으며, 이 중 일반적으로 럼바우의 객체지향 설계가 가장 많이 사용됨

· 일반적으로 객체지향 설꼐 단계의 순서 : '문제 정의→요구 명세화→객체 연산자 정의→객체 인터페이스 결정→객체 구현'


② 럼바우(Rumbaugh)의 객체지향 설계


· 시스템 설계

- 시스템 설계는 전체적인 시스템 구조를 설계하는 것으로 분석 단계의 분석 모델을 서브시스템으로 분할하고, 시스템의 계층을 정의하며 분할 과정 중에서 성능의 최적 방안, 문제 해결 전략, 자원 분해 등을 확정하는 것

- 상세 설계를 위한 중요한 개념과 전략을 결정하고, 서브 시스템과 이들이 할당될 하드웨어를 결정

- 설계 절차

① 시스템을 서브시스템으로 분할

② 동적 모델링을 분석하여 객체들의 병행수행 가능성 파악

③ 서브시스템을 하드웨어와 태스크에 할당

④ 자원 관리 방법 및 공동 자원의 접근 방법 결정

⑤ 시스템의 제어 방식 결정

⑥ 경계 조건의 처리 방법 결정

⑦ 우선 순위 결정 


· 객체 설계

- 객체 설계는 분석 단계에서 만들어진 클래스, 속성, 관계, 메시지를 이용한 통신을 설계 모델로 제작하고 상세화하여 구체적인 자료 구조와 알고리즘 정의

- 정보와 처리를 모듈화하고 데이터 객체와 처리 조작을 연결하며, 추상화, 정보 은닉, 모듈화를 기본으로 하여 소프트웨어 생성

- 설계 절차

① 객체 모델링, 동적 모델링, 기능 모델링을 통합하고 연산 파악

② 연산을 구현하기 위해 알고리즘 설계

③ 자료에 대한 접근 경로 최적화

④ 외부와 상호작용 하기 이한 제어 방식 구현

⑤ 클래스 구조를 조정하여 상속성 향상

⑥ 관계를 설계하고, 객체의 표현 방법을 결정

⑦ 클래스와 관계를 단일 모듈로 생성

 문서화


③ 부치(Booch)의 객체지향 설계


· 자료 흐름도(DFD)를 사용해서 객체를 분해하고, 객체들 간의 인터페이스를 찾아 이것들을 Ada 프로그램으로 변환시키는 기법

· 설계 절차

① 문제를 정의(요구사항 분석)

② 실세계 문제 영역을 소프트웨어로 구현하기 위해 비정형적인 전략을 기술

③ 비정형적 전략을 정형화

④ 위의 ②, 단계를 완전한 설계가 될 때까지 반복

⑤ 서브클래스와 메시지 특성을 세분화하여 세부 사항 정제화

⑥ 객체의 속성과 자료 구조 표현

⑦ 구체적인 절차 표현


④ 윌리엄 로렌슨(William Lorensen)의 객체지향 설계


· 추상화, 상속성, 메시지, 그리고 다른 모든 OOD 개념들을 직접 지원해주는 기능을 가주고 있는 Smalltalk와 같은 프로그래밍 언어로 소프트웨어를 개발하기 위한 기법

· 설계 절차

① 각 서브시스템에 대한 자료 추상화 식별

② 각 추상화에 대한 속성들을 식별

③ 각 추상화에 대한 연산들을 식별

④ 객체들 사이의 통신 메시지 식별

⑤ 시나리오 이용하여 설계 검사

⑥ 적절한 곳에 상속 적용


⑤ 객체지향 구현


· 구현은 설계 단계에서 생성된 설계 모델과 명세서를 근거로 하여 코딩하는 단계

· 객체지향 프로그래밍을 이용하면 용이하게 구현 가능

· 객체는 순차적으로 또는 동시적으로 구현 가능


객체지향 프로그래밍(OOP; Object Oriented Programing)

객체지향 프로그래밍은 새로운 개념의 모듈 단위, 즉 객체라는 단위를 중심으로 하여 프로그램을 개발하는 기법

· 객체라는 단위를 이용하여 현실 세계에 가가운 방식으로 프로그래밍함

· 현실 세계에 가까운 방식이므로 이해하기 쉽고 조작하기 쉬운 프로그램 개발 가능

· 유지보수 쉽고 재사용 가능한 프로그램 제작 가능

· 이미 개발된 프로그램을 이용해 빠르게 확장된 프로그램 개발 가능

· 객체지향 프로그래밍 언어 분

 객체 기반 언어

 Ada, Actor와 같이 객체의 개념만을 지원하는 언어

 클래스 기반 언어

 Clu와 같이 객체와 클래스의 개념을 지원하는 언어

 객체 지향성 언어

 · 객체, 클래스, 상속의 개념을 모두 지원하는 가장 좋은 언어

 · 초기에 발표된 Simula로부터 Smalltalk, C++, Objective C와 같은 언어 있음


⑥ 객체지향 테스트


· 클래스 테스트 : 구조적 기법에서의 단위 테스트와 같은 개념으로 가장 작은 단위, 즉 캡슐화된 클래스나 객체를 검사하는 것

· 통합 테스트 : 객체를 몇 개 결합하여 하나의 시스템으로 완성시키는 과정에서의 검사

 스레드 기반(Thread-Based) 테스트

 시스템에 대한 하나의 입력이나 이벤트에 응답하는 데 요구되는 클래스들을 통합하는 것으로, 각각의 스레드가 통합되고 개별적으로 테스트됨

 사용 기반(Use-Based)테스트

 독립 클래스를 테스트한 후 독립 클래스를 사용하는 다음 계층의 종속 클래스를 테스트함

· 확인 테스트 : 사용자 요구사항에 대한 만족 여부 검사

· 시스템 테스트 : 모든 요소들이 적합하게 통합되고 올바른 기능을 수행하는지 검사



출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 4과목 소프트웨어 공학


3장 전통적 S/W 개발 방법론


128 요구사항 분석


① 전통적 소프트웨어 개발 방법의 개요


· 전통적(고전적) 소프트웨어개발 방법은 과거의 많은 소프트웨어 개발 경험을 토대로 하여 성공적으로 평가되는 소프트웨어 분석 및 설계 방법들을 집대성하여 하나의 개발 방법으로 정형화한 것

· 전통적(고전적) 소프트웨어 개발 방법을 구조적 소프트웨어 개발 방법이라고도 함


② 요구사항 분석의 개요


요구사항 분석은 소프트웨어 개발의 실제적인 첫 단계로 개발 대상에 대한 사용자의 요구사항을 이해하고 문서화(명세화)하는 활동 의미


· 사용자 요구의 타당성을 조사하고 비용과 일정에 대한 제약 설정

· 사용자의 요구 정확하게 추출하여 목표 정하고, 어떤 방식으로 해결할 것인지를 결정

· 요구사항 분석을 통한 결과는 소프트웨어 설계 단계에서 필요한 기본적인 자료가 되므로 사용자의 요구사항을 정확하고 일관성 있게 분석하여 문서화해야 함

· 소프트웨어 분석가에 의해 요구사항 분석이 수행되며, 이 작업 단계를 요구사항 분석 단계라고 함


③ 요구사항 분석 작업


요구사항 분석은 다음과 같은 작업으로 세분화되어 수해오딤


· 문제 인식 : 사용자와의 면담, 설문조사 및 협조, 각종 문서 검토 등을 통하여 사용자의 요구사항 찾아냄

· 모델 제작 : 평가와 종합을 바탕으로 자료와 제어의 흐름, 기능 처리, 동작 행위, 정보 내용 등을 이해하기 쉽도록 모델로 작성

개발할 소프트웨어에 대한 추상적인 모형을 만드는 것

· 문서화와 검토 : 요구사항 분석 명세서를 작성 → 소프트웨어의 기능, 성능, 제약 조건 등에 대하여 기술 하고 검토


④ 요구사항 분석의 어려움


대화 장벽

· 사용자와 개발자의 지식 배경의 다양화, 용어 불일치 등으로 의사 소통 곤란

· 해결책 : 다이어그램 및 프로토타입 이용


시스템의 복잡도

· 소프트웨어 체계화를 위해 새로운 개념이 필요해지고, 시스템 규모와 대상이 광범위해짐에 따라 난이도 증가에 의한 소프트웨어의 복잡화

· 해결책 : 구조적 분석이나 객체지향 분석 이용


요구의 변경

· 사용자 생각의 부정확성, 생각의 반복된 변경

· 해결책 : 수정 요구와 상반된 요구들의 수용 기술 필요


요구 명세화의 어려움

· 중복 현상, 애매모호함, 시험의 어려움, 과거와 다른 현재 상황 등의 내포에 따라 요구 명세서 작성이 어려움

· 해결책 : 제도적인 요구 분석 기술 필요


⑤ 요구사항 분석가의 자질


요구사항 분석가는 요구사항의 효율적인 분석과 정확한 명세화를 위해 다음과 같은 자질을 갖추어야 함


· 소프트웨어 개발에 많은 경험을 가지고 있어야 함

· 사용자의 요구를 정확히 수용하고, 여러 환경을 이해해야 함

· 설계에 필요한 자료를 충분히 제공할 수 있어야 함

· 다방면에 대한 해박한 지식을 가지고 있어야 함

· 시간 배정과 계획 등을 빠른 시간 내에 파악할 수 있어야 함

· 하드웨어, 소프트웨어를 포함함 컴퓨터에 대한 기술을 이해하고 있어야 함

· 고객이 사용할 시스템을 만들어야 하므로 상대의 관점(고객 관점)에서 문제를 파악할 수 있어야 함


⑥ 구조적 분석 기법


구조적 분석 기법은 자료의 흐름과 처리를 중심으로 하는 요구사항 분석 방법으로, 다음과 같은 특징이 있음


· 도형 중심의 분석용 도구와 분석 절차를 이용하여 사용자의 요구사항을 파악하고 문서화함

· 도형 중심의 도구를 사용하므로 분석가와 사용자 간의 대화가 용이

· 하향식 방법을 사용하여 시스템을 세분화할 수 있고, 분석의 중복을 배제할 수 있음

· 사용자의 요구사항을 논리적으로 표현하여 전체 시스템을 일관성 있게 이해할 수 있음

· 시스템 분석의 질이 향상되고, 시스템 개발의 모든 단계에서 필요한 명세서 작성이 가능

· 구조적 분석 기법에는 자료흐름도, 자료 사전, 소단위 명세서, 개체 관계도, 상태 전이도, 제어 명세서 등의 도구를 이용하여 모델링 함



129 구조적 분석 도구


① 자료 흐름도(DFD)의 개요


자료 흐름도(DFD, Data Flow Diagram)는 요구사항 분석에서 자료의 흐름 및 변환 과정과 기능을 도형 중심으로 기술하는 방법으로 자료 흐름 그래프, 버블 차트라고도 함


· 시스템 안의 프로세스와 자료 저장소 사이에 자료의 흐름을 나타내는 그래프로 자료 흐름과 처리를 중심으로 하는 구조적 분석 기법에 이용됨

· 자료 흐름도는 자료 흐름과 기능을 자세히 표현하기 위해 단계적으로 세분화됨

· 자료는 처리를 거쳐 변환될 때마다 새로운 이름이 부여되며, 처리는 입력 자료가 발생하면 기능을 수행한 후 출력 자료를 산출함


② 자료 흐름도 구성 요소 표기법


 기호

 의미

 표기법

 Yourdon/DeMacro

 Gane/Sarson

 프로세스(Process)

 · 자료를 변환시키는 시스템의 한 부분(처리과정)을 나타내며 처리, 기능, 변환, 버블이라고도 함

 · 원이나 둥근 사각형으로 표시하고 그 안에 프로세스 이름을 기입

○ 

 

 자료 흐름(Data Flow)

 · 자료의 이동(흐름)이나 연관관계를 나타냄

 · 화살표 위에 자료의 이름을 기입

→ 

 자료 저장소(Data Store)

 · 시스템에서의 자료 저장소(파일, 데이터베이스)를 나타냄

 · 도형 안에 자료 저장소 이름을 기입

 

 

 단말(Terminator)

 · 시스템과 교신하는 외부 개체로, 입력 데이터가 만드러지고 출력 데이터를 받음(정보의 생산자와 소비자)

 · 도형 안에 이름을 기입

 

 


③ 자료 흐름도의 세분화(상세화)


자료 흐름도의 세분화는 요구사항 분석이 진행됨에 따라 하나의 자료 흐름도를 보다 자세히 표현하기 위해 또 다른 자료 흐름도를 생성하는 것


· 단계(Level) 0의 자료 흐름도는 기본 시스템 모델 또는 배경도라고 하며, 전체 소프트웨어 요소를 표시하는 하나의 프로세스(원)과 입·출력을 나타내는 화살표로 표현

· 각각의 프로세스에 대하여 개별적인 상세화 및 계층화가 가능

· 세분화 단계가 많아질수록 소프트웨어 설계와 구현 작업이 용이해짐


④ 자료 사전(DD)


자료 사전(DD, Data Dictionary)은 자료 흐름도에 있는 자료를 더 자세히 정의하고 기록한 것이며, 이처럼 데이터를 설명하는 데이터를 데이터의 데이터 또는 메타 데이터라고 함


· 자료 흐름도에 시각적으로 표시된 자료에 대한 정보를 체계적이고 조직적으로 모아 개발자나 사용자가 편리하게 사용 가능


자료 사전 표기법 및 작성 시 유의사항

· 자료 사전의 한 항목은 자료에 대한 정의 부분과 설명 부분으로 구성되며, 정의 부분에는 자료의 이름을, 설명 부분에는 자료에 대한 자세한 내용을 표현

· 이름으로 정의를 쉽게 찾을 수 있어야 하며, 이름이 중복되어서는 안됨

· 갱신하기 쉬워야 하며, 정의하는 방식이 명확해야 함

· 자료 사전에서 사용되는 표시 기호는 다음과 같음

 기호

 의미

 =

 자료의 정의 : ~로 구성되어 있다(is composed of)

 +

 자료의 연결 : 그리고(and)

 (  )

 자료의 생략 : 생략 가능한 자료(Optional)

 [ | ]

 자료의 선택 : 또는(or)

 {  }

 자료의 반복 : Iteration of

 ① {}n : n번 이상 반복   ② {}n : 최대로 n 번 반복   ③ {}nm : m이상 n이하로 반복

 * *

 자료의 설명 : 주석(Comment)


⑤ 소단위 명세서(Mini-Spec.)


소단위 명세서는 세분화된 자료 흐름도에서 최하위 단계 버블(프로세스)의 처리 절차를 기술한 것으로 프로세스 명세서라고도 함

· 소단위 명세서는 분석가의 문서이며, 자료 흐름도(DFD)를 지원하기 위하여 작성

· 소단위 명세서는 서술문장, 구조적 언어, 의사결정나무, 의사 결정표(판단표), 그래프 등을 이용하여 기술


※ 최하위 단계 버블(프로세스)

더 이상 세분화할 수 없는 단계의 프로세스로, 원시 버블 또는 프리미티브 버블(Primitive Bubble)이라고도 함

※ 구조적 언어, 의사결정나무, 의사 결정표

· 구조적 언어 : 자연어의 일부분으로 한정된 단어와 문형, 제한된 구조를 사용하여 명세서를 작성하는 데 이용하는 명세 언어

· 의사결정나무 : 현재 상황과 목표와의 상호 관련성을 나무의 가지를 이용해 표현한 것으로 불확실한 상황에서의 의사결정을 위한 분석 방법

· 의사 결정표(Decision Table) : 복잡한 의사 결정 논리를 기술하는 데 사용하며, 주로 자료 처리 분야에서 이용됨


⑥ 개체 관계도(ERD)


개체 관계도(ERD, Entity Relationship Diagram)는 시스템에서 처리되는 개체(자료)와 개체의 구성과 속성, 개체 간의 관계를 표현하여 자료를 모델화하는데 사용


· 개체 관계도의 구성

 개체(Entity)

 소프트웨어에 의해 인식되는 여러 종류의 자료

 속성(Attribute)

 개체에 관련된 특성

 관계(Relationship)

 개체 간에 존재하는 상호 작용


· 개체는 사각형, 속성은 타원, 관계는 다이아몬드로 표시

· 개체 관계의도 작성 순서

① 주요키를 포함하여 개체의 속성을 모두 찾아냄

② 기본적인 개체와 주요키를 정의하며, 개체 사이의 관계 정의

③ 1:M 관계를 단순화하기 위해 속성 개체를 추가하며, 연관 관계를 정의하여 M:N 관계를 표현함

④ 각 개체를 정규화, 누락된 개체 점검 및 클라스 구조가 필요한지 결정


⑦ 상태 전이도(STD)


상태 전이도(STD, State Transition Diagram)는 시스템에 어떤 일이 발생할 경우 시스템의 상태와 상태 간의 전이를 모델화한 것으로, 상태 전이도를 통해 개발자는 시스템의 행위 정의 가능


· 상태 전이도에서 사각형은 시스템의 상태를, 화살표는 상태 전이를 나타냄

· 화살표의 시작 부분은 상태 전이를 일으키는 사건을 의미하며, 화살표의 끝은 사건의 결과로 발생하는 동작



130 요구사항 분석 CASE와 HIPO


① 요구사항 분석을 위한 CASE(자동화 도구)


· 요구사항 분석을 위한 자동화 도구는 요구사항을 자동으로 분석하고, 요구사항 분석 명세서를 기술하도록 개발된 도구

· 요구사항 분석을 위한 자동화 도구 사용의 이점

- 표준화와 보고를 통한 문서화 품질 개선

- 데이터베이스가 모두에게 이용 가능하다는 점에서 분석자들 간의 적절한 조정

- 교차 참조도와 보고서를 통한 결함, 생략 불일치 등의 발견 용이성

- 변경이 주는 영향 추적의 용이성

- 명세에 대한 유지보수 비용의 축소


종류

요구사항 분석을 위한 자동화 도구에는 SADT, STEA, PSL/PSA, TAGS, EPOS 등이 있음

· SADT(Structed Analysis and Design Technique)

- SoftTech 사에서 개발한 것으로 시스템 정의, 소프트웨어 요구사항 분석, 시스템/소프트웨어 설계를 위해 널리 이용되어 온 구조적 분석 및 설계 도구

- 구조적 요구 분석을 하기 위해 블록 다이어그램을 채택한 자동화 도구

· SREM(Software Requirements Engineering Methodology) = RSL/REVS

- TRW 사가 우주 국방 시스템 그룹에 의해 실시간 처리 소프트웨어 시스템에서 요구사항을 명확히 기술하도록 할 목적으로 개발한 것으로, RSL과 REVS를 사용하는 자동화 도구

- RSL(Requirement Statement Language) : 요소, 속성, 관계, 구조들을 기술하는 요구사항 기술 언어

 요소

 요구사항 명세를 개발하기 위해 사용되는 개체와 개념

 속성

 요구를 수정하거나 수식하기 위한 것

 관계

 개체들 간의 관계

 구조

 정보 흐름을 묘사하기 위한 것


- REVS(Requirement Engineering and Validation System) : RSL로 기술된 요구사항들을 자동으로 분석하여 요구사항 분석 명세서를 출력하는 요구사항 분석기

· PSL/PSA

-미시간 대학에서 개발한 것으로 PSL과 PSA를 사용하는 자동화 도구

- PSL(Problem Statement Language) : 문제(요구사항) 기술 언어

- PSA(Problem Statement Analyzer) : PSL로 기술한 요구사항을 자동으로 분석하여 다양한 보고서를 출력하는 문제 분석기

· TAGS(Technology for Automated Generation of System)

- 시스템 공학 방법 응용에 대한 자동 접급 방법으로, 개발 주기의 전 과정에 이용할 수 있는 통합 자동화 도구

- 구성 : IORL, 요구사항 분석과 IORL 처리를 위한 도구, 기초적인 TAGS 방법론

- IORL :  요구사항 명세 언어


② HIPO


HIPO(Hierarchy Input Process Output)는 시스템의 분석 및 설계나 문서화할 때 사용되는 기법으로, 시스템 실행 과정인 입력, 처리, 출력의 기능을 나타냄


· 기본 시스템 모델은 입력, 처리, 출력으로 구성되며, 하향식 소프트웨어 개발을 위한 문서화 도구

· 체계적인 문서 관리 가능

· 기호, 도표등을 사용하므로 보기 쉽고 이해하기도 쉬움

· 기능과 자료의 의존 관계를 동시에 표현 가능

· 변경, 유지보수가 용이

· 시스템의 기능을 여러 개의 고유 모듈들로 분할하여 이들 간의 인터페이스를 계층 구조로 표현한 것을 HIPO Chart라고 함


HIPO Chart의 종류

 가시적 도표(도식 목차)

 시스템의 전체적인 기능과 흐름을 보여주는 계층 구조도

 총체적 도표(총괄도표, 개요 도표)

 프로그램을 구성하는 기능을 기술한 것으로 입력, 처리, 출력에 대한 전반적인 정보를 제공하는 도표

 세부적 도표(상세 도표)

 총체적 도표에 표시된 기능을 구성하는 기본 요소들을 상세히 기술하는 도표



131 설계


① 구조적 설계 기법


· 구조적 설계 기법은 구조적 분석 기법의 결과물인 자료 흐름도 등으로부터 소프트웨어의 기능(자료 구조)과 프로그램 구조, 모듈을 설계하기 위한 전략, 평가 지침 및 문서화 도구를 제공하는 체계화된 기법

· 자료의 흐름을 중심으로 하는 설계 기법이므로 자료 흐름 중심 설계 기법이라고도 함

· 자료 흐름도, 자료 사전, 개체 관계도, 소단위 명세서 등이 준비된 이후에 설계


② 설계의 개요


설계는 요구사항 분석 단계의 산출물인 요구사항 분석 명세서의 기능이 실현되도록 알고리즘과 그 알고리즘에 의해 처리될 자료 구조를 문서화하는 것


· 좋은 소프트웨어를 개발하기 위한 가장 핵심이 되는 기술로, 소프트웨어의 품질 평가를 위한 지침이 됨

· 소프트웨어 설계 모형의 구성

[그림 1] 소프트웨어 설계 모형

 데이터 설계

 요구사항 분석 단계에서 생성된 정보를 소프트웨어를 구현하는 데 필요한 자료 구조로 변환하는 것으로, ERD를 이용하여 정의된 개체와 관계, 자료 사전에 정의된 자료의 설명 등이 데이터 설계의 기초가 됨

 구조 설계

 소프트웨어를 구성하는 모듈간의 관계와 프로그램 구조를 정의하는 것으로 DFD, DD, STD 등과 모듈의 상호 작용이 기초가됨

 인터페이스 설계

 소프트웨어와 상호 작용하는 시스템, 사용자 등과 어떻게 통신하는지를 기술하는 것으로 DFD 등이 인터페이스 설계에 기초가 됨

 절차(프로시저) 설계

 모듈이 수행할 기능을 절차적 기술로 바꾸는 것으로 소단위 명세서, 상태 전이도의 정보가 절차 설계의 기초가 됨


③ 설계의 기본 원리


소프트웨어 설계는 다음과 같은 기본 원리를 가지고 있으며 이는 소프트웨어 설계자에게 보다 더 효율적인 설계 방법을 제공함


모듈화(Modularity)

· 모듈화는 소프트웨어를 모듈 단위로 나누는 것

· 모듈은 서브루틴, 부(Sub) 시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함

· 모듈화를 이용하여 설계하면 확장성, 융통성, 경제성 등이 향상됨


추상화(Abstraction, 개념화)

· 문제의 세부 사항을 먼저 설계하기보다는 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 설계 방법

· 추상화의 유형

 기능 추상화

 입력 자료를 출력 자료로 변환하는 과정을 추상화하는 방법

 제어 추상화

 제어의 정확한 메커니즘(절차, 방법)을 정의하지 않고 원하는 효과를 정하는 데 이용하는 방법

 자료 추상화

 자료와 자료에 적용될 수 있는 기능을 함께 정의함으로써 자료 객체를 구성하는 방법


단계적 정제(Stepwise Refinement)

· Niklaus Wirth에 의해 제안된 하향식 설계 전략으로, 문제를 상위의 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법

· 추상화의 반복에 의해 세분화됨

· 소프트웨어 기능에서부터 시작하여 점차적으로 구체화하고, 상세한 내역(알고리즘, 자료 구조)은 가능한 한 뒤로 미루어 가면서 진행


정보 은닉(Information Hiding)

· 한 모듈 내부에 포함된 절차화 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법

· 다른 모듈이 정보 은닉된 모듈과 인터페이스할 때는 소프트웨어 기능을 수행하는 데 반드시 필요한 정보만을 전달함

· 모듈을 독립적으로 수행할 수 있고, 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함


프로그램 구조(Program Structure)

· 소프트웨어의 구성 요소인 모듈의 계층적 구성을 나타내는 것으로, 제어 계층 구조라고도 함

· 프로그램의 순서, 선택, 반복과 같은 소프트웨어의 절차적인 처리 과정을 나타내지 않음

· 프로그램 구조는 일반적으로 트리 구조의 다이어그램으로 표기함(사각형은 모듈을 나타냄)

· 프로그램 구조에서 사용되는 용어

 공유도(Fan-In, 팬-입력)

 어떤 모듈을 제어(호출)하는 모듈의 수

 제어도(Fan-Out, 팬-출력)

 어떤 모듈에 의해 제어(호출)되는 모듈의 수

 깊이(Depth)

 제어의 계층 수

 넓이(Width)

 제어의 분기된 수

 주종적 모듈(Superordinate)

 다른 모듈을 제어(호출)하는 모듈

 종속적 모듈(Subordinate)

 어떤 모듈에 의해 제어되는 모듈


자료 구조

· 자료 구조는 자료 사이의 논리적인 관계를 표현한 것으로 자료의 구성, 결합 정도, 접근 방법 등을 나타냄

· 자료 구조의 종류에는 스칼라 항목, 벡터, 연결 리스트, 계층적 자료 구조 등이 있음


④ 바람직한 설계의 특징


· 설계는 소프트웨어 구조를 나타내야 함

· 설계는 독립적인 기능적 특성을 가진 요소(모듈)로 구성되어야 함

· 설계는 모듈 구조, 즉 특정 기능 또는 부기능을 수행하는 논리적 요소들로 분리되는 구조를 가져야 함

· 소프트웨어 요소(모듈) 간의 효과적인 제어를 위해 설계에서 계층적 자료 조직이 제시되어야 함

· 설계는 자료와 프로시저에 대한 분명하고 분리된 표현을 포함해야 함

· 설계는 모듈 간과 외부 개체 간의 연결 복잡성을 줄이는 인터페이스를 가져야 함

· 설계는 요구사항 분석에서 얻어진 정보를 이용하여 반복적인 방법으로 이루어져야 함

· 요구사항을 모두 구현해야 하고, 유지보수가 용이해야 함

· 모듈의 기능을 예측할 수 있도록 정의

· 적당한 모듈의 크기를 유지하고, 모듈 간의 상관성(결합도)은 낮추고, 응집도는 높임

· 전체적이고 포괄적인 개념을 설계한 후 차례대로 세분화하여 구체화시켜 나감

· 이식성을 고려함



132 모듈과 모듈화


①  모듈과 모듈화 개요


모듈화는 소프트웨어를 각 기능별로 분할하는 것을 의미하며, 각 기능별로 분할한 것을 모듈이라고 함


· 모듈화를 수행하면 소프트웨어의 복잡도가 감소하고, 변경이 쉬우며 프로그램 구현이 용이함

· 모듈의 속성과 구성

 모듈의 속성

 · 입·출력 요소 : 자료를 받아들이고, 자료를 내보내는 요소

 · 기능 요소 : 입력을 출력으로 바꾸는 요소, 즉 모듈의 처리 결과

 · 기관 요소 : 기능을 수행하기 위한 절차상의 코드 또는 논리

 · 내부 자료 요소 : 모듈 자체의 작업장, 모듈이 스스로 참조하는 자료

 모듈의 구성

 · 호출 모듈 : 다른 모듈을 호출하는 모듈

 · 피호출 모듈 : 다른 모듈에 의해 호출되는 모듈

 

② 모듈의 기능적 독립성의 개요


모듈의 기능적 독립성은 소프트웨어를 구성하는 각 모듈의 기능이 독립됨을 의미하는 것으로 모듈화, 추상화, 정보 은닉의 부산물


· 모듈이 하나의 기능만을 수행하고 다른 모듈과의 과도한 상호작용을 배제함으로써 이루어짐

· 기능적으로 독립된 모듈은 특정 기능을 수행하고, 다른 모듈과는 간단한 인터페이스만을 가지므로 개발이 쉽고 재사용이 가능

· 독립성이 높은 모듈일수록 모듈을 수정하더라도 다른 모듈에게는 거의 영향을 미치지 않으며, 오류가 발생해도 쉽게 발견하고 해결 가능

· 모듈의 독립성은 결합도와 응집도에 의해 측정되며, 독립성을 높이려면 모듈의 결합도를 약하게 하고 응집도를 강하게 하며 모듈의 크기를 작게 만들어야 함

· 결합도와 응집도는 소프트웨어 설계시 평가 지침이 됨


③ 결함도(Coupling)


· 결합도는 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계를 의미

· 독립적인 모듈이 되기 위해서는 각 모듈 간의 결합도가 약해야 하며 의존하는 모듈이 적어야 함

· 결합도가 강하면 시스템 구현 및 유지보수 작업이 어려움

· 결합도의 종류

 자료 결합도, 스탬프 결합도, 제어 결합도, 외부 결합도, 공통 결합도, 내용 결합도

결합도 약함                                 ↔                                 결합도 강함


 자료 결합도

 (Data Coupling)

 · 자료 결합도는 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도

 · 어떤 모듈이 다른 모듈을 호출하면서 매개 변수나 인수로 데이터를 넘겨 주고, 호출받은 모듈은 받은 데이터에 대한 처리 결과를 다시 돌려주는 것

 · 자료 결합도는 모듈 간의 내용을 전혀 알 필요가 없는 상태로서 한 모듈의 내용을 변경하더라고 다른 모듈에는 전혀 영향을 미치지 않는 가장 바람직한 결합도

 스탬프(검인) 결합도

 (Stamp Coupling)

 · 스탬프 결합도는 모듈 간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달될 때의 결함도

 · 두 모듈이 동일한 자료 구조를 조회하는 경우의 결합도이며 자료 구조의 어떠한 변화, 즉 포맷이나 구조의 변화는 그것을 조회하는 모든 모듈 및 변화되는 필드를 실제로 조회하지 않는 모듈에까지도 영향을 미치게 됨

 제어 결합도

 (Control Coupling)

 · 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호를 이용하여 통신하거나 제어 요소를 전달하는 결합도

 · 상위 모듈이 하위 모듈의 상세한 처리 절차를 알고 있어 이를 통제하는 경우나 처리 기능이 두 모듈에 분리되어 설계된 경우에 발생

 · 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도형상이 발생

 외부 결합도

 (External Coupling)

 · 외부 결합도는 어떤 모듈에서 외부로 선언한 데이터(변수)를 다른 모듈에서 참조할 때의 결합도

 · 참조되는 데이터의 범위를 각 모듈에서 제한 가능

 공통(공유) 결합도

 (Common Coupling)

 · 공통 결합도는 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도

 · 공통 데이터 영역의 내용을 조금만 변경하더라고 이를 사용하는 모든 모듈에 영향을 미치므로 모듈의 독립성을 약하게 만듬

 내용 결합도

 (Content Coupling)

 · 내용 결합도는 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 떄의 결합도

 · 한 모듈에서 다른 모듈의 내부로 제어가 이동하는 경우에도 내용 결합도에 해당됨


④ 응집도(cohesion)


· 응집도는 정보 은닉 개념을 확장한 것으로, 명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도, 즉 모듈이 독립적인 기능으로 정의되어 있는 정도를 의미

· 독립적인 모듈이 되기 위해서는 각 모듈의 응집도가 강해야 함

· 응집도의 종류

기능적 응집도, 순차적 응집도, 교환(통신)적 응집도, 절차적 응집도, 시간적 응집도, 논리적 응집도, 우연적 응집도

응집도 강함                                                 ↔                                                 응집도 약함

 기능적 응집도

 (Functional Cohesion)

 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도

 순차적 응집도

 (Sequential Cohesion)

 모듈 내 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우의 응집도

 교환(통신)적 응집도

 (Communication Cohesion)

 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우의 응집도

 절차적 응집도

 (Procedural Cohesion)

 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도

 시간적 응집도

 (Temporal Cohesion)

 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우의 응집도

 논리적 응집도

 (Logical Cohesion)

 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우의 응집도

 우연적 응집도

 (Coincidental Cohesion)

 모듈 내부의 각 구성 요소들이 서로 관련 없는 요소로만 구성된 경우의 응집도


⑤ 효과적인 모듈화 설계 방안


· 결합도는 줄이고 응집도는 높여서 모듈의 독립성을 높임

· 모듈의 제어 영역 안에서 그 모듈의 영향 영역을 유지시킴

· 복잡도와 중복성을 줄이고 일관성을 유지시킴

· 모듈의 기능은 예측이 가능해야 하며 지나치게 제한적이어서는 안됨

· 유지보수가 용이해야 함

· 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해

· 하나의 입구와 하나의 출구를 갖도록 해야 함

· 인덱스 번호나 기능 코드들이 전반적인 처리 논리 구조에 예기치 못한 영향을 끼치지 않도록 모듈 인터페이스를 설계해야 함



133 설계 방법


① 자료 설계


· 자료 설계는 설계의 첫 번째 작업으로, 요구 사항 분석에서 생성된 여러 모델들을 소프트웨어를 구현하는 데 필요한 자료 구조로 변환하는 것

· 자료 구조가 프로그램 구조와 절차적 복잡성에 영향을 주므로 자료 설계는 소프트웨어 품질에 큰 영향을 줌

· 정보 은닉과 자료 추상화의 개념은 자료 설계를 위한 기초를 제공함


② 구조 설계


· 구조 설계는 프로그램의 구조를 개발하고, 소프트웨어 구성 요소들 간의 관계를 정의하는 것

· 프로그램이 처리하는 기능에 초점을 맞추어 모듈로 분해하고, 프로그램 전반에 걸친 자료의 흐름을 위한 인터페이스를 정의


구조적 설계 절차

구조적(자료 흐름 중심) 설계에서는 다음과 같은 설계 절차를 통해 구조를 설계함

① 정보 흐름의 유형을 설정

② 흐름의 경계 표시

③ 자료 흐름도를 프로그램 구조로 사상

④ 제어 계층을 분해시켜서 정의

⑤ 경험적 방법을 구체화시킴


DFD를 프로그램 구조로 사상시키는 방법

요구사항 분석에서 작성한 DFD를 프로그램 구조로 사상시키는 방법

· 변환 분해 접근법 : 요구 분석 단계의 DFD를 입력 흐름, 변환 흐름, 출력 흐름으로 구분하여 프로그램 구조 도표로 변환시키는 방법

· 거래 분해 접근법 : DFD에서 거래에 해당하는 부분을 찾아내어 이 거래 중심 자료 흐름도를 거래 중심 구조 도표로 변환하는 방법


구조 도표(Structure Chart, 설계 구조도)

· 구조 도표는 프로그램 구조를 설계할 대 사용되는 도구로, 소프트웨어 기능을 몇 개의 고유 기능으로 분할하여 블랙 박스로 나타내고 블랙 박스 간의 인터페이스를 계층 구조로 표현하는 것

· 소프트웨어의 기능을 모듈의 호출 관계와 인터페이스로 나타냄


③ 인터페이스 설계


인터페이스 설계는 소프트웨어와 상호 작용하는 시스템, 사용자 등과 어떻게 통신하는지를 기술하는 과정


· 소프트웨어와 모듈 사이, 소프트웨어와 정보 생산자·소비자 사이, 소프트웨어와 사용자 사이의 인터페이스 설계로 나눌 수 있음

· 변화 요인이 다양한 사용자와의 인터페이스에 중점을 두고 설계함


④ 절차(프로시저) 설계


· 절차(프로시저) 설계는 데이터 설계, 아키텍처 설계, 인터페이스 설계가 이루어진 후에 수행되는 설계 작업으로 모듈이 수행할 기능을 절차적 기술로 바꾸는 것

· 데이터 설계, 아키텍쳐 설계, 인터페이스 설계를 바탕으로 실제 운영되는 소프트웨어로 변환하기 위해 코드에 가까운 추상화 수준의 모듈 명세서를 작성하는 것

· 프로시저 설계는 그래픽 설계 표기법이나 프로그램 설계 언어 등을 사용하여 나타냄


그래픽 설계 표기법

그래픽 설계 표기법은 그림으로 프로시저를 상세히 설명하고 처리 절차를 기술하는 것으로 흐름도와 N-S 차트가 있음

· 흐름도(Flowchart)

· N-S 차트(Nassi-Schneiderman Chart)

- N-S차트는 논리의 기술에 중점을 둔 도형을 이용한 표현 방법으로 박스 다이어그램, Chapin Chart라고도 함

- 연속, 선택 및 다중 선택, 반복 등의 제어 논리 구조를 표현

- GOTO나 화살표 사용하지 않음

- 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는 데 적합

- 선택과 반복 구조를 시각적으로 표현

- 이해하기 쉽고, 코드 변환이 용이

- 읽기는 쉽지만 작성 어려워, 임의로 제어를 전이하는 것은 불가능

- 총체적인 구조 표현과 인터페이스를 나타내기 어려움

- 단일 입구와 단일 출구로 표현


프로그램 설계 언어(PDL)

프로그램 설계 언어(PDL; Program Design Language)는 영어 단어를 이용하여 구조적 프로그래맹의 제어 구조를 기술하는 것이며 의사 코드 또는 구조적 영어(언어)라고 함

· 모듈의 논리를 설계할 때 사고 과정을 체계화해 가는 방법이며, 하향식 접근 방식으로 논리의 전체 흐름을 표현

· 현재 프로그래밍 언어와 유사한 서술적 표현에 의하여 프로그램, 설계, 시스템의 검토에 사용하고, 문서화 기법으로도 사용됨

· 순서도 대용으로 활용할 수 있으며 사용자와의 의사소통이 용이하게 함

· 모듈 내의 논리를 문법적 제한 없이 자유롭게 표현 가능



134 구현


① 구현 단계의 개요


구현 단계는 설계 단계에서 생성된 설계 명세서를 컴퓨터가 알 수 있는 모습으로 변환하는 과정으로, 프로그래밍 또는 코딩 단계라고도 함


· 각 모듈을 특정 프로그래밍 언어를 이용하여 원시 코드로 작성하고 문서화하는 작업

· 구현은 설계를 철저히 반영시키고, 원시 코드를 간단 명료하게 작성하며, 디버깅 및 변경, 검사가 용이하도록 해야 함

· 구현 단계에서는 사용할 프로그래밍 언어와 코딩 스타일 등을 결정해야 함


② 프로그래밍 언어


프로그래밍 언어의 분류

 1세대 언어

 기계어, 어셈블리어와 같은 저급 언어

 2세대 언어

 과학 계산용 / 정보 처리 분야 / 인터프리터 방식

 3세대 언어

 범용 언어 / 인공지능용 언어 / 객체지향형 언어 / 대화식 그래픽 언어 / 배열과 벡터 처리용 언어 / 보고서 작성용 언어

 CAI용 언어 / 마이크로프로세서 프로그램 언어 / 수치 제어 기계용 도구를 위해 설계된 언어

 4세대 언어

 · 비절차적 언어, 자연 언어, 사용자 중심 언어, 응용 프로그램 생성기 언어

 · 프로토타입 언어, 질의어(SQL), 정보 검색어, 보고서 작성기


프로그래밍 언어의 선정 기준

 친밀감

 언어의 능력

 처리의 효율성

 과거의 개발 실적

 알고리즘과

 계산상의 난이도

 자료 구조의 난이도

 성능 고려 사항들

 프로그램 구조

 프로그램의 길이

 이식성

 대상 업무의 성격

 소프트웨어의

 수행 환경

 개발 담당자의

 경험과 지식

 컴파일러의 이용

 가능성


③ 코딩 스타일 = 코딩의 표준화


프로그래머가 코딩하는 방법이 다르므로 이러한 코딩 방법의 일관성을 유지하고 좋은 코딩을 위해 제시된 표준을 코딩 스타일이라고 함

· 프로그램 논리를 명확하게 작성해야 함

· 지나치게 기교를 부리지 않음

· 수식은 간결하고 직접적으로 표현

· 임시 변수의 사용을 금함

· 혼동을 초래하는 변수명은 사용하지 말고, 일관성 있는 변수명 사용

· 블록 구조 사용

· 들여쓰기 사용

· 판단에 맞는 정확한 제어 구조 사용

· If뒤에 바로 If가 오지 않도록 하고, Else뒤에 Null이 되지 ㅇ낳게 함

· 모듈화와 서브루틴 사용

· 매개 변수가 5개 이상인 모듈은 유의

· 하나의 변수를 다목적으로 사용하지 않음

· 너무 깊은 중첩 구조는 피함


구조적 프로그래밍


· 구조적 프로그래밍은 Dijkstra에 의해 제안된 것으로 신뢰성 있는 소프트웨어의 생산과 코딩의 표준화 등을 위해 개발된 방법

· 구조적 프로그래밍의 기본 제어 구조는 순차, 선택 반복

 순차

 명령을 순서적으로 나열

 선택

 특정 논리에 기초하여 명령 선택

 반복

 순환 제공

· 순차, 선택, 반복을 사용하면 프로그램의 복잡도를 줄여주고, 유지보수 용이

· 분기(GOTO) 없이 프로그래밍하여 읽고, 테스트하기 쉬움

· 오류 없는 프로그램 구성으로 품질 향상시킴

· 완전무결한 프로그래밍 규칙을 제공

· 생산성 증진을 통한 프로그래밍 경비를 감소시킴

· 프로그래밍 규칙

- 프로그램의 제어 흐름을 선형화

- 단일 입구와 단일 출구만을 가지게 함

- GORO문을 사용하지 않음

- 순차, 선택, 반복의 세 가지 기본 제어 구조 사용



135 검사 기법


① 검사의 개요


· 검사(Test)는 소프트웨어 품질 보증 활동의 하나로, 소프트웨어에 대한 요구사항의 만족도 및 예상 결과와 실제 결과의 차이점을 여러 방법으로 사용하여 검사하고 평가하는 일련의 과정을 의미

· 소프트웨어 품질을 평가하는 작업이며 분석이나 설계, 코딩 결과를 최종적으로 점검하는 과정

· 오류를 발견하기 위해 프로그램이나 시스템을 수행하는 과정

· 검사의 목적은 소프트웨어를 구성하는 요소들이 잘 조화를 이루며 정상적으로 동작하고 성능이 요구에 맞다는 것을 보장하기 위해서임


② 검사의 목적을 달성하기 위한 규칙


Glen Myers은 검사의 목적을 달성하기 위해 다음과 같은 규칙 제시


· 오류를 찾기 위해 프로그램을 실행시키는 절차를 검사하 함

· 오류 발견 확률을 높이기 위해 훌륭한 검사 사례를 이용

· 성공적인 검사는 아직 발견되지 않은 오류를 찾아내는 것

※ 검사 자료 : 검사 자료나 실행될 조건을 의미하는 것으로, 소프트웨어 오류를 찾아낼 수 있는 가능성이 가장 높은 테스트를 얻어내는 것


③ 검사 기법


· 검사 기법은 최소한의 시간과 노력으로 대부분의 오류를 찾아내기 위해 검사 사례를 설계하는 방법

· 검사 사례를 설계하는 검사 기법에는 화이트 박스 테스트와 블랙 박스 테스트가 있음

· 검사 사례 설계의 고려사항

- 모듈 내의 모든 독립적인 경로가 적어도 한 번은 수행되어야 함

- 가능한 한 복잡한 논리는 배제시킴

- 임의의 조건을 만족시켜야 함

- 내부 자료 구조를 사용하여 테스트를 수행함


④ 화이트 박스 테스트의 개요


화이트 박스 테스트(White Box Test)는 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 검사하여 검사 사례를 설계하는 방법

· 설계된 절차에 초점을 둔 구조적 테스트로, 프로시저(절차) 설계의 제어 구조를 사용하여 검사 사례를 설계하며, 테스트 과정의 초기에 적용됨

· 모듈 안의 작동을 직접 관찰

· 원시 코드(모듈)의 모든 문장을 한 번 이상 수행함으로써 수행됨

· 프로그램의 제어 구조에 따라 선택, 반복 등의 분기접 부분들을 수행함으로써 논리적 경로를 제어함

· 각 조건에서의 참과 거짓의 모든 논리적 결정이 적어도 한 번 이상 실행됨

· 논리 흐름도, 루프 구조, 순환 복잡도에 관한 오류를 찾을 수 있음

· 화이트 박스 테이트 기법에는 기초 경로 검사, 제어 구조 검사(조건 검사, 루프 검사, 데이터 흐름 검사) 등이 있음


⑤ 기초 경로 검사(Basic Path Testing)


· 기초 경로 검사는 Tom McCabe가 제안한 것으로 대표적인 화이트 박스 테스트 기법

· 검사 사례 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주고, 이 측정 결과는 실행 경로의 기초를 정의하는 데 지침으로 사용됨

· 기초 경로 검사 절차

① 설계나 원시 코드를 기초로 해서 흐름도를 작성

② 흐름도의 논리적 복잡도를 측정

③ 독립 경로들의 기초 집합을 결정

④ 기초 지합의 각 경로를 실행시키는 검사 사례를 선정

· 제어 흐름도

- 제어 흐름을 표현하기 위해 사용되는 그래프로 프로그램 그래프, 흐름 그래프라고 함

- 제어 흐름도는 각 제어마다 다음과 같은 기호를 사용하여 표시함

▶ 노드(원) : 절차적 명령문을 나타냄

▶ 화살표 : 제어의 흐름을 나타냄

▶ 영역 : 화살표와 노드(원)로 둘러싸인 구역으로, 외부 구역도 하나의 영역으로 포함

· 순환 복잡도

순환 복잡도는 한 프로그램의 논리적인 복잡도를 측정하기 위한 소프트웨어의 척도로, 제어 흐름도 이론에 기초를 둠

- 순환 복잡도를 이용하여 계산된 값은 프로그램의 독립적인 경로의 수를 정의하고, 모든 경로가 한 번 이상 수행되었음을 보장하기 위해 행해지는 테스트 횟수의 상한선을 제공

- 제어 흐름도 G에서 순환 복잡도V(G)는 다음과 같은 방법으로 계산할 수 있음

▶ 순환 복잡도는 제어 흐름도의 영역 수와 일치하므로 영역 수를 계산함

▶ V(G) = E - N + 2 → E는 화살표 수, N은 노드의 수


⑥ 제어 구조 검사


· 조건 검사(Condition Testing)

- 프로그램 모듈 내에 있는 논리적 조건을 검사하는 검사 사례 설계 기법

- 프로그램에 있는 각 조건을 검사하는 데 초점을 맞추는 방법으로 조건 검사 범위 측정이 간단함

· 루프 검사(Loop Testing)

- 프로그램의 반복(Loop) 구조에 초점을 맞춰 실시하는 검사 사례 설계 기법

- 루프 검사는 단순 루프, 중첩 루프, 연결 루프, 비구조적 루프의 네 가지를 사용하여 정의할 수 있음

- 초기화 오류, 인덱싱 및 증가 오류, 경계값 오류 등을 발견할 수 있음

· 데이터 흐름 검사(Data Flow Testing)

- 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 검사 사례 설계 기법


 블랙 박스 테스트 개요


블랙 박스 테스트(Black Box Test)는 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 검사로서, 기능 검사


· 소프트웨어 인터페이스에서 실시되는 검사

· 부정확하거나 누락된 기능, 인터페이스 오류, 자료 구조나 외부 데이터베이스 접근에 따른 오류, 행위나 성능 오류, 초기화와 종료 오류 등을 발견하기 위해 사용되며 테스트 과정의 후반부에 적용됨

· 소프트웨어 산물의 각 기능별로 적절한 정보 영역(입·출력)을 정하여 적합한 입력에 대한 출력의 정확성을 점검함

· 블랙 박스 테스트의 종류에는 동치 분할 검사, 경계값 분석, 원인-효과 그래프 검사, 오류 예측 검사, 비교 검사 등이 있음


⑧ 동치 분할 검사(Equivalence Partitioning Testing)


· 동치 분할 검사는 입력 자료에 초점을 맞춰 검사 사례를 만들고 검사하는 방법으로 동등 분할 기법이라고도 함

· 프로그램의 입력 조건에 타당한 입력 자료와 타당하지 않은 입력 자료의 개수를 균등하게 하여 검사 사례를 정하고, 해당 입력 자료에 맞는 결과가 출력되는지 확인하는 방법


⑨ 경계값 분석(Boundary Value Analysis)


· 경계값 분석은 입력 자료에만 치중한 동치 분할 기법을 보완하기 위한 기법

· 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용하여 입력 조건의 경계값을 검사 사례로 선정하여 검사


⑩ 원인-효과 그래프 검사(cause-effect graphing testing)


· 원인-효과 그래프 검사는 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석하여 효용성 높은 검사 사례를 선정하여 검사하는 기법

· 프로그램의 외부 명세에 의한 입력 조건과 입력으로부터 발생되는 출력을 논리적으로 연결시킨 그래프로 표현하여 검사함


⑪ 오류 예측 검사(fault based testing) = Mutation Testing


· 오류 예측 검사는 과거의 경험이나 확인자의 감각으로 검사하는 기법

· 다른 블랙 박스 테스트 기법으로는 찾아낼 수 없는 오류를 찾아내는 일련의 보충적 검사 기법이며, 데이터 확인 검사


 비교 검사(Comparison Testing)


여러 버전의 프로그램에 동일한 검사 자료를 제공하여 동일한 결과가 출력되는지 검사하는 기법



136 검사 전략


① 검사 전략의 개요


검사 전략은 설계된 검사 사례를 수행하는 것으로, 다음과 같은 순서에 의해 진행됨

① 단위(코드) 검사 : 검사는 프로그램의 기본 단위인 모듈(코드) 수준에서 시작

② 통합(설계) 검사 : 단위 검사 후 모듈을 겹합하여 저체 시스템에 대해 검사

③ 검증(요구사항) 검사 : 사용자의 요구사항을 충족시키는가를 검사

④ 시스템 검사 : 개발된 소프트웨어가 컴퓨터 시스템에서 오나벽하게 수행되는지를 검사 


② 단위 검사


· 단위 검사(Unit Test)는 코딩이 이루어진 후 소프트웨어 설계의 최소 단위인 모듈에 초점을 맞추어 검사하는 것

· 단위 검사는 화이트 박스 테스트 기법을 사용

· 단위 검사에서는 이터페이스, 외부적 I/O, 자료 구조, 독립적 기초 경로, 오류 처리 경로, 경계 조건 등을 검사


③ 통합 검사의 개요


· 통합 검사(Integration Test)는 단위 검사가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 검사를 의미

· 통합 검사는 모듈 간의 인터페이스와 연관된 오류를 밝히기 위한 검사 기법

· 통합 검사 방법에는 다음과 같이 비점진적 통합 방식과 점진적 통합 방식

 비점진적 통합 방식

 · 단계적으로 통합하는 절차 없이 모든 모듈이 미리 결합되어 프로그램 전체를 검사하는 방법으로, 빅뱅 통합 검사 있음

 · 전체 프로그램을 대상으로 하므로 오류 발견이 힘들고, 수정이 어려움

 점진적 통합 방식

 · 모듈 단위로 단계적으로 통합하면서 검사하는 방법이며 하향식, 상향식 혼합식 통합 검사가 있음

 · 오류 수정이 용이하고, 인터페이스와 연관된 오류를 완전히 검사할 가능성이 높음


④ 하향식 통합 검사(Top Down Integration Test)


하향식 통합 검사는 프로그램의 상위 모듈에서 하위 모듈 방향으로 통합하면서 검사하는 기법


· 주요 제어 모듈(주요 프로그램)을 기준으로 하여 아래 단계로 이동하면서 통합되는데, 이때 깊이 우선 통합법이나 넓이 우선 통합법을 사용할 수 있음

· 하향식 통합 방법 수행 절차

① 주요 제어 모듈을 드라이버로 사용하고, 주요 제어 모듈의 종속 모듈들은 스터브(Stub)로 대체함

② 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 종속 스터브들이 실제 모듈로 교체됨

③ 모듈이 통합될 때마다 검사를 실시함

④ 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 검사(전에 수행된 검사의 일부나 전체를 다시 검사하는 것)를 실시함


※ 하향식 통합 방법

· 깊이 우선 통합법 : 주요 제어 모듈을 중심으로 이 모듈에 종속된 모든 모듈을 통합하는 것

· 넓이 우선 통합법 : 구조의 수평을 중심으로 해당하는 모듈을 통합하는 것

· 드라이버(Driver) : 검사 사례 자료를 입력 받고, 검사를 위해 받은 자료를 모듈로 넘기며, 관련된 결과를 출력하는 제어 프로그램

· 스터브(Stub) : 일시적으로 필요한 조건만을 가지고 임시로 제공되는 가짜 모듈, 즉 시험용 모듈

· 스터브(Stub) 사용 이유 : 하향식 통합 방식에서는 먼저 상위의 주요 제어 모듈을 검사하게 되는데, 이 때 주요 제어 모듈은 이에 종속된 모듈이 모두 결합되어야 정상적으로 검사될 수 있음. 그러므로 주요 제어 모듈이 정상적으로 운용되도록 스터브를 사용하는 것


⑤ 상향식 통합 검사(Bottom up integration Test)


상향식 통합 검사는 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합하면서 검사하는 기법


· 가장 하위 단계의 모듈부터 통합 및 검사가 수행되므로 스터브는 필요하지 않지만, 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터가 필요함

· 상향식 통합 방법 수행 절차

① 하위 모듈들을 클러스터로 결합

② 검사 사례 입·출력을 조정하기 위해 드라이버 작성

(드라이버 작성 : 주요 제어 모듈이 있어야 프로그램이 동작하게 되는데, 상향식 통합 검사에서는 하위 모듈에서 상위 모듈로 통합·검사되므로 클러스터를 시험하기 위한 제어 프로그램이 필요)

③ 클러스터 검사

④ 드라이버 제거하고, 클러스터는 프로그램 구조의 상위로 이동하여 결합

⑥ 혼합식 통합 검사


혼합식 통합 검사는 하위 수준에서 상향식 통합, 상위 수준에서 하향식 통합을 사용하여 최적의 검사를 지원하는 방식으로 샌드위치식 통합 검사 방법


⑦ 검증 검사(확인 검사, 인수 검사)


· 검증 검사(Validation Test)는 소프트웨어가 사용자의 요구사항을 충족시키는가에 중점을 두고 검사하는 방법

· 통합 검사가 끝난 후 전체가 하나의 소프트웨어로 통합되어 요구사항 명세서를 토대로 진행하며, 블랙 박스 테스트를 이용하여 진행

· 검증 검사 기법

 형상 검사(구성 검토, 감사)

 소프트웨어 구성 요소, 목록, 유지보수를 지원하기 위해 필요한 사항들이 제대로 표현되었는지를 검사하는 기법

 알파 검사

 · 개발자의 장소에서 사용자가 개발자 앞에서 행하는 검사 기법

 · 통제된 환경에서 행해지며, 오류와 사용상의 문제점을 사용자와 개발자가 함게 확인하면서 기록

 베타 검사

 · 선정된 최종 사용자가 여러 명의 사용자 앞에서 행해지는 검사 기법

 · 실업무를 가지고 사용자가 직접 시험하는 것으로, 개발자에 의해 제어되지 않은 상태에서 검사가 행해지며, 발견된 오류와 사용상의 문제점을 기록하고 개발자에게 주기적으로 보고


⑧ 시스템 검사


· 시스템 검사(System Test)는 개발된 소프트웨어가 해당 컴퓨터 시스템에서 완벽하게 수행되는가를 검사하는 것

· 시스템 검사의 종류

 복구 검사

 소프트웨어에 여러 가지 결함을 주어 실패하도록 한 후 올바르게 복구되는지를 확인하는 검사

 보안 검사

 시스템 내에 설치된 보호 도구가 부적당한 침투로부터 시스템을 보호할 수 있는지를 확인하는 검사

 강도 검사

 비정상적인 상황에서 소프트웨어를 실행시키기 위한 검사로 비정상적인 양, 빈도 등의 자원을 요구하는 환경에서 소프트웨어를 실행시킴

 성능 검사

 통합된 시스템에서 소프트웨어의 실시간 성능을 검사하기 위한 것으로, 검사 단계의 전 과정에 걸쳐 수행됨


⑨ 디버깅(Debugging)


디버깅은 검사 단계에서 검사 사례에 의해 오류를 찾은 후 그 오류를 수정하는 과정이며 검사 기법은 아님


· 디버깅은 성공적인 검사 결과로 발생함

· 디버깅은 인간의 심리적인 요소가 많이 관여하기 때문에 매우 어려움


디버깅 접근법

· 맹목적 강요 : 디버깅할 수 있는 모든 방법을 동원하여도 실패하게 된 경우에 사용되는 가장 비효율적인 방법

· 역추적(Backtracking) : 오류가 발견된 위치에서 원인이 발견될 때까지의 코딩 부분으로 거슬러 올라가면서 수정하는 가장 닐반적인 방법이며, 작은 프로그램에서 성공적으로 사용할 수 있음

· 원인 제거(Cause Elimination) : 오류 가능성이 있는 원인을 제거하여 버그를 분리하기 위해 사용



137 유지보수


① 유지보수의 개요


유지보수(Maintenance)는 개발된 소프트웨어의 품질을 항상 최상의 상태로 유지하기 위한 것으로, 소프트웨어 개발 단계 중 가장 많은 노력과 비용이 투입되는 단계


· 유지보수는 소프트웨어가 사용자에게 인수되어 설치된 후 발생하는 모든 공학적 작업

· 소프트웨어 유지보수를 용이하게 하려면 시험 용이성, 이해성, 수정 용이성, 이식성 등이 고려되어야 함

· 유지보수는 수리 보수, 적응 보수, 완전화 보수, 예방 보수 활동으로 구분 할 수 있고, 이 활동을 통해 소프트웨어의 수명은 연장시키는 작업

 수정(Corrective) 보수

 = 수리·교정·정정·하자 보수

 시스템을 운영하면서 검사 단계에서 발견하지 못한 잠재적인 오류를 찾아 수정하는 활동으로, 오류의 수정과 진단을 포함

 적응(Adaptive)보수

 = 환경 적응, 조정 보수

 · 소프트웨어의 수명 기간 중에 발생하는 환경의 변화(하드웨어, 운영체제 등)를 기존의 소프트웨어에 반영하기 위하여 수행하는 활동

 · 운영체제나 컴파일러와 같은 프로그래밍 환경의 변화와 주변장치 또는 다른 시스템 요소가 향상되거나 변경될 대 대처할 수 있는 유지보수 활동

 완전화(Perfective) 보수

 = 기능 개선, 기능 보수

 · 소프트웨어의 본래 기능에 새로운 기능이 추가하거나 성능을 개선하기 위해 소프트웨어를 확장시키는 활동

 · 유지보수 활동 중 가낭 큰 업무 및 비용을 차지하는 활동

 예방(Prevention) 보수

 · 장래의 유지보수성 또는 신뢰성을 개선하거나 소프트웨어의 오류발생에 대비하여 미리 예방 수단을 강구해 두는 활동

 · 예방 유지보수를 소프트웨어 재공학이라고 함


② 유지보수의 과정


① 유지보수 요구 : 유지보수 활동이 필요할 경우 이에 대한 요구를 수행

② 현 시스템에 대한 이해 : 요구된 유지보수 활동을 수행하기 위해서는 먼저 현재 시스템에 대한 이해를 필요로 하며, 현재 시스템에 대해 이해하지 못한 상태에서 유지보수 활동을 수행하면 오류가 발생할 수 있음

③ 수정 및 시험 : 유지보수 활동을 수행하고, 유지보수 활동을 수행한 후에도 정상적으로 기능이 수행되는지를 확인하기 위해 테스트


③ 유지보수의 비용


· 소프트웨어 유지보수 단계에서 사용되는 비용은 소프트웨어 개발에 필요한 비용 중 약 70%를 차지함

· 유지보수 비용은 분석, 평가, 설계 변경, 코딩 등의 생산적인 활동과 프로그램과 자료 구조의 이해, 인터페이스의 특성 파악, 성능 측정 등의 실험 활동에 따라 달라질 수 있음

· 유지보수 비용은 일반적으로 bl 방법에 의해 다음과 같은 산정함

M = P +  Ke(c-d)

 M : 유지보수를 위한 노력(인원/월)

 P : 생산적인 활동에 드는 비용

 K : 통계값에서 구한 상수

 c : 복잡도

 d :  소프트웨어에 대한 지식의 정도



④ 유지보수의 문제점


· 다른 사람이 개발한 소프트웨어는 이해하기가 어려울 뿐만 아니라 소프트웨어 개발자들의 이직률이 높기 때문에 개발된 소프트웨어에 대한 전문적인 설명을 들을 수가 없음

· 소프트웨어에 대한 변경이 자주 발생하므로 변경된 내용을 문서화하지 않을 경우 추적하기 어려움

· 소프트웨어에 대한 적절한 문서가 없거나 문서의 질이 형편없을 수도 있음

· 대부분의 소프트웨어는 변경 가능하도록 설계되지 않음

· 유지보수는 매혹적인 작업이 아니므로 기피하는 경향이 있음


※ 유지보수의 부작용 / 외계인 코드


유지보수의 부작용 : 유지보수 활동을 통해 예기치 못한 부작용이 발생될 수 있음

· 코딩 부작용 : 코딩 내용의 변경으로 인해 발생하는 부작용

· 자료 부작용 : 자료나 자료 구조의 변경으로 인해 발생하는 부작용

· 문서화 부작용 : 자료 코드에 대한 변경이 설계문서나 사용자가 사용하는 매뉴얼에 적용되지 않을 때에 발생하는 부작용


외계인 코드(Alien Code)

· 외계인 코드는 아주 오래 전에 개발되어 유지보수 작업이 매우 어려운 프로그램을 의미

· 일반적으로 15년 전 또는 그 전에 개발된 프로그램을 의미하며, 문서화를 철저하게 해 두면 외계인 코드 방지 가능




출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 4과목 소프트웨어 공학


2장 소프트웨어 프로젝트 관리


117 프로젝트 관리의 개요


① 프로젝트 관리의 개념


· 프로젝트 관리는 주어진 기간 내에 최소의 비용으로 사용자를 만족시키는 시스템을 개발하기 위한 전반적인 활동

· 프로젝트 관리는 소프트웨어 개발 계획을 세우고 분석, 설계, 구현 등의 작업을 통제하는 것으로 소프트웨어 생명 주기의 전 과정에 걸쳐 진행됨

· 소프트웨어 프로젝트를 성공적으로 수행하기 위해서는 수행할 작업의 범위, 필요한 자원, 수행 업무, 이정표, 비용 추진 일정들을 알아야 함


※ 프로젝트 관리는 제한된 시간과 비용으로 좋은 품질의 시스템을 개발하여 고객에게 제공함


② 프로젝트 관리 대상


· 계획 관리 : 프로젝트 계획, 비용 산정, 일정 계획, 조직 계획

· 품질 관리 : 품질 통제, 품질 보증

· 위험 관리 : 위험 식별, 위험 분석 및 평가, 위험 관리 계획, 위험 감시 및 조치


※ 효과적인 프로젝트 관리를 위한 3P(3대 요소)

· 사람(People) : 프로젝트 관리에서 가장 기본이 되는 인적 자원

· 문제(Problem) : 사용자 입장에서 문제를 분석하여 인식함

· 프로세스(Process) : 소프트웨어 개발에 필요한 전체적인 작업 계획 및 구조(Framework)


③ 프로젝트 관리의 구성 단계


[그림 1] 프로젝트 관리의 구성 단계

① 프로젝트 계획 수립

· 프로젝트의 목적을 기술하고, 이를 달성하기 위해 필요한 업무와 성취해야 할 일들을 결정

· 프로젝트를 정의하고 프로젝트 일정 계획, 소요 자원 예측, 위험 평가, 프로젝트에 대한 승인 얻어냄

② 프로젝트 가동

· 프로젝트가 수행될 환경을 구성학 프로젝트에 참여할 인력을 교육시킴

· 프로젝트를 진행할 조직을 구성하고 각 팀원을 선발함

③ 프로젝트 통제

· 계획 대비 프로젝트의 척도를 점검하고, 변경 사항을 승인하는 등의 작업 수행

(척도 : 시스템, 컴포넌트(구성 요소) 또는 프로세스가 요구된 속성을 어느 정도 만족하는 가에 대한 수량적인 측정치)

· 프로젝트 전 기간 동안 수행됨

프로젝트 종료

· 수행 결과의 완전성을 점검하고 프로젝트 종료 



118 프로젝트 계획 수립


① 프로젝트 계획 수립의 개요


프로젝트 계획은 프로젝트가 수행되기 전에 소프트웨어 개발 영역 결정, 필요한 자원, 비용, 일정 등을 예측하는 작업

· 관리자가 자원, 비용, 일정 등을 합리적으로 예측할 수 있도록 프로젝트 틀(Framework)를 제공

· 프로젝트 계획 수립을 통해 소프트웨어 개발 과정에서 발생할 수 있는 여러 가지 위험성을 최소화할 수 있음

· 프로젝트 계획 수립 후에는 시스템 정의서와 프로젝트 계획서가 산출됨

· 프로젝트 계획에 따라 소프트웨어의 품질이 결정되므로, 계획 단계에서 프로젝트 관리자의 임무는 매우 중요함


※ 시스템 정의서에 포함되는 내용 : 문제 기술, 시스템 정당화, 프로젝트 목표, 제약 사항, 추진 전략 등

프로젝트 계획서에 포함되는 내용 : 생명 주기 모델, 기본 일정, 예산, 팀의 구성, 관리 기준, 완료 조건 등


② 시스템 개발 영역(Scope, 범위) 결정


· 프로젝트 계획 수립의 첫 번째 임무로, 개발될 소프트웨어의 영역을 결정

· 소프트웨어의 개발 영역을 결정하는 주요 요소에는 처리될 데이터와 소프트웨어에 대한 기능, 성능, 제약 조건, 인터페이스 및 신뢰도 등


※ 제약 조건 : 외부 하드웨어, 가용 메모리, 다른 시스템들에 의해 소프트웨어에 가해진 제한 사항

※ 인터페이스에 포함되는 사항

· 소프트웨어에 의해 간접적으로 제어되는 장치와 소프트웨어를 실행하는 프로세서나 하드웨어

· 운영체제, 서브루틴 패키지와 같이 새로운 소프트웨어에 연결되어야 하는 소프트웨어

· 키보드나 기타 I/O 장치들을 통하여 소프트웨어를 사용하는 사람

· 순서적인 연산에 의해 소프트웨어를 실행하는 절차 


③ 자원 추산


소프트웨어 개발에 필요한 자원을 예측하는 것


 인적 자원

 · 소프트웨어 프로젝트에 필요한 인원수 및 조직 결정

 · 소프트웨어 개발 영역을 평가하고, 개발을 수행하는 데 필요한 기술들을 선택함으로써 인적 자원 예측이 시작됨

 재사용 소프트웨어 자

 재사용을 원하는 소프트웨어의 컴포넌트(구성 요소) 결정

 환경 자원

 소프트웨어 개발에 필요한 하드웨어와 소프트웨어 환경을 의미하는 것으로, 하드웨어와 소프트웨어가 필요한 시기 결정


④ 소프트웨어 프로젝트 추산


소프트웨어 프로젝트 추산은 프로젝트 수행에 필요한 비용을 예측하는 것으로 신뢰할 만한 비용을 예측하기 위해서 다음과 같은 방법 사용

· 프로젝트 관리의 후반가지 프로젝트 예측을 가능한 한 연기함

· 이미 수행된 유사 프로젝트 참고

· 프로젝트를 상대적으로 잘게 분리하여 예측하는 분해 기법 사용

· 하나 이상의 경험적 예측(실험) 모델을 활용

· 자동화 도구를 도입하여 활용


프로젝트 계획 수립 시 고려사항


· 프로젝트 복잡도

· 프로젝트 규모

· 구조적 불확실성의 정도

· 과거 정보의 가용성

· 위험성



119 소프트웨어 프로젝트 추산


① 소프트웨어 프로젝트 추산의 개요


소프프웨어 프로젝트 추산은 프로젝트를 수행하는 데 필요한 소프트웨어의 ·간접적인 비용을 예측하는 작업


· 소프트웨어 공학 분야 중에서 가장 어렵고 오차 발생이 심한 작업

· 소프트웨어 개발 단계에서 확인되지 않거나 고려하지 못한 요소들이 많기 때문에 정확한 비용을 예측하기는 어려움

· 소프트웨어의 측정 요소

 직접 측정 요소

 노력, LOC(원시 코드 라인 수), 투입 인원, 문서수 등

 간접 측정 요소

 생산성, 복잡성, 효율성, 품질, 신뢰성, 유지 보수성 등


② 프로젝트 비용 결정 요소


프로젝트 요소

어떤 소프트웨어를 개발할 것인가에 따라 비용이 달라질 수 있음

· 제품의 복잡도 : 소프트웨어의 종류(응용·유틸리티·시스템 소프트웨어 등)에 따라

· 시스템의 크기 : 소프트웨어의 규모(대형·소형 소프트웨어)에 따라

· 요구되는 신뢰도 : 신뢰도는 프로그램이 일정한 기간 내에 주어진 조건하에서 필요한 기능을 수행하는 정도를 의미


자원 요소

소프트웨어 개발에 필요한 각종 자원들의 투자정도에 따라 비용이 달라질 수 있음

· 인적 자원 : 관리자, 개발자의 능력 혹은 자질

· 하드웨어 자원 : 개발 장비나 워드프로세서, 프린터와 같은 보조 장비

· 소프트웨어 자원 : 언어 분석기, 문서화 도구, 요구 분석기 등과 같은 개발 지원 도구


생산성 요소

· 개발자의 능력: 전문 분야에 대한 지식, 유사 분야에 대한 경험, 응용 분야에 대한 이해도, 책임감, 창의력 등

· 개발 기간 : 소프트웨어를 개발하는 기간



120 비용 산정 기법


① 하향식 비용 산정 기법


과거의 유사한 경험을 바탕으로 전문 지식이 많은 개발자들이 참여한 회의를 통해 비용을 산정하는 비과학적인 방법

· 프로젝트 전체 비용을 산정한 후 각 작업별로 비용을 세분화함

· 하향식 비용 산정 기법에는 전문가 감정 기법, 델파이 기법 등이 있음


전문가 감정 기법

조직 내에 경험이 많은 두 명 이상의 전문가에게 비용 산정을 의뢰하는 기법

· 가장 편리하고 신속하게 비용 산정 가능, 의뢰자로부터 믿음을 얻을 수 있음

· 새로운 프로젝트에는 과거의 프로젝트와 다른 요소들이 있다는 것을 간과할 수 있음

· 새로운 프로젝트와 유사한 프로젝트에 대한 경험이 없을 수 있음

· 개인적이고 주관적일 수 있음


델파이 기법

전문가 감정 기법의 주관적인 편견을 보완하기 위해 많은 전문가의 의견을 종합하여 산정하는 기법

· 전문가들의 편견이나 분위기에 지배되지 않도록 한 명의 조정자와 여러 전문가로 구성됨

· 비용 산정 순서

① 조정자는 각 비용 산정 요원에게 시스템 정의서와 산정한 비용 내역을 기록할 서식 제공

② 산정 요원들은 정의서를 분석하여 익명으로 그들 나름대로의 비용 산정

③ 조정자는 산정 요원들의 반응을 요약하여 배포함

④ 산정 요원들은 이전에 산정한 결과를 이용하여 다시 익명으로 산정

⑤ 요원들 간의 의견이 거의 일치할 때까지 이 과정을 반복


② 상향식 비용 산정 기법


상향식 비용 산정 기법은 프로젝트의 세부적인 작업 단위별로 비용을 산정한 후 집계하여 전체 비용을 산정하는 방법

· 상향식 비용 산정 기법에는 LOC(원시 코드 라인 수) 기법, 개발 단계별 인월수 기법, 수학적 산정 기법


LOC(원시 코드 라인 수) 기법

LOC 기법은 소프트웨어 각 기능의 원시 코드 라인 수의 비관치, 작관치, 기대치를 측정하여 예측치를 구하고 이를 이용하여 비용을 산정하는 기법

※ 비관치 : 가장 많이 측정된 코드 라인 수 / 낙관치 : 가장 적게 측정된 코드 라인 수 / 기대치 : 측정된 모든 코드 라인의 평균

· 측정이 용이하고 이해하기 쉬워 가장 많이 사용됨

· 예측치를 이용하여 생산성, 노력, 개발 기간 등의 비용 상정


예측치 = (a+4m+b)/6 (단, a:낙관치, b:비관치, c:기대치(중간치))


· 산정 공식

- 노력(인월) = 개발 기간 × 투입 인원

= LOC / 1인당 월 평균 생산 코드 라인 수

- 개발 비용 = 노력(인월) × 단위 비용(1인당 월평균 인권비)

- 개발 기간 = 노력(인월) / 투입 인원

- 생산성 = LOC / 노력(인월)


개발 단계별 인월수(Effort Per Tack)기법

· LOC 기법을 보완하기 위한 기법으로, 각 기능을 구현시키는 데 필요한 노력(인월)을 생명 주기의 각 단계별로 산정

· LOC 기법보다 더 정확함



121 수학적 산정 기법


① 수학적 산정 기법의 개요


· 수학적 산정 기법은 상향식 비용 산정 기법을 경험적 추정 모형, 실험적 추정 모형이라고도 하며, 개발 비용 산정의 자동화를 목표로 함

· 수학적 산정 기법에는 COCOMO 모형, Putnam 모형, 기능 점수(FP) 모형 등이 있으며 각 모형에서는 지정된 공식을 사용하여 비용 산정

· 비용을 자동으로 산정하기 위해 사용되는 공식은 과거 유사한 프로젝트를 기반으로하여 경험적으로 유도된 것


② COCOMO 모형 개요


COCOMO(COnstructive COst MOdel) 모형은 보헴(Boehm)이 제안한 것으로 원시 프로그램의 규모인 LOC에 의한 비용 산정 기법

· 개발할 소프트웨어의 규모(LOC)를 예측한 후 이를 소프트웨어 종류에 따라 다르게 책정되는 비용 산정 방정식(공식)에 대입하여 비용 산정

· 비용 견적의 강도 분석 및 비용 견적의 유연성이 높아 소프트웨어 개발비 견적에 널리 통용되고 있음

· 같은 규모의 프로그램이라도 그 성격에 따라 비용이 다르게 산정됨

· 비용 산정 결과는 프로젝트를 완성하는 데 필요한 노력으로 나타남


③ COCOMO의 소프트웨어 개발 유형


소프트웨어 개발 유형은 소프트웨어의 복잡도 혹은 원시 프로그램의 규모에 따라 조직형, 반분리형, 내장형으로 분류됨


· 조직형(Organic Model)

- 조직형은 기관 내부에서 개발된 중·소 규모의 소프트웨어로 일괄 자료 처리나 과학 기술 계산용, 비즈니스 자료 처리용으로 5만(50KDSI)라인 이하의 소프트웨어를 개발하는 유형

※ KDSI(Kilo Delivered Source Instruction) : 전체 라인 수를 1,000라인 단위로 묶은 것으로 KLOC(Kilo LOC)와 같은 의미

- 사무 처리용, 업무용, 과학용 응용 소프트웨어 개발에 적합

- 비용 산정 공식

노력(MM) = 2.4 × (KDSI)1.05    개발기간(TDEV) = 2.5 × (MM)0.38


· 반분리형(Semi-Detached Model)

- 반분리형은 조직형과 내장형의 중간형으로 트랜잭션 처리 시스템이나 운영체제, 데이터베이스 관리 시스템 등의 30만(300KDSI) 라인 이하의 소프트웨어를 개발하는 유형

- 컴파일러, 인터프리터와 같은 유틸리티 개발에 적합

- 비용 산정 공식

노력(MM) = 3.0 × (KDSI)1.12    개발기간(TDEV) = 2.5 × (MM)0.35


· 내장형(Embedded Model)

- 내장형은 최대형 규모의 트랜잭션 처리 시스템이나 운영체제 등의 30만(300KDSI) 라인 이상의 소프트웨어를 개발하는 유형

- 신호기 제어 시스템, 미사일 유도 시스템, 실시간 처리 시스템 등의 시스템 프로그램 개발에 적합

- 비용 산정 공식

노력(MM) = 3.6 × (KDSI)1.20     개발기간(TDEV) = 2.5 × (MM)0.32


④ COCOMO 모형의 종류


COCOMO는 비용 산정 단계 및 적용 변수의 구체화 정도에 따라 기본, 중간, 발전형으로 구분


· 기본(Basic)형 COCOMO

기본형 COCOMO는 소프트웨어의 크기(생산 코드 라인 수)와 개발 유형만을 이용하여 비용을 산정하는 모형

- 산정 공식

▶ 개발 노력(Effort, MM, PM) = a × (KDSI)b

▶ 개발 기간(TDEV) = c × (MM)d

▶ 적정 투입 인원(FPS) = MM / TDEV

▶ 인적 비용(COST) = MM × 1인당 월평균 급여


· 중간(Intermediate)형 COCOMO

중간형 COCOMO는 기본형의 공식을 토대로 사용하나, 다음 4가지 특성의 15가지 요인에 의해 비용을 산정하는 모형

- 제품의 특성 : 요구되는 신뢰도, 데이터베이스 크기, 제품의 복잡도

- 컴퓨터의 특성 : 수행 시간의 제한, 기억장소의 제한, 가상 기계의 안정성, Turn Around Time

- 개발 요원의 특성 : 분석가의 능력, 개발 분야의 경험, 가상 기계의 경험, 프로그래머의 능력, 프로그래밍 언어의 경험

- 프로젝트 특성 : 소프트웨어도구의 이용, 프로젝트 개발 일정, 최신 프로그래밍 기법의 이용

- 산정 공식

▶ 개발 노력(MM) = 기본 COCOMO의 MM × 요인별 노력 승수

▶ 개발 기간(TDEV) = c × (MM)d

▶ 적정 투입 인원(FPS) = MM / TDEV

▶ 인적 비용(COST) = MM × 1인당 월평균 급여


· 발전(Detailed)형 COCOMO

발전형 COCOMO는 중간형을 보완하여 만들어진 방법으로 개발 공정별로 보다 자세하고 정확하게 노력을 산출하여 비용을 산정하는 모형

- 소프트웨어 환경과 구성 요소가 사전에 정의되어 있어야 하며, 개발 과정의 후반부에 주로 적용

- 산정 공식 : 중간형 산정 공식을 그대로 사용하되, 노력 승수를 다음과 같이 적용하여 산정

노력 승수 = 개발 공정별 노력 승수 × 개발 공정별 가중치


⑤ Putnam 모형


Putnam 모형은 소프트웨어 생명 주기의 전 과정 동안에 사용될 노력의 분포를 가정해주는 모형


· Putnam이 제안한 것으로 생명 주기 예측 모형이라고도 함

· 시간에 따른 함수로 표현되는 Rayleigh - Norden 곡선의 노력 분포도를 기초로 함

· 대형 프로젝트의 노력 분포 산정에 이용되는 기법

· 개발 기간이 늘어날수록 프로젝트 적용 인원의 노력이 감소

· 산정 공식

개발 노력(MM) = L/ (CK· Td4)

(L : 원시 코드 라인 수, Td : 개발 기간, CK : 환경 상수(빈약 환경=2,000, 좋은 환경=8,000, 최적 환경=12,000))


⑥ 기능 점수(FP) 모형


· 기능 점수 모형은 Albrecht가 제안한 것으로, 소프트웨어 기능을 증대시키는 요인별로 가중치를 부여하고, 요인별 가중치를 합산하여 총 기능 점수를 산출하며 총 기능 점수와 영향도를 이용하여 기능 점수(FP)를 구한 후 이를 이용해서 비용을 산정하는 기법


기능점수(FP) = 총 기능 점수 × [0.65 + (0.1 × 총 영향도)]


· 최근에 유용성과 간편성으로 비용 산정 기법 가운데 최선의 평가 받고 있음

· 기능별 가중치

소프트웨어 기능 증대 요인

 가중치

 단순

 보통

 복잡

 자료 입력(입력 양식)

 3

 4

 6

 정보 출력(출력 보고서)

 4

 5

 7

 명령어(사용자 질의수)

 3

 4

 5

 데이터 파일

 7

 10

 15

 필요한 외부 루틴과의 인터페이스

 5

 7

 10


※ 자동화 추정 도구

· SLIM : Rayleigh - Norden 곡선과 Putnam 예측 모델을 기초로 하여 개발된 자동화 추정 도구

· ESTIMACS : 다양한 프로젝트와 개인별 요소를 수용하도록 FP 모형을 기초로 하여 개발된 자동화 추정 도구



122 프로젝트 일정 계획


① 개요


프로젝트 일정 계획은 프로젝트의 프로세스를 이루는 소작업을 파악하고 예측된 노력을 각 소작업에 분배하며, 소작업의 순서와 일정을 정하는 것


· 소프트웨어 개발 기간의 지연을 방지하고 프로젝트가 계획대로 진행되도록 일정을 계획

· 계획된 일정은 프로젝트의 진행을 관리하는 데 기초 자료가 됨

· 계획된 일정과 프로젝트의 진행도를 비교하여 차질이 있을 경우 여러 조치를 통해 조정 가능

· 프로젝트 일정 계획을 위해서는 WBS, PERT/CPM, 간트 차트 등이 사용됨


② 기본 원칙


· 분할 : 프로젝트는 관리 가능한 여러 개의 작업들로 분할되어야 함

· 상호 의존성 : 분할된 각 작업들 간에 어떤 관계가 있는지 상호 의존성이 결정되어야 함

· 시간 할당 : 각 직업에 시간을 할당해야 함

· 노력 확인 : 소프트웨어 개발에 참여할 팀원들에 맞게 시간이 할당되었는지 확인해야 함

· 책임성 : 계획된 작업은 특정 팀에게 할당되어야 함

· 정의된 산출물·이정표 : 각 작업들은 정의된 산출물과 이정표를 가지고 있어야 함


③ 사람-노력 관계와 노력 분배


사람-노력 관계

· 소규모의 개발 프로젝트에서는 한 사람이 요구사항을 분석하고 설계, 코딩, 테스트까지 수행 가능

· 프로젝트 크기가 증가할수록 더 많은 사람들이 참여해야 함

· 프로젝트 진행중에 새로운 인력을 투입할 경우 작업 적응 기간과 부작용으로 인해 일정을 더욱 지연시키고, 프로젝트에 혼란을 가져오게 됨

※ Brooks의 법칙 : 프로젝트 진행주엥 새로운 인력을 투입하면 일정이 더 지연됨


노력 분배

· 예측된 노력을 각 개발 과정에 분배할 때는 40-20-40 규칙으 권장하며, 이는 분석과 설계에 40%, 코딩에 20%, 테스트에 40%를 분배

· 일반적으로 노력은 요구 분석이 10~25%, 설계가 20~25%, 코딩이 15~25%, 테스팅과 디버깅이 30~40%를 차지함


④ WBS(Work Breakdown Structure, 업무 분류 구조)


WBS는 개발 프로젝트를 여러 개의 작은 관리 단위로 분할하여 계층적으로 기술한 업무 구조


· 일정 계획의 첫 단계에서 작업을 분할할 때 사용되는 방법

· 계획 관리 단계에서 일정 계획과 인력 계획, 비용 산정의 기준이 됨

· 프로젝트 진행중에 발생하는 모든 작업을 알 수 있음

· 제품의 계층 구조 또는 프로세스의 계층 구조로 나타냄


⑤ PERT/CPM의 개요


PERT/CPM 네트워크는 프로젝트의 지연을 방지하고 계획대로 진행되게 하기 위한 일정을 계획하는 것으로, 대단위 계획의 조직적인 추진을 위해 자원의 제약하에 비용을 적게 사용하면서 초단시간 내 계획 완성을 위한 프로젝트 일정 방법


·  프로젝트 개발 기간을 결정하는 임계 경로를 제공(임계경로 : 하나의 제품을 개발하기 위한 여러 경로 중 제품이 완성되기까지, 가장 많은 기간을 소요하는 경로)

· 통계적 모델을 적용해서 개별 작업에 대한 가장 근접한 시간을 측정하는 기준이 됨

· 각 작업에 대한 시작 시간을 정의하여 작업들 간의 경계 시간을 계산할 수 있게 함


※ PERT와 CPM 모두 일정 관리를 위해 개발된 기법으로 PERT는 주로 소요 시간 예측이 어려운 경우, CPM은 소요 시간이 확실한 경우에 이용※ PERT/CPM 네트워크를 통해 계산될 수 있는 경계 시간들

· 모든 선행 작업들이 가능한 한 최단시간 내에 완성될 때 한 작업이 시작될 수 있는 가장 빠른 시간

· 최소의 프로젝트 완료 시간이 지연되기 전에 자업 개시를 위한 가장 늦은 시간

· 가장 빠른 완료 시간 : 가장 빠른 개시 시각과 작업 기간의 합

· 가장 늦은 완료 시간 : 가장 늦은 개시 시각과 작업 기간의 합

· 총 자유 시간 : 네트워크 임계 경로를 일정대로 유지하기 위해 작업에 허용된 잉여 시간의 양인 전체 여유 시간


⑥ PERT(Program Evaluation and Review Technique, 프로그램 평가 및 검토 기술)


PERT는 프로젝트에 필요한 전체 작업의 상호 관계를 표시하는 네트워크로 각 작업별로 낙관적인 경우, 가능성이 있는 경우, 비관적인 경우로 나누어 각 단계별 종료 시기를 결정하는 방법


· 과거에 경험이 없어서 소요 기간 예측이 어려운 소프트웨어에서 사용

· 노드와 간선으로 구성되며 원 노드에는 작업을, 간선(화살표)에는 낙관치, 기대치, 비관치를 표시

· 결정 경로, 작엄데 대한 경계 시간, 작업 간의 상호 관련성등을 알 수 있음

· 작업 예측치를 계산하는 PERT 공식


작업 예측치 = (비관치+4×기대치+낙관치/6)    평방 편차 = [(비관치-낙관치)/6]2


⑦ CPM(Criticla Path Method, 임계 경로 기법)


CPM은 프로젝트 완성에 필요한 작업을 나열하고 작업에 필요한 소요 기간을 예측하는데 사용하는 기법


· CPM은 노드와 간선으로 구성된 네트워크로 노드는 작업을, 간선은 작업 사이의 전후 의존 관계를 나타냄

· 원형 노드가 각 작업을 의미하며 각 작업 이름과 소요 기간을 표시하고, 박스 노드는 이정표를 의미하며 박스 노드 위에는 예상 완료 시간을 표시

· 간선을 나타내는 화살표의 흐름에 따라 각 작업이 진행되며, 전 작업이 완료된 후 다음 작업을 진행할 수 있음

· 각 작업의 순서와 의존 관계, 어느 작업이 동시에 수행될 수 있는지를 한눈에 볼 수 있음

· 경영층의 과학적인 의사 결정을 지원하며, 효과적인 프로젝트의 통제를 가능하게 해줌


※ CPM 네트워크를 사용한 일정 계획의 순서

① 프로젝트의 규모 추정

② 각 단계에서 필요한 작업들을 분할

③ 각 작업의 상호 의존 관계를 CPM 네트워크로 나타냄

④ 일정 계획을 간트 차트로 나타냄


⑧ 간트 차트(Gantt Chart)


간트 차트는 프로젝트의 각 작업들이 언제 시작하고 언제 종료되는지에 대한 작업 일정을 막대 도표를 이용하여 표시하는 프로제트 일정표로, 시간선차트라고도 함


· 중간 목표 미달성시 그 이유과 기간을 예측할 수 있게 함

· 사용자와의 문제점이나 예산의 초과 지출 등도 관리 가능

· 자원 배치와 인원 계획에 유용하게 사용됨

· 다양한 형태로 변경하여 사용 가능

· 작업 경로는 표시할 수 없으며, 계획의 변화에 대한 적응성이 약함

· 계획 수립 또는 수정 때 주관적 수치에 기울어지기 쉬움

· 간트 차트는 이정표, 작업 일정, 작업 기간, 산출물로 구성되어 있음

· 수평 막대의 길이는 각 작업의 기간을 나타냄



123 프로젝트 조직 구성 계획


① 프로젝트 조직 구성 계획


· 프로젝트 조직 구성 계획은 프로젝트를 수행하기 위해 참여하는 각 구성원들의 역할을 할당하고 서로 어떤 방법을 통해 협력할 것인가를 정의하는 것

· 프로젝트를 완성하기 위해서는 프로젝트 단위로 팀을 구성하여 수행함

· 프로젝트 수행 기간, 작업의 특성, 팀 구성원 사이의 의사 교류 횟수에 의해팀 구성 방법이 달라질 수 있음

· 프로젝트 팀 구성은 의사 결정권이 누구에게 있느냐에 따라 분산형 팀 구성, 중앙 집중형 팀 구성, 계층적 팀 구성으로 나눌 수 있음


② 분산형 팀 구성


분산형 팀 구성은 팀원 모두가 의사 결정에 참여하는 비이기적인 구성 방식으로, 민주주의식 팀 구성이라고도 함


· 의사 결정을 민주주의식으로 하여 팀 구성원의 참여도와 작업 만족도를 높이고 이직률을 낮게 함

· 팀 구성원 각자가 서로의 일을 검토하고 다른 구성원이 일한 결과에 대하여 같은 그룹의 일원으로서 책임을 짐

· 여러 사람이 의사를 교류하므로 복잡하고 이해되지 않는 문제가 많은 장기 프로젝트 개발에 적합

· 링 모양의 구조를 가지며 이는 모든 구성원이 동등한 레벨에 있음을 보여줌

· 팀 구성 방법 중 가장 많은 의사 소통 경로를 갖는 구조

의사 소통 경로의 수 = n(n-1)/2

· 다양한 의사 교류오 인해 의사 결정 시간이 늦어지고, 개개인의 생산성 및 책임감이 낮아질 수 있음


③ 중앙 집중형 팀 구성


중앙 집중형 팀 구성은 한 관리자가 의사 결정을 하고 팀 구성원들은 그 결정에 따르는 구성 방식으로, 책임 프로그래머 팀 구성이라고 함


· 프로젝트 수행에 따른 모든 권한과 책임을 한 명의 관리자(책임(고급) 프로그래머)에게 위임하고, 기술 및 관리 지원을 위해 인력을 투입하는 형태

· 책임 프로그래머에 따라 의사 결정이 이루어지기 때문에 의사 결정이 빠르고, 의사 교환 경로를 줄일 수 있음

· 한 사람에 의해 통제할 수 있는 비교적 소규모 프로젝트에 적합

· 프로젝트의 성공은 책임 프로그래머의 능력에 달려 있음

· 중앙 집중형 팀 구성에서 각 구성원의 역할

 구성원

 역할

 책임(고급) 프로그래머

 요구 분석 및 설계, 중요한 기술적 판단, 프로그래머에게 작업 지시 및 배분 등

 프로그래머

 책임 프로그래머의 지시에 따른 원시 코드 작성, 테스트, 디버깅, 문서 작성 등

 프로그램 사서

 프로그램 리스트, 설계 문서, 테스트 계획 등을 관리

 보조 프로그래머

 책임 프로그래머의 업무 지원, 여러 가지 기술적인 문제에 대한 자문, 사용자와 품질 보증 담당자 등의 섭외, 책임 프로그래머 감독하에 분석, 설계, 구현 담당


④ 계층적 팀 구성


계층적 팀 구성은 분산형 팀 구성과 중앙 집중형 팀 구성을 혼합한 형태로, 혼합형 팀 구성이라고 함


· 5~7명의 초급 프로그래머를 작은 그룹으로 만들어 각 그룹을 고급 프로그래머가 관리하게 함

· 경험자와 초보자를 구별함

· 프로젝트 리더와 고급 프로그래머에게 지휘 권한을 부여하고, 의사 교환은 초급 프로그래머와 고급 프로그래머로 분산함

· 기술 인력이 관리를 담당하게 되어 좋은 기술력을 사장시킬 수 있으며, 기술 인력이 업무 관리 능력을 갖춰야 한다는 단점이 있음



124 소프트웨어 품질 보증


① 소프트웨어 품질과 품질 관리


· 소프트웨어 품질(Quality) : 주어진 요구사항을 만족시키는 능력을 갖추고 있는 소프트웨어의 측적 가능한 기능 및 특성을 의미

 설계 품질

 설계자가 한 품목을 위해 규정한 특성

 일치 품질

 설계 내용이 개발 과정에서 지켜지는 정도


· 소프트웨어 품질 관리(Quality Control) : 주어진 요구사항에 맞는 소프트웨어를 개발하기 위해 소프트웨어 개발의 전 과정 동안에 이루어지는 모든 활동과 그 활동의 결과로 생산되는 산출물에 대한 품질을 통제하고 보증하기 위한 작업


② 품질 표준(목표)


· 품질 표준(목표)은 명확하게 정의된 소프트웨어의 특성을 의미하며, 소프트웨어의 품질을 평가하는 기준 항목으로 사용됨


 구분

 품질 표준

 의미

 소프트웨어 운영 특성

 정확성

 사용자의 요구 기능을 충족시키는 정도

 신뢰성

 정확하고 일관된 결과를 얻기 위해 요구된 기능을 오류 없이 수행하는 정도

 효율성

 요구되는 기능을 수행하기 위한 필요한 자원의 소요 정도로, 소프트웨어가 자원을 쓸데없이 낭비하지 않아야 함

 무결성

 허용되지 않는 사용이나 자료의 변경을 제어하는 정도

 사용 용이성

 사용에 필요한 노력을 최소화하고 쉽게 사용할 수 있는 정도로, 소프트웨어는 적절한 사용자 인터페이스와 문서를 가지고 있어야 함

 소프트웨어 변경 수용 능력

 유지보수성

 변경 및 오류 사항의 교정에 대한 노력을 최소화하는 정도로, 사용자의 기능 변경의 필요성을 만족하기 위하여 소프트웨어를 진화하는 것이 가능해야 함

 유연성

 소프트웨어를 얼마만큼 쉽게 수정할 수 있는가 하는 정도

 시험 역량

 의도된 기능이 수행되도록 보장하기 위해 프로그램을 시험할 수 있는 정도

 소프트웨어 적응 능력

 이식성

 다양한 하드웨어 환경에서도 운용 가능하도록 쉽게 수정될 수 있는 정도

 재사용성

 전체나 일부 소프트웨어를 다른 목적으로 사용할 수 있는가 하는 정도

 상호 운용성

 다른 소프트웨어와 정보를 교환할 수 있는 정도


③ 소프트웨어 품질 보증(SQA; Software Quality Assurance)


· 소프트웨어 품질 보증은 어떠한 소프트웨어가 이미 설정된 요구사항과 일치하는가를 확인하는 데 필요한 개발 단계 전체에 걸친 계획적이고 체계적인 작업

· 소프트웨어 품질 보증 활동은 소프트웨어 개발 초기에 소프트웨어의 특성과 요구사항을 철저히 파악하여 품질 목표를 설정하고, 개발 단계에서는 정형 기술 검토를 통하여 품질 목표의 충족 여부를 점검하며, 개발 후에는 디버깅과 시험 과정을 거침

 

④ 정형 기술 검토의 개요(FTR; Formal Technicla Review)


· 정형 기술 검토는 가장 일반적인 검토 방법으로 소프트웨어 기술자들에 의해 수행되는 소프트웨어 품질 보증 활동

· 정형 기술 검토 유형에는 검토 회의, 겸열 등이 있으며 이는 모두 회의 형태로 수행됨


목적

· 검토중인 소프트웨어가 해당 요구사항과 일치하는지를 검증

· 소프트웨어가 미리 정해진 표준에 따라 표현되고 있는지를 확인하고, 기능과 로직에 오류가 있는지 확인·발견

· 소프트웨어가 균일한 방식으로 개발되도록

· 프로젝트를 보다 용이하게 관리하도록


⑤ 정형 기술 검토의 지침 사항


· 제품의 검토에만 집중

· 의제를 제한하여 진행

· 논쟁과 반박을 제한

· 문제 영역을 명확히 표현

· 해결책이나 개선책에 대해서는 논하지 말라

· 참가자의 수를 제한하고 사전 준비를 강요

· 검토될 확률이 있는 각 제품에 대한 체크 리스트를 개발

· 자원과 시간 일정을 할당

· 모든 검토자들을 위해 의미있는 훈련을 행하라

· 검토자들은 사전에 작성한 메모를 공유

· 검토의 과정과 결과를 재검토


⑥ 정형 기술 검토 유형


검토 회의(Walkthrough)

· 소프트웨어 개발의 각 단계에서는 개척하는 기술 평가 회의로, 소프트웨어 구성 요소와 같은 작은 단위를 검토하는 것

· 오류의 조기 검출을 목적으로 하며 발견된 오류는 문서화

· 검출된 오류는 검토 회의 기간 동안에 해결하지 않고 미뤄 두었다가 검토 회의 후에 해결

· 3~5명이 검토에 참여해야 하며 검토 회의 시간은 두 시간 이내로 해야 함

· 검토를 위한 자료를 미리 배포하여 검토하도록 하며, 미리 검토하는 시간은 2시간 이내


검열(Inspections, 심사)

· 검토 회의를 발전시킨 형태로, 소프트웨어 개발 단계에서 산출된 결과물의 품질을 평가하며 이를 개선시키는데 사용

· 검열 팀은 관련 분야에 대해 훈련을 받은 1~4명의 요원으로 구성되며, 검열자는 검열 항목에 대한 체크 리스트를 이용해 작업 수행



125 소프트웨어의 신뢰성과 가용성


① 소프트웨어의 신뢰성과 가용성


· 신뢰성 : 프로그램이 주어진 환경에서 주어진 시간 동안 오류 없이 작동활 확률

· 소프트웨어의 품질을 평가하는 다른 품질 표준과는 달리 과거의 자료와 개발상의 자료를 이용하여 측정과 예측 가능

· 하드웨어 신뢰성 측정의 기본 이론을 근거로 측정

· 가용성(신뢰도)는 한 프로그램이 주어진 시점에서 요구사항에 따라 운영되는 확률


② 신뢰성과 가용성 측정


· 소프트웨어의 간단한 신뢰성 측정은 MRBF 이용

· 가용성(신뢰도) 측정 : 시스템의 총 운용 시간 중 정상적으로 가동된 시간의 비율



126 위험 관리


① 위럼 관리(Risk Analysis)


위험 관리는 프로젝트 추진 과정에서 예상되는 각종 돌발 상황(위험)을 미리 예상하고 이에 적절한 대책을 수립하는 일련의 활동


· 위험은 불확실성과 손실을 내재하고 있는데, 위험 관리는 이러한 위험의 불확실성을 감소시키고 손실에 대비하는 작업

· 위험을 식별한 후 발생 확률을 산정하고, 그 영향을 추산하여 해당 위험에 대비하는 비상 계획을 마련

· 취험 관리의 절차는 위험 식별, 위험 분석 및 평가, 위험 관리 계획, 위험 감시 및 조치 순


② 위험의 범주


· 프로젝트 위험 : 프로젝트 계획을 위협하는 것으로, 일정이 지연되고 비용이 증가

· 기술 위험 : 소프트웨어의 품질이나 시기를 위협하는 것으로, 구현이 어려워지거나 불가능하게 됨

· 비즈니스 위험 : 소프트웨어의 생존 가능성을 위협하는 것으로, 원치 않는 제품이나 전략에 맞지 않는 제품 등을 개발


③ 위험의 종류


· 소프트웨어 개발 시 일반적인 위험 요소에는 인력 부족, 예산 관리, 일정 관리, 사용자 요구사항 변경등이 있으며, 이중 가장 대표적인 위험 요소는 사용자 요구사항 변경

위험의 종류(Charette에 의해 제안)

· 알려진 위험 : 프로젝트 계획서, 기술적 환경, 정보 등에 의해 발견될 수 있는 위험

· 예측 가능한 위험 : 과거 경험으로부터 예측할 수 있는 위험

· 예측 불가능한 위험 : 사전 예측이 매우 어려운 위험


④ 위험 식별(Risk Identification)


알려지거나 예측 가능한 위험 요소를 파악하는 작업으로, 위험 항목 점검 목록을 작성하여 활용


 위험 분석 및 평가


· 위험 분석은 프로젝트에 내재한 위험 요소를 인식하고 그 영향을 분석하는 활동으로, 위험 추산 작업을 통해 수행됨

· 가능한 모든 위험 요소와 영향을 분석하여 의사 결정에 반영

· 위험 요소에 대해 효과적이지 못한 관리는 프로젝트를 실패하는 결과도 가져올 수 있음

· 위험 추산을 위해 위험표를 작성하여 활용 


⑥ 위험 관리 계획


위험을 예방하고 위험 발생 시 대책을 준비하여 문서화하는 작업


위험 감시 및 조치


위험 내용을 항상 감시하고 실제 발생 시 조치하는 것으로 다음과 같은 전략 사용


· 위험 회피 : 위험 관리에 대한 최상의 전략으로 위험이 발생될 것을 예상하고 회피하는 것

· 위험 감시 : 위험 요소 징후들에 대하여 계속적으로 인지하는 것

· 위험 관리 및 비상 계획 수립 : 위험 회피 전략이 실패할 경우 위험에 대해 관리하고 대비책과 비상 계획을 세움



127 소프트웨어 형상 관리


① 형상 관리


형상 관리(SCM; Software Configuration Management)는 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발된 일련의 활동

· 소프트웨어 변경의 원인을 아아내고 제어하며 적절히 변경되고 있는지 확인하여 해당 담당자에게 통보하는 작업

· 형상 관리는 소프트웨어 개발의 전 단계에 적용되는 활동으로, 유지보수 단계에서도 수행됨

· 형상 관리는 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것을 목적으로 함


② 소프트웨어 형상 항목(SCI; Software Configuration Item)


· 시스템 명세서

· 소프트웨어 프로젝트 계획서

· 소프트웨어 요구사항 명세와 실행 가능한 프로토타입

· 예비 사용자 매뉴얼

· 설계 명세서

· 원시 코드 목록

· 테스트 계획, 절차, 시험 사례, 결과

· 운영과 설피에 필요한 매뉴얼

· 실행 프로그램

· 데이터베이스 기술서 : 스키마, 파일 구조, 초기 내용

· 구축된 사용자 매뉴얼

· 유지 보수 문서 : 변경 요청서, 변경 처리 보고서

· 소프트웨어 공학을 위한 표준과 절차


③ 형상 관리 기능


· 형상 식별 : 형상 관리 대상에 이름과 관리 번호를 부여하고, 계층 구조로 구분하여 수정 및 추적이 용이하도록 하는 작업

· 버전 제어 : 소프트웨어 처리 시 생성된 다른 버전의 형상 항목을 관리하고, 이를 위해 특정 절차와 도구를 결합시키는 작업

· 변경 제어 : 식별된 형상 항목의 변경 요구를 검토하여 현재의 기준선이 잘 반영될 수 있도록 조정하는 작업

· 형상 감사 : 기준선의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업

· 형상 상태 보고 : 형상의 식별, 통제, 감사 자업의 결과를 기록·관리하고 보고서를 작성하는 작업




출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 4과목 소프트웨어 공학


1장 소프트웨어 공학의 개요


112 소프트웨어와 시스템


① 소프트웨어의 개요


· 소프트웨어는 하드웨어를 동작시켜 사용자가 작업을 편하게 수행하도록 하는 프로그램과 자료구조 등을 총칭

· 소프트웨어는 프로그램 자체뿐만 아니라 프로그램의 개발, 운용 및 유지보수에 관련된 모든 문서와 정보를 포함 


※ 프로그램 : 작업 실행 시 요구되는 기능과 성능을 제공해주는 명령어들의 집합

※ 자료구조 : 기억공간 내에서 자료 표현이나 처리 방법, 자료 간의 관계 등을 나타내는 것



② 소프트웨어의 특징


· 상품성 : 개발된 소프트웨어는 상품화되어 판매됨

· 견고성 : 일부 수정으로 소프트웨어 전체에 영향을 줄 수 있음

· 복잡성 : 개발 과정이 복잡하고 비표준화되어 이해와 관리가 어려움

· 순응성 : 사용자의 요구나 환경 변화에 적절히 변경할 수 있음

· 비가시성 : 소프트웨어의 구조가 외관으로 나타나지 않고, 코드 속에 숨어 있음

· 비마모성 : 사용에 의해 마모되거나 소멸되지 않음

· 비제조성 : 하드웨어처럼 제작되지 않고 논리적인 절차에 맞게 개발됨

· 비과학성 : 소프트웨어 개발 자체는 수학적이거나 과학적인 것이 아니라 조직, 인력, 시간, 비용, 절차 등이 중심이 됨


③ 소프트웨어의 분류


· 기능에 의한 분류 : 소프트웨어의 기능에 따라 분류 → 시스템 소프트웨어와 응용소프트웨어

· 사용 분야에 의한 분류 : 소프트웨어가 사용되는 분야에 따라 분류 → 프로그래밍용, 문서 작성용, 통신용, 분산 처리용, 멀티미디어용, 소프트웨어 개발용, 인공지능용

· 개발 과정의 성격에 따른 분류 : 소프트웨어가 개발되는 과정의 성격에 따라 분류 → 프로토타입, 프로젝트 산출물, 패키지

· 정보처리 방법에 따른 분류 : 정보를 처리하는 방법에 따라 분류 → 일괄 처리 소프트웨어, 온라인 소프트웨어, 실시간 소프트웨어


※ 개발 과정의 성격에 따른 분류

· 프로토타입(Prototype) : 사용자의 요구 사항을 정확히 분석하고 쉽게 이해할 수 있도록 지원하는 견본품, 시제품

· 프로젝트(Project) 산출물 : 아직 상품화되지 않은 연구 과정에서 생산된 소프트웨어

· 패키지(Package) : 소프트웨어 개발이나 업무 처리를 지원하기 위해서 개발된 상품형 소프트웨어


④ 시스템


시스템은 공통의 목적이나 목표를 달성하기 위하여 여러 가지 상호 관련된 요소들을 유기적으로 결합한 것


· 소프트웨어는 독립적으로 존재할 수 없으므로 컴퓨터를 기반으로 하는 여러 시스템과 관련을 맺어 상호 동작함

· 시스템의 구성 요소

[그림 1] 시스템 구성 요소

· 입력(Input) : 처리 방법, 처리할 데이터, 조건을 시스템에 투입하는 것

· 처리(Process) : 입력된 데이터를 처리 방법과 조건에 따라 처리하는 것

· 출력(Output) : 처리된 결과를 시스템에서 산출하는 것

· 제어(Control) : 자료를 입력하여 출력될 때까지의 처리 과정이 올바르게 진행되는지 감독하는 것

· 피드백(FeedBack) : 출력된 결과가 예쩡된 목표를 만족시키지 못할 경우 목표 달성을 위해 반복 처리하는 것

⑤ 소프트웨어 위기의 원인


소프트웨어 위기는 여러 가지 원이에 의해 소프트웨어 개발 속도가 하드웨어 개발 속도를 따라가지 못해 소프트웨어에 대한 사용자들의 요구사항을 처리할 수 없는 문제가 발생함을 의미


· 소프트웨어의 특징에 대한 이해 부족 : 물리적이지 않고 논리적인 소프트웨어의 특징을 이해 못함

· 소프트웨어의 관리 부재 : 소프트웨어에 대한 관리를 소홀히 하여 효율적인 자원 통제가 이루어지지 못함

· 프로그래밍에만 치중 : 소프트웨어의 품질이나 유지보수는 고려하지 않고, 프로그래밍만 잘하려고 집착함으로써 다양하고 복잡해지는 소프트웨어의 요구사항을 처리하지 못함


⑥ 소프트웨어 위기의 결과


· 개발 인력의 부족과 그로 인한 인건비 상승

· 성능 및 신뢰성 부족

· 개발 기간 지연 및 개발 비용 증가

· 유지보수가 어렵고, 이에 따른 비용 증가

· 소프트웨어의 생산성 저하

· 소프트웨어의 품질 저하



113 소프트웨어 공학 


① 소프트웨어 공학의 개념


· 소프트웨어 공학은 소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문이며 여러 가지 방법론과 도구, 관리 기법들을 통하여 소프트웨어의 품질과 생산성 향상이 목적

· 소프트웨어 공학은 다음과 같이 여러 형태로 정의 가능

- IEEE의 소프트웨어 공학 표준 용어사전 : 소프트웨어의 개발, 운용, 유지보수, 폐기 처분에 대한 체계적인 접근 방안

- Fairley : 지정된 비용과 기간 내에 소프트웨어를 체계적으로 생산하고 유지보수하는 데 관려된 기술적이고 관리적인 원리

- Boehm : 과학적인 지식을 소프트웨어 설계와 제작에 응용하는 것이며 이를 개발, 운용, 유지보수하는 데 필요한 문서 작성 과정

· 소프트웨어 공학은 제품을 단지 생산하는 것이 아니라 가장 경제적인 방법으로 양질의 제품을 생산하는 것

· 소프트웨어 공학은 안정적이며 효율적으로 작동하는 소프트웨어를 생산하고, 유지보수 활동을 체계적이고 경제적으로 수행하기 위해 계층화 기술 사용


② 계층화 기술


계층화 기술은 관리자가 소프트웨어 개발 과정을 제어하고, 기술진이 고품질의 소프트웨어를 구축할 수 있도록 하는 기술을 의미하며, 계층화 기술에는 도구, 방법, 절차가 있음

[그림 2] 계층화 기술

· 도구(Tool) : 절차와 방법을 자동 또는 반자동으로 처리하는 기능을 제공하는 것으로, 대표적으로 CASE(Computer Aided Software Engineering)를 사용

· 방법(Method) : 소프트웨어를 구축하는 기술적인 방법을 제공

· 절차(Process) : 소프트웨어 공학의 기반이되는 것으로, 소프트웨어 개발에 사용되는 개발 방법과 도구가 사용되는 순서

계층화 기술들을 결합시켜 합리적이고 적절한 방법으로 소프트웨어를 개발하고 유지시키는 역할


③ 소프트웨어 공학의 기본 원치


· 현대적인 프로그래밍 기술을 계속적으로 적용해야 함

· 개발된 소프트웨어의 품질이 유지되도록 지속적으로 검증해야 함

· 소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록을 유지해야 함


④ 소프트웨어 공학의 발전



⑤ 소프트웨어의 품질과 생산성


소프트웨어의 품질

소프트웨어의 품질은 주어진 요구사항을 만족시키는 능력을 갖추고 있는 소프트웨어의 측정 가능한 기능 및 특성을  의미하며, 좋은 품질의 소프트웨어는 다음과 같은 특성을 갖음

· 사용자가 요구하는 대로 동작해야 함

· 하드웨어 자원을 효율적으로 이용할 수 있어야 함

· 일정 시간 내에 주어진 조건하에서 원하는 기능을 실행할 수 있어야 함

· 애매모호함이 없이 처리 절차에 맞게 수행되어 정확하게 결과가 산출되어야 함

· 소프트웨어의 개발, 유지보수 등이 초기 예상 비용 이내에서 수행되어야 함

· 적당한 사용자 인터페이스 제공으로 사용하기가 편리해야 함

· 유지보수가 용이하고 신뢰성이 높아야 함

· 잠재적인 에러가 최소화되어야 함

· 소프트웨어의 사용법, 구조의 설명, 성능, 기능 등이 이해하기 쉬워야 함

· 실행 속도가 빠르고, 기억 용량을 적게 차지해야 함


소프트웨어의 생산성

소프트웨어의 생산성은 투입된 비용, 노력 등에 대한 생산량을 의미하는 것으로, 생산성에 영향을 미치는 요소는 다음과 같음

· 개발자의 능력

· 원할한 의사 전달

· 프로젝트의 복잡도와 성격

· 기술 수준

· 관리 기술



114 소프트웨어 생명 주기


① 소프트웨어 생명 주기의 개요


· 소프트웨어 생명 주기는 소프트웨어 개발 방법론의 바탕이 되는 것으로 소프트웨어를 개발하기 위해 정의하고 운용, 유지보수 등의 과정을 각 단계별로 나눈 것

· 소프트웨어 생명 주기는 소프트웨어 개발 단계와 각 단계별 주요 활동, 활동의 결과에 대한 산출물로 표현하며, 소프트웨어 수명 주기라고도 함

· 소프트웨어 생명 주기의 역할

- 프로젝트 비용 산정과 개발 계획을 수립할 수 있는 기본 골격이 됨

- 프로젝트 진행 방향을 명확하게 파악하게 함

- 용어 및 기술의 표준화를 가능하게 함

- 프로젝트 관리를 용이하게 함

- 여러 소프트웨어 간에 상호 일관성을 유지하게 함


② 일반적인 소프트웨어 생명 주기


정의 단계 → 개발 단계 → 유지보수 단계


정의단계

· '무엇'을 처리하는 소프트웨어를 개발할 것인지를 정의하는 단계로,관리자와 사용자가 가장 많이 참여하는 단계

- 타당성 검토 단계 : 개발할 소프트웨어가 법적, 경제적, 기술적으로 실현 가능성이 있는지를 조사하는 단계

- 개발 계획 단계 : 소프트웨어 개발에 사용될 자원과 비용을 측정하는 단계

- 요구사항 분석 단계 : 사용자가 요구한 문제를 보다 상세하고 정확히 분석하는 단계


개발 단계

· '어떻게'에 초점을 두고 실제적으로 소프트웨어를 개발하는 단계

- 설계 단계 : 소프트웨어의 구조, 알고리즘, 자료 구조 등을 작성하는 단계로, 프로그램 설계용 언어나 자연 언어 또는 도표로 표현

에러가 가장 많이 발생하는 단계

- 구현 단계 : 설계 단계에서 작성된 문서를 기초로 하여 코딩하고 번역하는 단계

- 테스트 단계 : 구현된 소프트웨어에 내재되어 있는 오류를 찾아주는 단계


유지보수 단계

· 소프트웨어를 직접 운용하며, '변경'에 초점을 두고 여러 환경 변화에 따라 소프트웨어를 적응 및 유지시키는 단계

· 소프트웨어 생명 주기 단계 중에서 시간과 비용이 가장 많이 듬



115 소프트웨어 생명 주기 모형1


① 소프트웨어 생명 주기의 개요


· 소프트웨어 생명 주기를 표현하는 형태를 소프트웨어 생명 주기 모형이라고 하며, 소프트웨어 프로세스 모형 또는 소프트웨어 공학 패러다임

· 개발자는 문제의 유형이나 개발 방법 등에 따라 특정 모형을 선택하여 사용할 수도 있고, 개별적인 모형을 사용할 수도 있음

· 일반적으로 사용되는 소프트웨어 생명 주기 모형에는 폭포수 모형, 프로토타입 모형, 나선형 모형, 4세대 모형 등이 있음


② 폭포수 모형


폭포수 모형은 폭포에서 한번 떨어진 물은 거슬러 올라갈 수 없듯이 소프트웨어 개발도 각 단계를 확실히 매듭짓고 그 결과를 철저하게 검토하여 승인 과정을 거친 후에 다음 단계를 진행하며 이전 단계로 넘어갈 수 없는 방식


· 폭포수 모형은 소프트웨어 공학에서 가장 오래되고 가장 폭넓게 사용된 전통적인 소프트웨어 생명 주기 모형으로, 고전적 생명 주기 모형이라고도 함

· 소프트웨어 개발 과정의 앞 단계가 끝나야만 다음 단계로 넘어갈 수 있는 선형 순차적 모형

· 제품의 일부가 될 매뉴얼을 작성해야 함

· 다음 단계를 수행하기 위해 각 단계가 끝난 후에는 결과물이 정확하게 산출되어야 함

· 두 개 이상의 과정이 병행하여 수행되지 않음


개발 순서

타당성 검토 → 계획 → 요구 분석 → 설계 → 구현(코딩) → 시험(검사) → 유지보수


장점

· 모형의 적용 경험과 성공 사례가 많음

· 단계별 정의가 분명하고, 전체 공조의 이해가 용이함

· 단계별 산출물이 정확하여 개발 공정의 기준점을 잘 제시함

단점

· 개발 과정중에 발생하는 새로운 요구나 경험을 반영하기 어려우므로 처음부터 사용자들이 모든 요구사항들을 명확하게 제시해야 함

· 단계별로 오류 없이 다음 단계로 진행해야 하는데 현실적으로 오류 없이 다음 단계로 진행하기는 어려움

· 개발된 프로그램을 업무에 운용할 대 검출되지 않은 오류로 인하여 사용자들이 큰 인내심을 가져야 함


③ 프로토타입 모형


프로토타입 모형은 사용자의 요구 사항을 정확히 파악하기 위해 실제 개발될 소프트웨어에 대한 견본품을 만들어 최종 결과물을 예측하는 모형

· 시제품은 사용자와 시스템 사이의 인터페이스에 중점을 두어 개발

· 시스템의 일부 혹은 시스템의 모형을 만드는 과정으로서 요구된 소프트웨어를 구현하는데, 이는 추후 구현 단계에서 사용될 골격 코드가 됨

· 소프트웨어의 개발이 완료된 시점에서 오류가 발견되는 폭포수 모형의 단점을 보완하기 위한 모형

· 프로토타입은 요구 분석 단계에서 사용하게 되며, 프로토타입의 평가가 끝나고 개발이 승인되면 다른 모형을 이용하여 본격적으로 개발이 이루어짐

· 소프트웨어 생명주기에서 유지보수가 없어지고, 개발 단계 안에서 유지보수가 이루어지는 것으로 볼 수 있음


개발 순서


[그림 3] 프로토타입 모형 개발 순서


장점

· 요구사항을 충실히 반영하며, 요구사항의 변경이 용이

· 최종 결과물이 만들어지기 전에 의뢰자가 최종 결과물의 일부 또는 모형을 볼 수 있음

· 프로토타입은 의뢰자나 개발자 모두에게 공동의 참조 모델을 제공


단점

· 미리 제작된 소프트웨어를 사용할 경우 실제 소프트웨어와의 차이가 발생할 수 있어 사용자에게 혼란을 줄 수 있음

· 단기간에 제작해야 하기 때문에 비효율적인 언어나 알고리즘을 사용할 수 있음



116 소프트웨어 생명 주기2


① 나선형 모형


나선형 모형은 보헴이 제안한 것으로, 폭포수 모형과 프로토타입 모형의 장점에 위험 분석 기능을 추가한 모형


· 나선형을 따라 돌듯이 여러 번의 소프트웨어 개발 과정을 거쳐 점진적으로(프로토타입을 지속적으로 발전시켜) 완벽한 최종 소프트웨어를 개발하는 것으로, 점진적 모델

· 소프트웨어를 개발하면서 발생할 수 있는 위험을 관리하고 최소화하는 것을 목적으로 함


개발 순서

① 계획 및 정의(Planing) : 개발 목적, 제약 조건 등을 설정

② 위험 분석(Risk Analysis) : 위험 요소를 분석하고, 기능 선택의 우선순위를 지정

③ 공학적 개발(Engineering) : 개선된 한 단계 높은 수준의 프로토타입을 개발

④ 고객 평가(Customer Evaluation) : 개발된 결과(프로토타입)을 평가


·단점

· 가장 현실적인 모형으로, 대규모 프로젝트나 큰 시스템에 적합

· 점진적으로 개발 과정이 반복되므로 누락되거나 추가된 요구사항 첨가 가능하고 정밀하며 유지보수 과정이 필요 없음

· 위험 분석 단계에서 기술과 관리의 위험 요소들을 하나씩 제거해 나감으로서 완성도 높은 소프트웨어를 만들 수 있음

· 위험성 평가에 크게 의존하기 때문에 이를 발견하지 않으면 반드시 문제가 발생함

· 비교적 최신 기법이므로 폭포수 모형이나 프로토타입 모형보다 널리 사용되지 않음


② 4GT 모형


4GT 모형은 사용자와 개발자가 쉽게 접근하고 사용할 수 있는 4세대 언어를 이용하여 개발자가 조사한 요구사항 명세서로부터 원시 코드를 자동으로 생성할 수 있게 해주는 모형


· 설계 단계를 축소하고, 요구 분석 단계에서 구현 단계로 전환할 수 있는 비절차적 모형


개발 순서

요구사항 수집 → 설계 전략 → 4세대 언어를 이용한 구현 → 제품화


·단점

· 설계 단계 단축 가능

· 4세대 언어를 사용하므로 원시 코드를 자동으로 생성함

· 중·소형 소프트웨어 개발에 사용하면 개발 시간이 감소되지만 대규모 소프트웨어 개발에서는 자동화로 인해 단축된 시간보다 분석, 설계 단계 등에서 더 많은 시간을 필요로 함




출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 1과목 데이터베이스


5장 자료 구조의 기본


030 자료 구조의 개념


① 자료 구조의 정의


- 효율적인 프로그램을 작성할 때 가장 우선적인 고려사항은 저장공간의 효율성과 실행시간의 신속성

- 자료구조는 프로그램에서 사용하기 위한 자료를 기억장치의 공간 내에 저장하는 방법과 저장된 그룹 내에 존재하는 자료 간의 관계, 처리 방법 등을 연구 분석하는 것

· 자료 구조는 자료의 표현과 그것과 관련된 연산

· 자료 구조는 일련의 자료들을 조직하고 구조화하는 것

· 어떠한 자료 구조에서도 필요한 모든 연산들을 처리하는 것이 가능

· 자료 구조에 따라 프로그램 실행시간이 달라짐


② 자료 구조의 분류


[그림 1] 자료 구조 분류



③ 자료 구조의 이용


· 정렬(Sort) : 기억장치 내의 자료를 일정한 순서에 의해 나열하는 것

· 검색(Search) : 기억장치 내의 자료를 찾는 것 

· 파일 편성 : 자료를 기억 매체에 저장할 때의 파일 구조

· 인덱스 : 파일에서 특정 자료를 빠르게 찾기 위한 색인표



031 리스트


① 선형 리스트(Linear List)


· 선형 리스트는 배열과 같이 연속되는 기억장소에 저장되는 리스트

· 연접 리스트 또는 축자구조라고도 함

· 선형 리스트의 대표적인 구조 : 배열(Array)


특징

· 가장 간단한 자료 구조

· 접근 속도 빠름

· 중간에 자료를 삽입하기 위해서는 연속된 빈 공간 있어야 함

· 기억장소를 연속적으로 배정받기 때문에 기억장소 이용 효율은 밀도가 1로서 가장 좋음

· 자료의 개수가 n개일 때 삽입 시의 평균 이동 횟수는 (n+1)/2이고, 삭제 시에는 (n-1)/2

· 삽입, 삭제 시 자료의 이동이 필요하기 때문에 작업이 번거로움


② 연결 리스트(Linked List)


연결 리스트는 자료들을 반드시 연속적으로 배열시키지는 않고 임의의 기억공간에 기억시키되, 자료 항목의 순서에 따라 노드의 포인터 부분을 이용하여 서로 연결시킨 자료 구조


연결 리스트의 특징

· 노드의 삽입, 삭제 작업이 용이

· 기억공간이 연속적으로 놓여 있지 않아도 저장이 가능

· 연결을 위한 링크(포인터)부분이 필요하기 때문에 순차 리스트에 비해 기억공간 이용 효율이 좋지 않음

· 연결을 위한 포인터를 찾는 시간이 필요하기 때문에 접근 속도 느림

· 중간 노드 연결이 끊어지면 그 다음 노드를 찾기 힘듦

· 희소 행렬을 링크드 리스트로 표현하면 기억장소가 절약됨

· 트리를 표현할 때 가장 적합한 자료 구조


※ 노드(Node)

 Data 부분

 Link 부분

자료를 저장하는 데이터 부분과 다음 노드를 가리키는 포인터인 링크 부분으로 구성된 기억공간


※ 포인터(Pointer)

현재의 위치에서 다음 노드의 위치를 알려주는 요소

· 프런트 포인터 : 리스트를 구성하는 최초의 노드 위치를 가리키는 요소

· 널 포인터 : 0또는 ∧, \0으로 표시하며, 마지막 노드의 링크 부분에 일반적으로 사용하는 것으로, 다음 노드가 없음을 나타내는 포인터

※ 희소 행렬

희소 행렬은 행렬의 요소 중 많은 항들이 0으로 되어 있는 형태로, 기억장소를 절약하기 위해 링크드 리스트를 이용하여 저장


연결 리스트의 종류

· 단순 연결 리스트

· 단순 환상 연결 리스트

· 이중 연결 리스트

· 이중 환상 연결 리스트



032 스택(Stack)


① 스택의 개념


· 스택은 리스트 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료 구조

· 스택은 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO; Last In First Out) 방식으로 자료 처리

· TOP

- Stack으로 할당된 기억공간에서 가장 마지막으로 삽입된 자료가 기억된 위치를 가리키는 요소

- 스택 포인터(SP, Stack Pointer)라고도 함

·Bottom : 스택의 가장 밑바닥


② 자료의 삽입(Push)


 Top = Top +1

 If Top > M Then

Overflow

 Else

X(Top) ← Item

 스택 포인터(Top)를 1 증가시킴
 스택 포인터가 스택의 크기보다 크면 Overflow
 

 그렇지 않으면 Item이 가지고 있는 값을 스택의

 Top위치에 삽입


· M : 스택의 크기

· Top : 스택 포인터

· X : 스택의 이름

· Overflow : 스택으로 할당받은 메모리 부분의 마지막 주소가 M번지라고 할 때, Top Pointer의 값이 M보다 커지만 스택의 모든 기억장소가 꽉 채워져 있는 상태이므로 더 이상 자료를 삽입할 수 없어 Overflow 발생시킴


③ 자료의 삭제(Pop Up)


 If Top = 0 Then

Underflow

 Else

Item ← X(Top)

Top = Top - 1

 스택 포인터가 0이면 스택의 바닥이므로 더 이상 삭제할 자료가 없으므로

 Underflow를 처리함

 그렇지 않으면

 Top 위치에 있는 값을 Item으로 옮기고

 스택 포인터를 1 감소시킴


※ Stack에 기억되어 있는 자료를 삭제시킬 때는 제일 먼저 삭제할 자료가 있는지 앖는지부터 확인해야 함

· Underflow : Top Pointer가 주소 0을 가지고 있다면 스택에는 삭제할 자료가 없으므로 Underflow를 발생시킴


※ Overflow : 꽉 채워져 있는 상태로 더 이상 자료를 삽입할 수 없는 상태

   Underflow : 자료가 없어서 자료를 제거할 수 없는 상태


④ Stack의 응용 분야


· 부 프로그램 호출 시 복귀주소를 저장할 때

· 함수 호출의 순서 제어

· 인터럽트가 발생하여 복귀주소를 저장할 때

· 후위 표기법(Postfix Notation)으로 표현된 수식을 연산할 때

· 0 주소지정방식 명령어의 자료 저장소

· 재귀(Recursive) 프로그램의 순서 제어

· 컴파일러를 이용한 언어 변역 시



033 큐(Queue)와 데크(Deque)


① 큐(Queue)


· 선형 리스트의 한쪽에서는 삽입 작업이 이루어지고 다른 한쪽에서는 삭제 작업이 이루어지도록 구성한 자료 구조

· 가장 먼저 삽입된 자료가 가장 먼저 삭제되는 선입선출(FIFO; First In First Out) 방식으로 처리

· 시작과 끝을 표시하는 두 개의 포인터 있음

· 프런트(F, Front) 포인터

- 가장 먼저 삽입된 자료의 기억 공간을 가리키는 포인터

- 삭제 작업할 때 사용

· 리어(R, Rear) 포인터

- 가장 마지막에 삽입된 자료가 위치한 기억장소를 가리키는 포인터

- 삽입 작업할 때 사용

· Queue의 응용분야

- 청구 업무나 택시 정거장처럼 서비스 순서를 기다리는 등의 대기 행렬의 처리에 사용

- 운영체제의 작업 스케줄리에 사용


② 데크(Deque)


· 삽입과 삭제가 리스트의 양쪽 끝에서 모두 발생할 수 있는 자료 구조

· Double Ended Queue

· Stack과 Queue의 장점만 따서 구성한 것

· 입력이 한쪽에서만 발생하고 출력은 양쪽에서 일어날 수 있는 입력 제한과, 입력은 양쪽에서 일어나고 출력은 한 곳에서만 이루어지는 출련 제한있음

· 입력 제한 데크 : Scroll

· 출력 제한 데크 : Shelf



034 트리(Tree)


① 트리의 정의


· 트리는 정점(노드)과 선분을 이용하여 사이클을 이루지 않도록 구성한 Graph의 특수한 형태

· 가족 계보(족보), 연산 수식, 회사 조직 구조도, 히프(Heap) 등을 표현하기에 적합


② 트리 관련 용어


[그림 2] 트리


· 노드(Node) : 트리의 기본 요소로서 자료 항목과 다른 항목에 대한 가지를 합친 것

· 근 노드(Root Node) : 트리의 맨 위에 있는 노드

· 디그리(Degree) : 각 노드에서 뻗어나온 가지의 수

· 단말 노드(Terminal Node) = 잎 노드(Leaf Node) : 자식이 하나도 없는 노드, 즉 Degree가 0인 노드

· 비단말 노드(Non-Terminal Node) :자식이 하나라도 있는 노드, 즉 Degree가 0이 아닌 노드

· 조상 노드(Ancestors Node) : 임의의 노드에서 근 노드에 이르는 경로상에 있는 노드들

· 자식 노드(Son Node) : 어떤 노드에 연결된 다음 레벨의 노드

· 부모 노드(Parent Node) : 어떤 노드 연결된 이전 레벨의 노드

· 형제 노드(Brother Node, Sibling) : 동일한 부모를 갖는 노드들

· Level : 근 노드의 Level을 1로 가정한 후 어떤 Level이 L이면 자식 노드는 L+1

· 깊이(Depth, Height) : Tree에서 노드가 가질 수 있는 최대의 레벨

· 숲(Forest) : 여러 개의 트리가 모여 있는 것

· 트리의 디그리 : 노드들의 디그리 중에서 가장 많은 수



035 이진 트리


이진 트리는 차수(Degree)가 2 이하인 노드들로 구성된 트리, 즉 자식이 둘 이하인 노드들로만 구성된 트리


① 이진트리의 특성


· 이진 트리의 레벨 i에서 최대 노드의 수 :  2n-1

· 이진 트리에서 Terminal Node수가 n0, 차수가 2인 노드 수가 n2라 할 때 n0n+ 1



② 이진 트리의 종류


정이진 트리(Full Binary Tree)

- 정이진 트리는 깊이(Depth)가 k일 때 전체 노드의 수가 2k-1개의 노드이고, 레벨 i마다 2i-1개의 노드들로 꽉 찬 트리를 말함


전이진 트리(Complete Binary Tree)

· 전이진 트리는 노드의 개수가 n개일 때, 정이진 트리의 각 노드에 붙인 1~n의 일련번호와 1:1 대응되는 트리를 말함

· 중간에 빈 부분이 있으면 전이진 트리 될 수 없음


사향 이진 트리(Skewed Binary Tree)

· 사향 이진 트리는 루트 노드로부터 왼쪽 또는 오른쪽으로만 기울어진 트리, 즉 왼쪽 또는 오른쪽 자식이 없는 노드들로만 구성된 트리를 말함

· 왼쪽 사향 이진 트리 : 오른쪽 자식이 없는 노드들로만 구성된 트리

· 오른쪽 사향 이진 트리 : 왼쪽 자식이 없는 노드들로만 구성된 트리



036 이진 트리의 운행법(Traversal)


· 트리를 구성하는 각 노드들을 찾아가는 방법 :  운행법

· 이진 트리를 운행하는 방법은 산술식의 표기법과 연관성 가짐


① 트리의 운행법


· Preorder 운행 : Root → Left → Right 순으로 운행

· Inorder 운행 : Left → Root → Right 순으로 운행

· Postorder 운행 : Left → Right → Root 순으로 운행


② 수식의 표기법


산술식을 계산하기 위해 기억공간에 기억시키는 방법으로 이진 트리를 많이 사용함

이진 트리로 만들어진 수식을 인오더, 프리오더, 포스트오더로 운행하면 각각 중위(Infix), 전위(Prefix), 후위(Postfix) 표기법이 됨


· 전위 표기법(PreFix) : 연산자 → Left → Right, +AB

· 중위 표기법(InFix) : Left → 연산자 → Right, A+B

· 후위 표기법(PostFix) : Left → Right → 연산자, AB+


Infix 표기를 Postfix나 Prefix로 바꾸기

· Postfix나 Prefix는 스택을 이용하여 처리하므로 Infix는 Postfix나 Prefix로 바꾸어 처리


Postfix나 Prefix로 표기된 수식을 Infix로 바꾸기

· Postfix는 Infix 표기법에서 연산자를 해당 피연산자 두 개의 뒤로 이동한 것이므로 연산자를 다시 해당 피연산자 두 개의 가운데로 옮기면 됨

· Prefix는 Infix 표기법에서 연산자를 해당 피연산자 두 개의 앞으로 이동한 것이므로 연산자를 다시 해당 피연산자 두 개의 가운데로 옮기면 됨


③ 스레드 이진 트리(Threaded Binary Tree)


· 스레드 이진 트리는 이진 트리에서 발생하는 널 링크를 트리 운행에 필요한 다른 노드의 포인터로 사용하도록 고안된 트리

· 이진 트리를 이중 연결 리스트로 표현할 때 임의의 노드에 대한 자식 노드가 없는 부분의 링크 포인터로 Nil Pointer를 기억시키게 됨

· 스레드 이진 트리 표현 방법

- 어떤 노드의 왼쪽 링크 포인터가 Nil이면 그 노드의 직전에 검사된 노드를 가리키는 포인터로 사용하고, 오른쪽 링크 포인터가 Nil이면 그 노드의 직후에 검사될 노드를 가리키는 포인터로 사용

- 해당 노드의 직전, 직후 노드는 트리 운행법에 따라 방문한 노드의 순서대로 결정



037 그래프


① 그래프의 정의


· 그래프 G는 정점 V와 간선 E의 두 집합으로 이루어짐

· 통신망(Network), 교통망, 이항관계, 연립방정식, 유기화학 구조식, 무향선분 해법등에 응용됨

· Tree는 사이클이 없는 Graph


② 용어 정리


Loop : 한 정점에서 그 자신에 이어지는 간선 Loop


차수(Degree)

· 무방향 그래프 : 한 정점에 연결된 간선의 수

· 방향 그래프

- 진입 차수(Indegree) : 한 정점에 도착하는 방향 간선의 수

- 진출 차수(Outdegree) : 한 정점에서 출발하는 방향 간선의 수

- 차수(Degree) : 진입 차수 + 진출 차수


경로 : 임의의 정점에서 다른 정점으로 이르는 길

· 경로 길이(Path Length) : 경로상에 있는 간선들의 수

· 단순 경로 : 한 경로상에 있는 모든 간선이 서로 다를 떄의 경로, 즉 같은 간선을 두 번 이상 지나지 않는 경로

· 기본 경로 : 한 경로상에 있는 모든 정점이 유일할 때의 경로, 즉 같은 정점을 두 번 이상 지나지 않는 경로

· 사이클 : 같은 정점에서 시작과 끝이 이루어지는 경로

· 최대 사이클 : 사이클을 이루는 경로 중 최대 경로 길이


연결 요소 : 무방향 그래프에서의 최대 연결 서브 그래프


강력 연결 요소 : 방향 그래프에서 두 정점 사이의 간선이 양방향으로 서로 강력하게 연결되어 있는 요소, 즉 두 정점 사이에 방향 사이클이 이루어지는 요소


③ 인접행렬을 이용한 그래프의 표현 방법


④ 특수 그래프


최소 비용 신장 트리

· 최소 비용 신장 트리는 가중치가 가장 작은 간선들을 사이클을 이루지 않도록 연결시켜 만든 그래프


간선 작업 네트워크

· 간선 작업 네트워크는 프로젝트를 해결하기 위해 수행되는 작업 순서를 나타내는 방향 그래프

· 간선은 작업과 작업시간을 나타내고, 정점이 공정을 나타냄

· 임계 경로 : 최장 길이를 갖는 경로



038 정렬(Sort)의 개요


정렬은 파일을 구성하는 각 레코드를 특정 키 항목을 기준으로 오름차순 또는 내림차순으로 재배열하는 작엄


① 정렬 방식

    정렬은 크게 주기억장치에서 이루어지는 내부 정렬과 보조기억장치에서 이루어지는 외부 정렬로 구분됨


내부정렬

· 선택법 : 히프 정렬

· 삽입법 : 삽입 정렬, 쉘 정렬

· 교환법 : 버블 정렬, 선택 정렬, 퀵 정렬

· 병합법(합병법) : 2-Way Merge Sort

· 분배법(분산법) : 기수 정렬(Radix Sort)


외부 정렬

· 밸런스 병합 정렬

· 캐스케이드 병합 정렬

· 폴리파즈 병합 정렬

· 오실레이팅 병합 정렬


② 정렬 알고리즘 선택 시 고려 사항


· 데이터의 양

· 초기 데이터의 배열 상태

· 키 값들의 분포 상태

· 소용공간 및 작업 시간

· 사용 컴퓨터 시스템의 특성



039 내부 정렬


① 삽입 정렬(Insert Sort)


삽입 정렬은 가장 간단한 정렬 방식으로 이미 순서화된 파이렝 샐운 하나의 레코드를 순서에 맞게 삽입시켜 정렬

· 두 번째 키와 첫 번째 키를 비교해 순서대로 나열(1회전)하고, 이어서 세 번째 키를 첫 번째, 두 번째 키와 비교해 순서대로 나열(2회전)하고, 계속해서 n번째 키를 앞의 n-1개의 키와 비교하여 알맞은 순서에 삽입하여 정렬하는 방식


② 쉘 정렬(Shell Sort)


쉘 정렬은 삽입 정렬을 확장한 개념

· 입력 파일을 어떤 매개변수(h)의 값으로 서브파일을 구성하고, 각 서브파일을 Insertion 정렬 방식으로 순서 배열하는 과정을 반복하는 정렬 방식, 즉 임의의 레코드 키와 h만큼 떨어진 곳의 레코드를 비교하여 순서화되어 있지 않으면 서로 교환하는 것을 반복하는 정렬 방식

· 입력 파일이 부분적으로 정렬되어 있는 경우에 유리한 방식


③ 선택 정렬(Selection Sort)


선택 정렬은 n개의 레코드 중에서 최소값을 찾아 첫 번재 레코드 위치에 놓고, 나머지 (n-1)개 중에서 다시 최소값을 찾아 두 번째 레코드 위치에 놓는 방식을 반복하여 정렬하는 방식


④ 버블 정렬(Bubble Sort)


· 버블 정렬은 주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환하는 정렬 방식

· 계속 정렬 여부를 플래그 비트(f)로 결정


⑤ 퀵 정렬(Quick Sort)


퀵 정렬은 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬하는 방법으로 키를 기준으로 작은 값은 왼쪽에, 큰 값은 오른쪽 서브파일로 분해시키는 방식

· 정렬 방식 중에서 가장 빠른 방식이며, 프로그램에서 되부름을 이용하기 때문에 스택(Stack) 필요


⑥ 힙 정렬(Heap Sort)


힙 정렬은 전이진 트리를 이용한 정렬 방식

· 구성된 전이진 트리를 Heap Tree로 변환하여 정렬


⑦ 2-Way 합병 정렬(Merge Sort)


2-Way Merge Sort는 이미 정렬되어 있는 두 개의 파일을 한 개의 파일로 합병하는 정렬방식

· 두 개의 키들을 한 쌍으로 하여 각 싸엥 대하여 순서 정함

· 순서대로 정렬된 각 쌍의 키들을 합병하여 하나의 정렬된 서브리스트로 만듦

· 위 과정에서 정렬된 서브리스트들을 하나의 정렬된 파일이 될 때가지 반복


⑧ 기수 정렬(Radix Sort) = Bucket Sort


기수 정렬은 Queue를 이용하여 자릿수별로 정렬하는 방식

· 레코드의 키 값을 분석하여 같은 수 또는 같은 문자끼리 그 순서에 맞는 버킷에 분배하였다가 버킷의 순서대로 레코드를 꺼내어 정렬



040 검색(Search)


검색은 컴퓨터를 이용해서 기억공간에 보관중인 특정 레코드를 찾아내는 작업


① 선형 검색(Linear Search)


·  선형 검색은 순서화되어 있지 않은 파일에서 순차적으로 검색하는 방식으로, 찾고자 하는 Key 값을 첫 번재 레코드 Key 값부터 차례로 비교하여 검색하는 방식

· 순차 검색

· 프로그램 작성이 가장 쉬움


② 제어 검색(Control Search)


· 제어 검색은 반드시 순서화된 파일이어야 검색 가능

· 한 번의 비교 동작이 끝난 후 비교 대상이 된 레코드를 다음에 비교할 대상을 선택하는 기준으로 이용하여 검색하는 방식


이분 검색(이진 검색, Binary Search
)

· 이분 검색은 전체 파일을 두 개의 서브파일로 분리해 가면서 Key 레코드를 검색하는 방식

· 찾고자 하는 Key 값을 파일의 중간 레코드 Key 값과 비교하면서 검색하는 방식

· 비교 회수를 거듭할 대마다 검색 대상이 되는 데이터 수가 절반으로 줄어듦으로 탐색 효율이 좋고 탐색 시간이 적게 소요됨

· 중간 레코드 번호 M=(F+L)/2(단, F:첫 번째 레코드 번호, L:마지막 레코드 번호)


피보나치 검색(Fibonacci Search)

· 피보나치 검색은 피보나치 수열에 따라 다음에 비교할 대상을 선정하여 검색하는 방식

· 이분 검색에는 중간 레코드 번호를 계산하기 위해서 나눗셈이 필요하지만 피보나치 검색은 가감산만을 이용하기 때문에 효율이 우수


보간 검색(Interpolation Search)

· 보간 검색은 찾으려는 레코드가 있음직한 부분의 키를 택하여 거맥하는 방식

· 선정 레코드 번호 = (찾으려는 키 값(추측)-최소키 값) / (최대키 값 - 최소키 값) × 레코드 수

· 찾으려는 레코드 근처에서부터 찾아가기 때문에 검색시간이 빠르지만, 예측을 해야하므로 실제로는 프로그래밍이 불가능함


블록 검색(Block Search)

· 블록 검색을 위해서는 파일을 구성하는 레코드들을 다음과 같이 구성해 놓아야 함

-파일을 구성하는 레코드들을 여러 개의 Block으로 분할하여 Block 단위는 순서화시키고, Block 내의 자료는 순서화와 관계없이 저장시킴

- Index 부분을 두어, 각 Block마다 최대 레코드 키 값을 가지는 레코드 번호를 저장시킴

· 인덱스를 이용하여 찾고자 하는 레코드가 어느 Block에 속하는지 검색한 후, 해당 Block 내에서는 선형 검색을 함


이진 트리 검색(Binary Tree Search)

· 이진 트리 검색은 파일을 이진 검색 트리로 구성하여 검색하는 방식

· 검색 과정

① 찾고자 하는 레코드 Key 값 X가 이진 검색 트리에 존재하는지 조사하려면 먼저 Root Node와 비교

② 만약 X가 Root Node의 Key 값보다 작으면 왼쪽 Subtree로 검색을 계속하고, 크면 오른쪽 Subtree로 검색을 계속하고, 같으면 검색종료

③ i가 0인 경우 검색에 실패한 경우. 즉, X가 임의의 노드 값과 같지 않아서 왼쪽 또는 오른쪽 자식을 찾아가기 위해 그 노드의 L.L 또는 R.L 포인터를 i에 기억시켰을 때, i에 기억시킨 포인터 값이 Nill Pointer인 경우 찾고자 하는 레코드가 없기 대문



041 검색 - 해싱(Hashing)


① 해싱의 개요


해싱은 Hash Table이라는 기억공간을 할당하고, 해시 함수를 이용하여 레코드 키에 대한 Hash Table 내의 Home Address를 계산한 후 주어진 레코드를 해당 기억장소에 저장하거나 검색 작업을 수행하는 방식

· 해싱은 DAM(직접 접근) 파일을 구성할 때 사용되며, 접근 속도는 빠르나 기억공간이 많이 요구됨

· 다른 방식에 비해 검색 속도가 가장 빠름

· 삽입, 삭제 작업의 빈도가 많을 때 유리한 방식

· 키-주소 변환 방법이라고도 부름


해시 테이블(Hash Table, 해시표)

· 해시 테이블은 레코드를 한 개 이상 보관할 수 있는 Bucket들로 구성된 기억공간으로, 보조기억장치에 구성할 수도 있고 주기억장치에 구성할 수도 있음


[그림 3] 해시 테이블  * n크기의 3개의 슬롯으로 구성된 버킷을 가진 해시표

· 버킷(Bucket) : 하나의 주소를 갖는 파일의 한 구역을 의미하며, 버킷의 크기는 같은 주소에 포함될 수 있는 레코드 수

· 흘록(Slot) : 한 개의 레코드를 저장할 수 있는 공간으로 n개의 슬롯이 모여 하나의 버킷을 형성

· Collision(충돌 현상) : 서로 다른 두 개 이상의 레코드가 같은 주소를 갖는 현상

· Synonym : 충돌로 인해 같은 Home Address를 갖는 레코드들의 집합

· Overflow : 계산된 Home Address의 Bucket 내에 저장할 기억공간이 없는 상태로, Bucket을 구성하는 Slot이 여러 개일 때 Collision은 발생해도 Overflow는 발생하지 않을 수 있음


② 해싱 함수(Hashing Function)


제산법

제산(Division)법은 레코드 키(K)를 해시표의 크기보다 큰 수 중에서 가장 작은 소수(Prime, Q)로 나눈 나머지를 홈 주소로 삼는 방식

h(K) = K mod Q


제곱법

제곱(Mid-Square)법은 레코드 키 값(K)을 제곱한 후 그 중간 부분의 값을 홈 주소로 삼는 방식


폴딩법

폴딩(Folding)법은 레코드 키 값(K)을 여러 부분으로 나눈 후 각 부분의 값을 더하거나 XOR(배타적 논리합)한 값을 홈 주소로 삼는 방식

· Shift Folding : 각 부분의 값들을 왼쪽 또는 오른쪽 끝자리에 맞추어서 계산

· Fold Boundary : 경계 지점을 접었을 때 마주치는 자리 그대로 계산


기수(Radix) 변환법

기수 변환법은 키 숫자의 진수를 다른 진수로 변환시켜 주소 크기를 초과한 높은 자릿수는 절단하고, 이를 다시 주소 범위에 맞게 조정하는 방법


대수적 코딩법

대수적 코딩법은 키 값을 이루고 있는 각 자리의 비트 수를 한 다항식의 계수로 간주하고, 이 다항식을 해시표의 크기에 의해 정의된 다항식으로 나누어 얻은 나머지 다항식의 계수를 홈 주소로 삼는 방식


계수 분석법(숫자 분석법)

계수 분석법은 키 값을 이루는 숫자의 분포를 분석하여 비교적 고른 자리를 필요한 만큼 택해서 홈 주소로 삼는 방식


무작위법

무작위법은 난수를 발생시켜 나온 값을 홈 주소로 삼는 방식


③ Overflow 해결 방법


Collision이 발생했을 때 그 버킷에 저장할 Slot이 없으면 Overflow가 되는데, 이것을 해결하기 위해서는 다음과 같은 방법 필요


개방 주소법(Open Addressing)

선형 방법이락도 하는데, Collision이 발생했을 때 순차적으로 그 다음 빈 버킷을 찾아 저장하는 방법


폐쇄 주소법(Close Addressing)

Overflow된 레코드들을 별도의 Overflow 영역에 저장하고 Chain(Pointer)으로 홈 버킷에 연결

· Direct Chaining : 해시표 내의 빈 자리에 Overflow 레코드 보관

· Indirect Chaining : 해시표와는 별도의 기억공간에 Overflow 레코드 보관


재해싱(Rehashing)

Collision이 발생하면 새로운 해싱 함수로 새로운 홈 주소를 구하는 방식 



042 인덱스 구조


① 인덱스의 개념


인덱스는 데이터 레코드를 빠르게 접근하기 위해서 구성하는 것으로 다음과 같은 특징이 있음

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

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

· 인덱스를 통해서 파일의 레코드에 대한 액세스를 빠르게 수행 가능

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


② m-원 검색 트리(m-Way Search Tree)


· 이진 검색 트리에서는 한 노드가 한 개의 키와 두 개의 Subtree를 갖는 반면 m 원 검색 트리는 한 노드가 최대 m-1개의 키와 m개의 Subtree를 갖도록 구성됨

· m-원 트리 구조는 키 값의 일부분이 동일한 문자열이나 숫자로 구성된 자료를 표현하는 데 효율적

· 이진 검색 트리에 비해 트리 높이가 얕아져 특정 노드의 검색시간 감소

· 삽입, 삭제시 트리 균형을 유지하기 위항 복잡한 연산이 필요해지는 단점이 있음


③ B-트리


B-트리는 Index를 구성하는 방법으로 가장 많이 사용하는 균형된 m원 검색 트리


B-트리의 특징

· Root와 Leaf를 제외한 모든 노드는 최소 m/2, 최대 m개인 Subtree를 갖음

· Root는 Leaf가 아닌 이상 적어도 두 개의 Subtree를 가짐

· 모든 Leaf는 같은 Level에 있음

· Leaf가 아닌 노드의 키 값 수는 그 노드의 Subtree 수보다 한 개 적으며, 각 Leaf Node수는 최소 m/2-1개, 최대 m-1개의 키 값들을 갖음

· 한 노드 안에 있는 키 값들은 오름차순을 유지해야 함

· 탐색, 추가, 삭제는 루트로부터 시작함

· 삽입과 삭제를 하여도 데이터 구조의 균형을 유지해야 함


④ B+-트리


B+-트리는 B 트리의 변형으로 Leaf가 아닌 노드로 된 인덱스 세트와 리프 노드로만 구성된 순차 데이터 세트로 구성

· 인덱스 세트에 있는 키 값을 리프 노드에 있는 키 값을 찾아갈 수 있는 경로로만 제공됨

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

· B+-트리는 B-트리의 추가, 삭제 시 발생하는 노드의 분열과 합병 연산 과정을 줄일 수 있는 트리 구조


B+-트리의 특징

· 0, 2 또는 m/2에서 m개 사이의 Subtree를 갖음

· Root와 Leaf를 제외한 모든 노드는 최소 m/2, 최대 m개인 Subtree를 갖음

· 모든 Leaf는 같은 Level에 있음

· Leaf가 아닌 노드의 키 값 수는 그 노드의 Subtree 수보다 한 개 적으며, 각 Leaf Node수는 최소 m/2-1개, 최대 m-1개의 키 값들을 갖음

· 한 노드 안에 있는 키 값들은 오름차순을 유지해야 하며 리스트로 연결된 리프 노드는 데이터 파일의 순차 세트를 나타냄


⑤ 트라이(Tri) 색인


트라이 색인은 탐색을 위한 키 값을 직접 표현하지 않고 키를 구성하는 문자나 숫자 자체의 순서로 키 값을 구성하는 구조

· 키 값이 문자열 또는 숫자일 경우 일련의 키 값드렝 대해 일부분이 같은 문자나 숫자로 구성되었을 때 적합

· 가변 길이의 키 값을 효과적으로 나타낼 수 있음

· 삽입 및 삭제 시 노드의 분열과 병합이 없음

· 트라이의 차수는 키 값을 표현하기 위해 사용하는 문자의 수에 의해 결정됨

· 키 값의 분포를 미리 예측할 수 있다면 기억장소 절약 가능

· 트라이의 크기는 나타내려고 하는 키 값의 기수와 키 필드 길이에 의해 결정됨



043 파일 편성


① 순차 파일(Sequential File) = 순서 파일


순차 파일은 입력되는 데이터들을 논리적인 순서에 따라 물리적 연속 공간에 순차적으로 기록하는 방식

· 급여 관리 등과 같이 변동 사항이 크지 않고 기간별로 일괄 처리르 주로 하는 경우에 적합

· 주로 순차 접근이 가능한 자기 테이프에서 사용


순차 파일의 장점

· 기록 밀도가 높아 기억공간을 효율적으로 사용 가능

· 매체 변환이 쉬워 어떠한 매체에도 적용 가능

· 레코드가 키 순서대로 편성되어 취급이 용이

· 레코드를 기록할 때 사용한 키 순서대로 레코드를 처리하는 경우, 다른 편성법보다 처리 속도가 빠름


순차 파일의 단점

· 파일에 새로운 레코드를 삽입하거나 삭제하는 경우 파일 재구성을 위해 전체를 복사해야 하므로 시간이 많이 소요됨

· 데이터 검색 시 처음부터 순차적으로 검색하기 때문에 검색 효율이 낮고, 시간 및 응답 시간이 느림


② 색인 순차 파일(Indexed Sequential File)


색인 순차 파일은 순차 처리와 랜덤 처리가 모두 가능핟록 레코드들을 키 값 순으로 정렬시켜 기록하고, 레코드의 키 항목만을 모은 색인을 구성하여 편성하는 방식

· 색인을 이용한 순차적인 접근 방법을 제공하여 ISAM이라고 함

· 레코드를 참조할 때 색인을 탐색한 후 색인이 가리키는 포인터(주소)를 사용하여 직접 참조할 수 있음

· 일반적으로 자기 디스크에 많이 사용되며, 자기 테이프에서는 사용할 수 없음


색인 순차 파일의 구성

색인 순차 파일은 기본 구역, 색인 구역, 오버플로 구역으로 구성됨

· 기본 구역(Prime Area) : 실제 레코드들을 기록하는 부분으로 각 레코드는 키 값순으로 저장됨

· 색인 구역(Index Area) : 기본 구역에 있는 레코드들의 위치를 찾아가는 색인이 기록되는 부분

- 트랙 색인 구역

· 기본 구역의 한 트랙 상에 기록되어 있는 데이터 레코드 중의 최대키 값과 주소가 기록되는 색인으로, 한 실린더당 하나씩 만들어짐

· 처리할 레코드가 실제로 어느 트랙에 기록되어 있는지를 판별할 수 있게 함

- 실린더 색인 구역

· 각 트랙 색인의 최대키 값과 해당 레코드가 기록된 실린더의 정보가 기록되는 색인으로, 한 파일당 하나씩 만들어짐

- 마스터 색인 구역

· 실린더 색인 구역의 정보가 많으 경우 그것을 일정한 크기의 블록으로 구성하는데, 이대 해당 레코드가 어느 실린더 색인 구역에 기록되어 있는지를 기록하는 색인


· 오버플로 구역(Overflow Area) : 기본 구역에 빈 공간이 없어서 새로운 레코드의 사빕이 불가능할 때를 대비하여 예비적으로 확보해 둔 부분

- 실린더 오버플로 구역

· 각 실린더마다 만들어지는 오버플로 구역으로, 해당 실린더의 기본 구역에서 오버플로된 데이터를 기록

- 독립 오버플로 구역

· 실린더 오버플로 구역에 더 이상 오버플로된 데이터를 기록할 수 없을 때 사용하는 예비 공간으로, 시린더 오버플로 구역과는 별도로 만들어짐


색인 순차 파일의 장점

· 순차 처리와 랜덤 처리가 모두 간으하므로, 목적에 따라 융통성 있게 처리할 수 있음

· 효율적인 검색이 가능하고 레코드의 삽입, 삭제, 갱신이 용이

· 레코드를 추가 및 삽입하는 경우, 파일 전체를 복사할 필요가 없음


색인 순차 파일의 단점

· 색인 구역과 오버플로 구역을 구성하기 위한 추가 기억공간이 필요함

· 파일 사용중 오버플로 레코드가 많아지면 파일을 재편성해야 함

· 파일이 정렬되어 있어야 하므로 추가, 삭제가 많으면 효율이 떨어짐

· 색인을 이용한 액세스를 하기 때문에 액세스 시간이 랜덤 편성 파일보다 느림


※ 정적 인덱스와 동적 인덱스

· 정적 인덱스 

- 정적 인덱스는 데이터 파일에 레코드가 삽입되거나 삭제되어도 인덱스의 구조가 변경하지 않고 내용만 변하는 구조로, 정적 인덱스를 사용하는 대표적인 파일 : ISAM


· 동적 인덱스

- 동적 인덱스는 인덱스 파일이나 데이터 파일을 블록으로 구성하고 각 블록에는 추가로 삽입될 레코드를 감안하여 빈 공간을 미리 예비해 두는 인덱스 방법으로, 동적 인덱스를 사용하는 대표적인 파일 :  VSAM

- 블록에 레코드가 가득차면 동적으로 분열되고, 일정 수의 레코드가 유지되지 않는 블록은 합병됨


③ VSAM 파일


VSAM(Virtual Storage Access Method) 파일은 동적 인덱스 방법을 이용한 색인 순차 파일


· VSAM 파일은 제어 구간, 제어 구역, 순차 세트, 인덱스 세트로 구성됨

- 제어 구간(Control Interval) : 데이터 레코드가 저장되는 부분

- 제어 구역(Control Area) : 몇 개의 제어 구간을 모아 놓은 것

- 순차 세트(Sequence Set) : 제어 구역에 대한 인덱스를 저장한 것

- 인덱스 세트(Index Set) : 순차 세트의 상위 인덱스

· VSAM 파일은 기본 구역과 오버플로 구역을 구분하지 않음

· 레코드를 삭제하면 그 공간을 재사용 가능

· 제어 구간에 가변 길이 레코드를 쉽게 수용 가능


④ 직접 파일(Direct File)


직접 파일은 파일을 구성하는 레코드를 특정 순서 없이 임의의 물리적 저장공간에 기록하는 것으로, 랜덤 파일, DAM 파일이라고도 함


· 레코드에 특정 기준으로 키가 할당되며, 해시 함수를 이용하여 이 키에 대한 보조기억장치의 물리적 상대 레코드 주소를 계산한 후 해당하는 주소에 레코드를 저장

· 레코드는 해시 함수에 의해 계산된 물리적 주소를 통해 접근 가능

· 임의 접근이 가능한 자기 디스크나 자기 드럼을 사용


직접 파일의 장점

· 직접 접근 기억장치(DASD)의 물리적 주소를 통하여 파일의 각 레코드에 직접 접근하거나 기록할 수 있으며, 접근 및 기록의 순서에는 제약이 없음

· 접근 시간이 바르고 레코드의 삽입, 삭제, 갱신이 용이

· 어떤 레코드라도 평균 접근 시간 내에 검색이 가능


직접 파일의 단점

· 레코드의 주소 변환 과정이 필요하며, 이 과정으로 인해 시간이 소요됨

· 기억공간의 효율이 저하될 수 있음

· 기억장치의 물리적 구조에 대한 지식이 필요하고, 프로그래밍 작업이 복잡함

· 충돌 발생할 염려 있으므로, 이를 위한 기억공간의 확보가 필요함


⑤ 역 파일(Inverted File)


역 파일은 특정 항목을 여러 개의 색인으로 만들어 항목별 특성에 맞게 작업할 수 있도록 한 파일로, 다중 키 파일에 속함


· 하나 또는 몇 개의 색인값을 결합하여 레코드의 주소 결정 가능

· 각 응용마다 적합한 색인을 별도로 구현 가능

· 새로운 레코드를 파일 중간에 삽입하기 쉽고, 검색 속도가 빠름

· 데이터 파일에 접근하지 않아 질의 응답 시간이 줄어들고, 처리가 비교적 쉬움

· 질의를 만족하는 레코드 검색 시 한 번씩만 접근하면 됨

· 색인의 각 항목들의 길이가 가변적


⑥ 다중 리스트 파일(Multi-List File)


다중 리스트 파일은 다중 키 파일의 한 종류로, 각 키에 대하여 색인을 만든 다음 각 데이터 레코드들 간에 다중 리스트를 구축하여 구성한 파일


· 색인은 동일한 키 값을 갖는 데이터 레코드 중 하나의 레코드에 대한 포인터만을 갖고, 후속 데이터는 포인터로 추적하도록 구성

· 색인의 각 항목들의 길이가 고정적이므로 관리가 용이하며 수정, 삭제, 전체 검색이 효율적 


다중 링 파일(Multi-Ring File)


다음 링 파일은 같은 특성을 가질 레코드들을 일련의 포인터로 연결하여 구성한 것


· 같은 항목값을 가진 레코드들을 한꺼번에 처리하는 데 효ㅘ적

· 기억 장소가 절약되고, 자료의 중복성을 배제 할 수 있음

· 레코드 형식이 다른 경우에도 처리가 가능




출처 : 2017 시나공 정보처리기사 필기


정보처리기사 필기 - 1과목 데이터베이스


4장 데이터베이스 고급 기능


024 트랜잭션의 개념


① 트랜잭션의 정의


· 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미

· 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위

· 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위

· 하나의 트랜잭션은 Commit되거나 Rollback됨


② 트랜잭션의 특징


데이터 무결성(Integrity)을 보장하기 위하여 DBMS의 트랜잭션이 가져야 할 특성


Atomicity(원자성)

· 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 함

· 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 함


Consistency(일관성)

· 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환

· 시스템이 가지고 있는 고정 요소는 트랜재션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 함


Isolation(독립성, 격리성, 순차성)

· 둘 이상의 트랜재션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없음

· 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없음


Durability(영속성, 지속성)

· 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 함


③ Commit, Rollback 연산

Commit 연산

· Commit 연산은 한 개의 논리적인 단위(트랜잭션)에 대한 작업이 성공적으로 끝났고, 데이터베이스가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산


Rollback 연산

· Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산

· Rollback 시에는 해당 트랜잭션을 재시작하거나 폐기함


④ 트랜잭션의 상태



[그림1] 트랜잭션의 상태


· 활동(Active) : 트랜잭션이 실행중인 상태

· 실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태

· 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태

· 부분완료(Partially Comitted) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태

· 완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태



025 회복(Recovery)


① 회복의 개념


- 회복의 정의

회복은 트랜잭션들을 수행하는 도중 장애기 발생하여 데이터베이스가 손상되었을 때 손상되기 이전의 정상 상태로 복구하는 작엄


장애의 유형

· 트랜잭션 장애 : 입력 데이터 오류, 불명확한 데이터, 시스템 자원 요구의 과다 등 트랜잭션 내부의 비정상적인 상황으로 인하여 프로그램 실행이 중지되는 현상

· 시스템 장애: 데이터베이스에 손상을 입히지는 않으나 하드웨어 오동작, 소프트웨어의 손상, 교착상태 등에 의해 모든 트랜잭션의 연속적인 수행에 장애를 주는 현상

· 미디어 장애 : 저장장치인 디스크 블록의 손상이나 디스크 헤드의 충돌 등에 의해 데이터베이스의 일부 또는 전부가 물리적으로 손상된 상태


회복 관리기(Recovery Management)

· 회복 관리기는 DBMS의 구성 요소

· 회복관리기는 트랜잭션 실행이 성공적으로 완료되지 못하면 트랜재션이 데이터베이스에 생성했던 모든 변화를 취소(Undo)시키고, 트랜잭션 수행 이전의 원래 상태로 복구하는 역할 담당

· 메모리 덤프, 로그(Log)를 이용하여 회복 수행


 ※ 취소(Undo) : Log에 보관한 정보를 이용하여 가장 최근에 변경된 내용부터 거슬러 올라가면서 트랜잭션 작업을 취소하여 원래의 DB로 복구

 ※ 덤프(Dump) : 주기적으로 데이터베이스 전체를 복사해 두는 것

 ※ 로그(Log) : 갱신되기 전후의 내용을 기록하는 별도의 파일로, 저널이라고도 함  


② 회복 기법


연기 갱신 기법(Deferred Update)

· 연기 갱신 기법은 트랜잭션이 성공적으로 완료될 때까지 데이터베이스에 대한 실질적인 갱신을 연기하는 방법

· 트랜잭션이 수행되는 동안 갱신된 내용은 일단 Log에 보관

· 트래잭션의 부분 완료(성공적인 완료 직전) 시점에 Log에 보관한 갱신 내용을 실제 데이터베이스에 기록

· 트랜잭션이 부분 완료되기 전에 장애가 발생하여 트랜잭션이 Rollback되면 트랜잭션이 실제 데이터베이스에 영향을 미치지 않았기 때문에 어떠한 갱신 내용도 취소(Undo)시킬 필요 없이 무시하면 됨

· 재시도(Redo) 작업만 가능(Redo : 덤프와 로그를 이용하여 가장 최근의 정상적인 데이터베이스로 회복시킨 후 트랜잭션을 재실행)


즉각 갱신 기법(Immediate Update)

· 즉각 갱신 기법은 트랜잭션이 데이터를 갱신하면 트랜잭션이 부분 완료 되기 전이라도 즉시 실제 데이터베이스에 반영하는 방법

· 장애가 발생하여 회복 작업할 경우를 대비하여 갱신된 내용들은 Log에 보관

· 회복 작업을 할 경우에는 Redo와 Undo 모두 사용 가능


그림자 페이지 대체 기법(Shadow Paging)

· 그림자 페이지 대체 기법은 갱신 이전의 데이터베이스를 일정 크기의 페이지 단위로 구성하여 각 페이지마다 복사본인 그림자 페이지로 별도 보관해 놓고, 실제 페이지를 대상으로 트랜잭션에 의한 갱신 작업을 하다가 장애가 발생하여 트랜잭션 작업을 Rollback시킬 때, 갱신된 이후의 실제 페이지 부분에 그림자 페이지를 대체하여 회복시키는 기법

· 로그, Undo 및 Redo 알고리즘 필요 없음


검사점 기법(Check Point)

· 검사점 기법은 트랜잭션 실행 중 특정 단계에서 재실행할 수 있도록 갱신 내용이나 시스템에 대한 상황 등에 관한 정보와 함께 검사점을 로그에 보관해두고, 장애 발생 시 트랜잭션 전체를 철회하지 않고 검사점부터 회복 작업을 하여 회복시간을 절약하도록 하는 기법



026 병행제어(Concurrency Control)


① 병행제어의 정의


병행제어(Concurrency Control)란 다중 프로그램의 이점을 활용하여 동시에 여러 개의 트랜잭션을 병행수행할 때, 동시에 실행되는 트랜잭션들이 데이터베이스의 일관성을 파괴하지 않도록 트랜잭션 간의 상호작용을 제어하는 것


※ 다중 프로그램의 이점 : 프로세서의 이용률 증가 / 전체 트랜잭션의 작업 처리율 향상


② 병행제어의 목적


· 데이터베이스의 공유 최대화

· 시스템의 활용도 최대화

· 데이터베이스의 일관성 유지

· 사용자에 대한 응답시간 최소화


※ 병행수행과 직렬성

· 다중 프로그램 환경에서 여러 개의 트랜잭션을 병행수행한다는 것은 같은 시간에 여러 개의 명령을 동시에 실행한다는 것이 아니라, 시분할이나 입·출력 인터럽트 기법 등을 이용하여 일정한 시간 내에 각 트랜잭션에 있는 명령들이 시간적으로 번갈아 실행되는 것

· 병행수행된 각각의 트랜잭션 결과는 각 트랜잭션을 독자적으로 수행시켰을 때의 결과와 같아야 하는데, 이를 직렬성(Serializability) 또는 직렬화 가능성이라고 함


③ 병행수행의 문제점


병행제어 기법에 의한 제어 없이 트랜잭션들이 데이터베이스에 동시에 접근하도록 허용할 경우 다음과 같은 문제점 발생

문제점

의미

 갱신 분실

 (Lost Update)

 두 개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상

 비완료 의존성

 (Uncommitted Dependency)

 · 하나의 트랜잭션 수행이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상

 · 임시 갱신

 모순성

 (Inconsistency)

 · 두 개의 트랜잭션이 병행수행될 때 원치 않는 자료를 이용함으로써 발생하는 문

 · 불일치 분석(Inconsistent Analysis)

 연쇄 복귀

 (Cascading Rollback)

 병행수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback하는 경우 다른 트랜잭션도 함께 Rollback되는 현상


④ 병행제어 기법의 종류

로킹(Locking)
· 로킹은 주요 데이터의 액세스를 상호 배타적으로 하는 것
· 트랜잭션들이 어떤 로킹 단위를 액세스하기 전에 Lock(잠금)을 요청해서 Lock이 허락되어야만 그 로킹 단위를 액세스할 수 있도록 하는 기법

※ 로킹 단위(Locking Granularity)
· 병행제어에서 한꺼번에 로킹할 수 있는 객체의 크기
· 데이터베이스, 파일, 레코드, 필드 등은 로킹 단위가 될 수 있음
· 로킹 단위가 크면 로크 수가 작아 관리하기 쉽지만 병행성 수준이 낮아지고, 로킹 단위가 작으면 로크 수가 많아 관리하기 복잡해 오버헤드가 증가하지만 병행성 수준이 높아짐
※ 병행성 수준 : 병행성 수준이 낮다는 것은 데이터베이스 공유도가 감소한다는 의미이고, 병행성 수준이 높다는 것은 데이터베이스 공유도가 증가한다는 의미

· 로킹의 종류
- 공유 로크
- 배타 로그
- 의도 로크
- 의도 공유 로크
- 배타 의도 로크
- 공유 의도 독점 로크

· 2단계 로킹(Two-Phase Locking) 규약
- 각 트랜잭션의 로크 요청과 해제(Unlock) 요청을 2단계로 실시
- 직렬성을 보장하는 대표적인 로킹 규약
- 직렬성을 보장하는 장점이 있지만, 교착상태를 예방할 수 없다는 단점이 있음

※ 로킹 규약(Locking Protocol)
· 병행제어에서 각 트랜잭션이 관련 자료에 대해 로크를 얻고 반납하는 데 지켜야 할 일련의 규정
· 로킹 규약에 의해 실행 가능한 스케줄의 경우의 수가 제한 받음
· 스케줄의 경우의 수가 적을수록 직렬성을 보장하는 스케줄을 찾기 쉬워짐

타임 스탬프 순서(Time Stamp Ordering)
· 직렬성 순서를 결정하기 위해 트랜잭션 간의 처리 순서를 미리 선택하는 기법들 중에서 가장 보편적인 방법
· 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 시간표를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법
· 교착상태가 발생하지 않음

최적 병행수행(검증 기법, 확인 기법, 낙관적 기법)
병행수행하고자 하는 대부분의 트랜잭션이 판독 전용(Read Only) 트랜잭션일 경우, 트랜잭션 간의 충돌률이 매우 낮아서 병행제어 기법을 사용하지 않고 실행되어도 이 중의 많은 트랜잭션은 시스템의 상태를 일관성 있게 유지한다는 점을 이용한 기법

다중 버전 기법
· 타임 스탬프의 개념을 이용하는 기법으로, 다중 버전 타임 스탬프 기법이라고도 함
· 타임 스탬프 기법은 트랜잭션 및 데이터들이 이용될 때의 시간을 시간표로 관리하지만, 다중 버전 기법은 갱신될 때마다의 버전을 부여하여 관리


027 무결성(Integrity)


무결성이란 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 저장값이 일치하는 정확성 의리

무결성 제약 조건 : 데이터베이스에 들어 있는 데이터의 정확성(일관성)을 보장하기 위해 부정확한 자료가 데이터베이스 내에 저장되는 것을 방지하기 위한 제약 조건


① 무결성을 유지하는 방법


· 대표적으로 사용되는 방법은 중앙 통제에 의한 데이터 갱신, 이 방법은 검증 프로그램을 이용하여 모든 갱신 처리 과정에서 반드시 검증 단계를 거치도록 통제함

· 검증 프로그램이 무결성을 검증하기 위해 무결성 규정을 사용

- 규정 이름 : 무결성 규정을 참조할 때 사용하는 식별자

- 트리거(Trigger) 조건 : 트랜잭션의 접근 유형 및 데이터, 검사할 시기 명시

- 프레디킷(제약 조건) : 무결성을 위한 검사 조건

- 위반 조치 : 검사 결과 무결성 위반이 발견되었을 때 처리할 조치


② 무결성의 종류


 널 무결성

 릴레이션의 특징 속성값이 Null이 될 수 없도록 하는 규정

 고유 무결성

 릴레이션의 특정 속성에 대해서 각 튜플이 갖는 값들이 서로 달라야 한다는 규정

 참조 무결성

 외래키 값은 Null이거나 참조 릴레이션의 기본키 값과 동일해야 한다는 규정.

 즉 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다는 규정

 도메인 무결성

 특정 속성의 값이, 그 속성이 정의된 도메인에 속한 값이어야 한다는 규정

 키 무결성

 하나의 테이블에는 적어도 하나의 키가 존재해야 한다는 규정

 관계(Relationship) 무결성

 릴레이션에 어느 한 튜플의 삽입 가능 여부 또는 한 릴레이션과 다른 릴레이션의 튜플들 사이의 관계에 대한 적절성  여부를 지정한 규정

 개체 무결성

 기본 테이블의 기본키를 구성하는 어떤 속성도 Null 값이나 주복값을 가질 수 없다는 규정



028 보안(Security)


① 데이터베이스 보안의 개요


· 데이터베이스 보안이란 데이터베이스의 일부분 또는 전체에 대해서 권한이 없는 사용자가 액세스하는 것을 금지하기 위해 사용되는 기술

· 보안을 위한 데이터 단위는 테이블 전체로부터 특정 테이블의 특정한 행과 열 위치에 있는 특정한 데이터 값에 이르기까지 다양

· 데이터베이스 사용자들은 일반적으로 서로 다른 객ㅊ에 대하여 다른 접근권리 또는 권한을 갖게 됨

· 데이터베이스 보안 기법 :  암호화 기법, 권한 부여 기법이 있으며, 권한 부여 기법에는 뷰(View) 기법, GRANT/REVOKE 기법


※ 무결성과 보안

 무결성

보안 

 권한이 있는 사용자로부터 데이터베이스를 보호하는 것

권한이 없는 사용자로 데이터베이스를 보호하는 것 

데이터베이스 사용자들이 데이터베이스를 사용하고자 할 때 정확하게 사용할 수 있도록 보장하는 것 

데이터베이스 사용자들이 데이터베이스를 사용하고자 할 때 언제든지 사용할 수 있도록 보장하는 것 


② 암호화 기법


암호화 과정

[그림 2] 암호화 과정

· 암호화(Encryption) 과정 : 암호화되지 않은 평문을 정보 보호를 위해 암호문으로 바꾸는 과정 

· 복호화(Decryption) 과정 : 암호문을 원래의 평문으로 바꾸는과정


개인키 암호 방식(Private Key Encryption) = 비밀키 암호 방식

·  비밀키 암호화 기법은 동일한 키로 데이터를 암호화하고 복호화함

· 데이터베이스 생성자는 평문의 정보 M을 암호화 알고리즘 E와 개인키 K를 이용하여 암호문 C로 바꾸어 저장시켜 놓고, 사용자가 그 데이터베이스에 접근하려면 복호화 알고리즘 D와 개인키 K를 이용하여 평문의 정보로 바구어 이용하는 방법

· 비밀키 암호화 기법은 대칭 암호 방식 또는 단일키 암호화 방식이라고도 함

· 비밀키는 제3자에게는 노출시키지 않고 데이터베이스 사용 권한이 있는 사용자만 나누어 가짐

· 종류 : 전위 기법, 대체 기법, 대수 기법, 합성 기법(DES, LUGIFER)

· 장점 : 암호화/복호화 속도가 빠르며, 알고리즘이 단순하고 파일 크기가 작음

· 단점 : 사용자의 증가에 따라 관리해야 할 키의 수가 상대적으로 많아짐


※ DES 기법

DES(Data Encryption Standard)는 개인키 암호 방식의 대표적인 알고리즘으로서, 64Bit의 평문 블록을 56Bit의 16개 키를 이용하여 16회의 암호 계산 단계를 거쳐 64Bit의 암호문을 얻음


공개키 암호 방식(Public Key Encryption)

· 공개키 암호화 기법은 서로 다른 키로 데이터를 암호화하고 복호화함

· 데이터를 암호화할 때 사용하는 키(공개키, Public Key)는 데이터베이스 사용자에게 공개하고, 복호화할 때의 키(비밀키, Secret Key)는 관리자가 비밀리에 관리하는 방법

· 공개키 암호화 기법은 비대칭 암호 방식이라고도 하며, 대표적으로 RSA(Rivest Shamir Adleman)가 있음

· 장점 : 키의 분배가 용이하고, 관리해야 할 키의 개수가 적음

· 단점 : 암호화/복호화 속도가 느리며, 알고리즘의 복잡하고 파일 크기가 크다


③ 권한 부여 기법


· 권한 부여 기법은 일반적으로 사용자들이 서로 다른 객체에 대하여 서로 다른 접근 권한을 갖게 설정함

· 권한 부여 기법에서 보안을 위한 데이터 단위는 테이블 전체나 특정한 행, 열에 있는 데이터 값이 될 수 있음


뷰 기법 - 뷰(View)에 권한을 명시하는 기법


GRANT/REVOKE 기법

· DBA가 GRANT/REVOKE 명령으로 권한을 부여하고 취소시키는 방법

- GRANT : 권한 부여 명령

- REVOKE : 권한 취소 명령


· 사용자 등급 지정 및 해제

- GRANT 사용자 등급 TO 사용자 ID 리스트 [IDENTIFIED BY 암호 리스트];

- REVOKE 사용자 등급 FROM 사용자 ID 리스트;


· 사용자 등급의 종류

- DBA : 데이터베이스 관리 책임자

- RESOURCE : 데이터베이스 및 테이블 생성 가능자

- CONNECT : 단순 사용자

예) GRANT RESOURCE TO KORA; → 사용자 ID가 KORA인 사람에게 데이터베이스 및 테이블을 생성할 수 있는 권한 부여

          GRANT CONNECT TO STAR; → 사용자 ID가 STAR인 사람에게 단순히 데이터베이스에 있는 정보를 검색할 수 있는 권한만 부여


· 테이블 및 속성에 대한 권한 부여 및 취소

- GRANT 권한 ON 데이터 개체 TO 사용자 [WITH GRANT OPTION];

- REVOKE [GRANT OPTION FOR] 권한 ON 데이터 개체 FROM 사용자[CASCADE];


· 권한 종류 : ALL, SELECT, INSERT, DELETE, UPDATE, INDEX, ALTER 등

· WITH GRANT OPTION : 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 권한 부여

· GRANT OPTION FOR : 다른 사용자에게 권한을 부여할 수 있는 권한 취소

· CASCADE : 권한 해제 시 권한 부여받았던 사용자가 다른 사람에게 부여한 권한도 연쇄적으로 해제



029 분산 데이터베이스


① 분산 데이터베이스의 정의


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

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


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


분산 처리기

· 자체적으로 처리 능력을 가지며, 지리적으로 분산되어 있는 컴퓨터 시스템을 말함

분산 데이터베이스

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

통신 네트워크

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


③ 분산 데이터베이스 설계 시 고려사항-


· 작업부하(Work Load)의 노드별 분산 정책

· 지역의 자치성 보장 정책

· 데이터의 일관성 정책

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

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


④ 분산 데이터베이스의 목표


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

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

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

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


※ 투명성 : 어떠한 사실이 존재함에도 마치 투명하여 보이지 않는 것처럼, 사실의 존재 여부를 염두에 두지 않아도 되는 성질


⑤ 분산 데이터베이스의 장·단점


장점

· 지역 자치성 높음

· 자료의 공유성 향상

· 분산 제어 가능

· 시스템 성능 향상

· 중앙 컴퓨터의 장애가 전체 시스템에 영향을 끼치지 않음

· 효용성과 융통성이 높음

· 신뢰성 및 가용성이 높음

· 점진적 시스템 용량 확장이 용이


단점

· DBMS가 수행할 기능이 복잡

· 데이터베이스 설계가 어려움

· 소프트웨어 개발 비용이 증가

· 처리 비용이 증가

· 잠재적 오류가 증가


※ 미들웨어(MiddleWare)

· 분산 환경에서 구성원들을 연결하고 구성원들 간의 차이를 극복하도록 범용으로 개발된 소프트웨어

· 클라이언트와 서버 사이에 존재하면서 다중 통신, 데이터 액세스 프로토콜과 인터페이스 등을 지원

· 미들웨어의 종류

- 통신 미들웨어 : NOS(Network Operating System)

- 데이터베이스 미들웨어 : ODBC

- 분산 객체 미들웨어 : CORBA, DCOM



출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 1과목 데이터베이스


3장 관계 데이터베이스 모델과 언어 


013 관계형 데이터베이스의 구조


① 관계형 데이터베이스의 개요


· 관계형 데이터베이스를 구성하는 개체(Entity)나 관계(Relationship)를 모두 릴레이션(Relation)이라는 표(Table)로 표현

· 릴레이션은 개체를 표현하는 개체 릴레이션, 관계를 나타내는 관계 릴레이션으로 구분 가능

· 장점 : 간결하고 보기 편리하며, 다른 데이터베이스로의 변환이 용이

· 단점 : 성능이 다소 떨어짐


② 관계형 데이터베이스의 Relation 구조

[그림 1] 릴레이션 구조

튜플(Tuple)


· 릴레이션을 구성하는 각각의 행

· 속성의 모임으로 구성

· 파일 구조에서 레코드와 같은 의미

· 튜플의 수 : 카디널리티(Cardinality) 또는 기수, 대응수


속성(Attribute)


· 데이터베이스를 구성하는 가장 작은 논리적 단위

· 파일 구조상의 데이터 항목 또는 데이터 필드에 해당

· 개체의 특성 기술

· 속성의 수 : 디그리(Degree) 또는 차수


도메인(Domain)


· 하나의 속성이 취할 수 있는 같은 타입의 원자(Atomic)값들의 집합

· 실제 속성 값이 나타날 때 그 값의 합법 여부를 시스템이 검사하는데 이용됨


③ 릴레이션의 특징


· 한 릴레이션에는 똑같은 튜플이 포함될 수 없음 → 튜플들은 모두 상이

· 튜플 사이에 순서 없음

· 튜플들의 삽입, 삭제 등의 작업으로 인해 릴레이션은 시간에 따라 변함

· 릴레이션 스키마를 구성하는 속성들 간의 순서는 중요하지 않음

· 속성의 명칭은 유일해야 하지만, 속성을 구성하는 값은 동일해도 됨

· 튜플을 유일하게 식별하기 위해 속성들의 부분집합을 키(Key)로 설정

· 속성의 값은 논리적으로 더 이상 쪼갤 수 없는 원자값만을 저장



014 관계형 데이터베이스의 제약 조건


제약 조건이란 데이터베이스에 저장되는 데이터의 정확성을 보장하기 위하여 키를 이용하여 입력되는 데이터에 제한을 주는 것으로 개체 무결성 제약, 참조 무결성 제약 등이 해당됨


① 키(Key)의 개념 및 종류


키 : 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 기준이 되는 속성


후보키(Candidate Key)

· 릴레이션을 구성하는 속성들 중 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들

· 하나의 릴레이션에는 중복된 튜플들이 없으므로 모든 릴레이션에는 반드시 하나 이상의 후보키가 존재

· 후보키는 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 함

- 유일성(Unique) : 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 함

- 최소성(Minimality) : 모든 레코드들을 유일하게 식별하는데 꼭 필요한 속성으로만 구성되어야 함


기본키(Primary Key)

· 기본키 : 후보키 중에서 선택한 주키(Main Key)

· 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성

· Null값을 가질 수 없음

· 기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없음


대체키(Alternate Key)

· 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키들

· 보조키라고도 부름


슈퍼키(Super Key)

· 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키로서 릴레이션을 구성하는 모든 튜플들 중 슈퍼키로 구성된 속성의 집합과 동일한 값은 나타나지 않음

· 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족시키지만, 최소성은 만족시키지 못함


외래키(Foreign Key)

· 관계를 맺고 있는 릴레이션 R1, R2에서 릴레이션 R1이 참조하고 있는 릴레이션 R2의 기본키와 같으면 R1 릴레이션의 속성을 외래키라고 함

· 참조되는 릴레이션의 기본키와 대응되어 릴레이션 간에 참조 관계를 표현하는 중요한 도구

· 외래키로 지정되면 참조 릴레이션의 기본키에 없는 값은 입력할 수 없음


② 무결성


개체 무결성 : 릴레이션에서 기본키를 구성하는 속성은 널값이나 중복값을 가질 수 없음


참조 무결성

· 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 함. 즉 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없음

· 외래키와 참조하려는 테이블의 기본키는 도메인과 속성 개수가 같아야 함 



015 관계대수 및 관계해석


① 관계대수의 개요


· 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는 가를 기술하는 절차적인 언어

· 릴레이션을 처리하기 위해 연산자와 연산 규칙을 제공하는 언어로 피연산자가 릴레이션이고, 결과도 릴레이션

· 질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서를 명시

· 순수 관계 연산자 : Select, Project, Join, Division

· 일반 집합 연산자 : UNION(합집합), INTERSECTION(교집합), DIFFERENCE(차집합), CARTESIAN PRODUCT(교차곱)


② 순수 관계 연산자


순수 관계 연산자란 관계 데이터베이스에 적용할 수 있도록 특별히 개발한 관계 연산자


Select

· 릴레이션에 존재하는 튜플 중에서 선택 조건을 만족하는 튜플의 부분집합을 구하여 새로운 릴레이션 만듦

· 릴레이션의 행(가로)에 해당하는 튜플을 구하는 것이므로 수평 연산이라고도 함

· 연산자의 기호는 그리스 문자 시그마(σ) 이용

· 표기 형식 : σ<조건>(R) 단, R은 릴레이션 이름

예)  σ<ave≥90>(성적) : <성적> 릴레이션에서 평균(Ave)이 90점 이상인 튜플들을 추출


Project

· 주어진 릴레이션에서 속성 List에 제시된 속성만을 추출하는 연산

· 릴레이션의 열(세로)에 해당하는 속성을 추출하는 것이므로 수직 연산이라고도 함

· 연산자의 기호는 그리스 문자 파이(π) 이용

· 표기 형식 : π<속성리스트>(R) 단, R은 릴레이션 이름

예) πname ave(성적) : <성적> 릴레이션에서 'Name' 과 'Ave' 속성을 추출


Join

· 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만드는 연산

· 연산자의 기호는 ⋈ 이용

· 표기 형식 : R ⋈ 키속성r=키속성s S 단, 키 속성 r은 릴레이션 R의 속성이고, 키 속성 s는 릴레이션 S의 속성

예) 성적 ⋈ No=No 학적부 : <성적> 릴레이션과 <학적부> 릴레이션을 'no' 속성을 기준으로 합쳐라


Division

· X⊃Y인 두 개의 릴레이션 R(X)와 S(Y)가 있을 때, R의 속성이 S의 속성값을 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산

· 연산자의 기호는 ÷ 이용

· 표기 형식 : R[속성r ÷ 속성s] S 단, 속성r은 릴레이션 R의 속성이고 속성s는 릴레이션 S의 속성이며, 속성r과 속성s는 동일 속성값을 가지는 속성이어야 함


③ 일반 집합 연산자


일반 집합 연산자는 수학적 집합 이론에서 사용하는 연산자로서 릴레이션 연산에도 그대로 적용할 수 있음 


· 일반 집합 연산자 중 합집합, 교집합, 차집합은 합병 조건이 가능해야 함

· 합병 조건 : 합병하려는 두 릴레이션 간에 속성의 수가 같고, 각 속성이 취할 수 있는 도메인의 범위가 같아야 함

· 합병 가능한 두 릴레이션 R과 S가 있을 때 각 연산의 특징을 요약하면 다음과 같음


연산자

기능 및 수학적 표현

카디널리티

합집합

UNION


 · 두 릴레이션에 존재하는 튜플의 합집합을 구하되, 결과로 생성된 릴레이션에서 중복된 튜플은 제거됨

 · R ∪ S = {t | t ∈ R ∨ t ∈ S}

 ※ t는 릴레이션 R 또는 S에 존재하는 튜플

 · |R∪S| ≤ |R| + |S|

 · 합집합의 카디널리티는 두 릴레이션 커디널리티의 합보다 크지 않음

교집합

INTERSECTION


 · 두 릴레이션에 존재하는 튜플의 교집합을 구하는 연산

 · R ∩ S = {t | t  R ∧ t ∈ S}

 ※ t는 릴레이션 R 그리고 S에 동시에 존재하는 튜플

 · |R∩S| ≤ MIN{|R|, |S|}

 · 교집합의 카디널리티는 두 릴레이션 중 카디널리티가 적은 릴레이션의 카디널리티보다 크지 않음

차집합

DIFFERENCE

-

 · 두 릴레이션에 존재하는 튜플의 차집합을 구하는 연산

 · R - S = {t | t  R ∧ t ∉ S}

 ※ t는 릴레이션 R에는 존재하고 S에는 없는 튜플

 · |R-S| ≤ |R|

 · 차집합의 카디널리티는 릴레이션 R의 카디널리티보다 크지 않음

교차곱

CARTESIAN PRODUCT

×

 · 두 릴레이션에 존재하는 튜플의 순서쌍을 구하는 연산

 · R × S = {r·s | r  R ∧ s ∈ S}

 ※ r는 R에 존재하는 튜플이고, s는 S에 존재하는 튜플

 · |R×S| = |R| × |S|

 · 교차곱은 두 릴레이션의 카디널리티를 곱한 것과 같음


④ 관계해석


· 관계 데이터 모델의 제안자인 코드가 수학의 Predicate Calculus에 기반을 두고 관계 데이터베이스를 위해 제안

· 관계해석은 관계 데이터의 연산을 표현하는 방법으로, 원하는 정보를 정의할 때는 계산 수식을 사용

· 관계해석은 원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성을 지님

· 튜플 관계해석과 도메인 관계해석이 있음

· 기본적으로 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력 면에서 동등하며, 관계대수로 표현한 식은 관계해석으로 표현 가능

· 질의어로 표현



016 정규화(Normalization)


① 정규화의 개요


· 함수적 종속성 등의 종속성 이론을 이용해 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만드는 과정

· 분해해가는 과정

· 정규형에는 제1정규형, 제2정규형, 제3정규형, BCNF형, 제4정규형, 제5정규형이 있으며, 차수가 높아질수록 만족시켜야 할 제약조건 늘어남

· 데이터베이스의 논리적 설계 단계에서 수행


② 정규화의 목적


· 데이터 구조의 안정성을 최대화

· 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하도록 만듦

· 효과적인 검색 알고리즘 생성 가능

· 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지

· 데이터 삽입 시 릴레이션을 재구성할 필요성 감소


③ Anomaly(이상)의 개념 및 종류


정규화를 거치지 않으면 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 예기치 못한 곤란한 현상 발생 → 이상


· 삽입 이상(Insertion Anomaly) : 릴레이션에 데이터를 삽입할 떄 의도와는 상관없이 원하지 않은 값들도 함께 삽입되는 현상

· 삭제 이상(Deletion Anomaly) : 릴레이션에서 한 튜플을 삭제할 떄 의도와는 상관없는 값들도 함께 삭제되는 연쇄 삭제 현상이 일어나는 현상

· 갱신 이상(Update Anomaly) : 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상


④ 정규화의 원칙


· 정보의 무손실 표현, 즉 하나의 스키마를 다른 스키마로 변환할 때 정보의 손실이 있어서는 안 됨

· 분리의 원칙, 즉 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜 표현해야 함

· 데이터의 중복성이 감소되어야 함


⑤ 정규화 과정


1NF(제1정규형)

1NF는 릴레이션에 속한 모든 도메인이 원자값으로만 되어 있는 릴레이션

· 릴레이션의 모든 속성이 단순 영역에서 정의됨


2NF(제2정규형)

2NF는 릴레이션  R이 1NF이고, 키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속 관계를 만족함


3NF(제3정규형)

릴레이션 R이 2NF이고, 키가 아닌 모든 속성이 기본키에 대해 이행적 종속 관계를 이루지 않도록 제한한 관계형

(이행적 종속 관계 : A→B이고 B→C일 떄 A→C를 만족하는 관계)

· 무손실 조인 또는 종속성 보존을 저해하지 않고도 항상 3NF 설계를 얻을 수 있음


BCNF(Boyce-Codd 정규형)

· 릴레이션 R에서 결정자가 모두 후보키인 관계형

(결정자 : '학번'에 따라 '이름'이 결정되는 '학번 → 이름'일 때 '학번'을 결정자라하고, '이름'을 종속자라고 함)

· 3NF에서 후보키가 많고 서로 중첩되는 경우에 적용하는 강한 제3정규형이라고도 함

· 모든 BCNF가 종속성을 보장하는 것은 아님

· BCNF의 제약 조건

- 키가 아닌 모든 속성은 각 키에 대하여 완전 종속해야 함

- 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가있지 않은 모든 키에 대하여 완전 종속해야 함

- 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속할 수 없음


4NF(제4정규형)

릴레이션 R에 A→→B가 성립하는 경우 R의 모든 속성이 A에 함수적 종속이면 이 릴레이션 R은 제4정규형에 속함


5NF(제5정규형, PJ/NF)

릴레이션 R의 모든 조인 종속성(JD)의 만족이 R의 후보키를 통해서만 만족될 때 그 릴레이션 R은 제5정규형 또는 PJ/NF에 속함


※ 다치 종속(MVD; Multi Valued Dependency)

A, B, C 세 개의 속성을 가진 릴레이션 R에서 어떤 복합 속성 (A,C)에 대응하는 B 값의 집합이 A 값에만 종속되고 C 값에는 무관할 때 다치 종속 R · A →→ R · B가 존재함

※ 조인 종속(JD; Join Dependency)

어떤 릴레이션 R이 자신의 Projection(X,Y,…,Z)에 대한 조인의 결과가 자신과 같을 때 조인 종속(JD) (X,Y,…,Z)은 R의 속성 집합의 부분집합

※ 정규화 과정 정리

도메인이 원자값(비정규 릴레이션 → 1NF)

부분적 함수 종속 제거(1NF → 2NF)

이행적 함수 종속 제거(2NF → 3NF)

결정자이면서 후보키가 아닌 것 제거(3NF → BCNF)

다치 종속 제거(BCNF → 4NF)

조인 종속성 이용(4NF → 5NF)



017 SQL의 개념


① SQL(Structed Query Language)의 개요


· 1974년 IBM에서 개발한 SEQUEL에서 유래

· 국제표준 데이터베이스 언어, 관계형 데이터베이스(RDB)를 지원하는 언어로 채택

· 관계대수와 관계해석을 기초로 한 혼합 데이터 언어

· 질의어지만 질의 기능만 있는 것이 아니라 데이터 구조의 정의, 데이터 조작, 데이터 제어 기능을 모두 갖추고 있음


② SQL의 분류


DDL(데이터 정의어)


· DDL(Data Definition Language)은 SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 언어

· 논리적 데이터 구조와 물리적 데이터 구조의 사상을 정의 

· 데이터베이스 관리자나 데이터베이스 설계자가 사용

· 데이터 정의어(DDL)의 세 가지 유형


명령어

기능

CREATE

SCHEMA, DOMAIN, TABLE, VIEW, INDEX 정의

ALTER

TABLE에 대한 정의를 변경하는 데 사용

DROP

SCHEMA, DOMAIN, TABLE, VIEW, INDEX 삭제


DML(데이터 조작어)


· DML(Data Manipulation Language)은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 실질적으로 처리하는 데 사용되는 언어

· 데이터베이스 사용자와 데이터베이스 관리 시스템 간의 인터페이스 제공

· 데이터 조작어(DML)의 네 가지 유형


명령어

기능

SELECT

테이블에서 조건에 맞는 튜플을 검색

INSERT

테이블에서 새로운 튜플을 삽임

DELETE

테이블에서 조건에 맞는 튜플을 삭제

UPDATE

테이블에서 조건에 맞는 튜플의 내용을 변경


DCL(데이터 제어어)


· DCL(Data Control Language)은 데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는 데 사용되는 언어

· 데이터베이스 관리자가 데이터 관리를 목적으로 사용

· 데이터 제어어(DCL)의 종류


명령어

기능

COMMIT

명령에 의해 수행된 결과를 실제 물리적 디스크로 저장하고, 데이터베이스 조작 작업이 정상적으로 완료되었음을 관리자에게 알려줌

ROLLBACK

데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구

GRANT

데이트베이스 사용자에게 사용 권한 부여

REVOKE

데이터베이스 사용자의 사용 권한 취소



018 DDL


· DDL(Data Define Language, 데이터 정의 언어)은 SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 명령문

· DDL로 정의된 내용은 Meta-data가 되며, 시스템 카탈로그에 저장

  (메타 데이터 : 데이터 관리를 위한, 즉 데이터를 위한 데이터

  시스템 카탈로그 : 시스템 그 자체에 관련이 있는 다양한 객체들에 관한 정보를 포함하는 시스템 데이터베이스 테이블)


※ 데이터 정의문에서 사용하는 테이블 종류

기본 테이블

이름을 갖고 있으며 독자적으로 존재

뷰 테이블

독자적으로 존재하지 못하고, 기본 테이블로부터 유도된 이름을 가진 가상 테이블

임시 테이블

질의문 처리 결과로 만들어진 테이블로서, 이름을 가지지 않음


① CREATE SCHEMA


· 스키마를 정의하는 명령문

· 스키마의 식별을 위해 스키마 이름과 소유권자나 허가권자를 정의


※ 표기 형식

 CREATE SCHEMA 스키마_이름 AUTHORIZATION 사용자_id;


예) 소유권자의 사용자 ID가 홍길동인 스키마 '대학교'의 정의문 - CREATE SCHEMA 대학교 AUTHORIZATION 홍길동;


② CREATE DOMAIN


· 도메인을 정의하는 명령문

· 임의의 속성에서 취할 수 있는 원자값의 범위가 SQL에서 지원하는 data_type에 포함되는 전체 값이 아니고 일부분일 때 사용자가 그 값의 범위를 사용자 정의 data_type으로 정의


※ 표기 형식

 CREATE DOMAIN 도메인_이름 data_type

[DEFAULT 묵시값_정의]

[CONSTRAINT VALID-도메인_이름 CHECK (범위값)];


· data_type : SQL에서 지원하는 data_type

· 묵시값 : 데이터를 입력하지 않았을 때 자동으로 입력되는 기본값

· 정의된 도메인_이름은 일반적인 data_type처럼 사용


예) '남', '여' 또는 '?' 중의 한 문자를 취할 수 있는 도메인 SEX의 정의문

 CREATE DOMAIN SEX CHAR(1)

DEFAULT '여'

CONSTRAINT VALID-SEX CHECK(VALUE IN('남', '여', '?'));

 정의된 도메인은 이름이 'SEX'이며, 문자형이고 크기는 1자

 자료형으로 SEX를 지정한 속성의 기본값 : '여'

 자료형으로 SEX를 지정한 속성은 '남', '여', '?' 중 하나의 값만 취함


※ SQL에서 지원하는 기본 data_type


 정수(Integer)

INT(4Byte 정수), SMALLINT(2Byte 정수)

 실수(Float)

FLOAT, REAL, DOUBLE PRECISION

 형식화된 숫자

DEC(i, j) 단, i : 전체 자릿수, j : 소수부 자릿수

 고정길이 문자

CHAR(n) 단, n : 문자수

 가변길이 문자

VARCHAR(n) 단, n : 최대 문자수

 고정길이 비트열(Bit String)

BIT(n)

 가변길이 비트열

VARBIT(n)

 날짜

DATE, 날짜 데이터는 YYY-MM-DD의 10자리로 표기

 시간

TIME, 시간 데이터는 HH : MM: SS의 6자리로 표기


③ CREATE TABLE


CREATE TABLE은 기본 테이블을 정의하는 명령문 


※ 표기 형식

 CREATE TABLE 기본테이블_이름

(속성명 data_type [NOT NULL], …,

PRIMARY KEY(기본키_속성명),

UNIQUE(대체키_속성명, …),

FOREIGN KEY(외래키_속성명, …)

REFERENCES 참조테이블(기본키_속성명),

CONSTRAINT 제약조건명 CHECK(조건식) );


· 속성명 : 기본 테이블에 포함될 모든 속성에 대하여 속성명과 그 속성의 data_type, NOT NULL 여부를 지정

· PRIMARY KEY : 기본키 속성 지정

· UNIQUE : 대체키로 사용할 속성명들을 지정

· FOREIGN KEY ~ REFERENCES ~

- 참조할 다른 테이블과 그 테이블을 참조할 때 사용할 외래키 속성을 지정

- 외래키가 지정되면 참조 무결성의 CASCADE 법칙이 적용됨

· CHECK : 제약 조건을 정의


예) 이름, 학번, 전공, 성별, 생년월일로 구성된 '학생' 테이블을 정의하라.

 CREATE TABLE 학생

(이름 VARCHAR(15) NOT NULL,

학번 VARCHAR(15) NOT NULL,

전공 VARCHAR(20) NOT NULL,

성별 SEX,

생년월일 DATE,

PRIMARY KEY(학번),

FOREIGN KEY(전공)

REFERENCES 학과(학과코드),

CONSTRAINT 성별제약

CHECK(성별 = '남') ); 


④ CREATE INDEX


CREATE INDEX는 인덱스를 정의하는 명령문 


※ 표기 형식

 CREATE  [UNIQUE] INDEX 인덱스_이름

ON 기본테이블_이름({속성_이름 [ASC | DESC],})

[CLUSTER];


· UNIQUE 옵션

- 사용하는 경우 : 기본키나 대체키 같은 중복되는 값이 없는 속성으로 인덱스를 생성할 때

- 생략하는 경우 : 중복값을 허용하는 속성으로 인덱스를 생성할 때

· 정렬 여부 지정

- ASC : 오름차순 정렬, DESC : 내림차순 정렬

- 생략하면 오름차순으로 정렬됨

· CLUSTER 옵션 : 동일 인덱스 값을 갖는 튜플들을 그룹으로 묶을 때 사용


예) '고객' 테이블의 기본키인 '고객번호' 속성에 대해 오름차순 정렬하여 '고객번호_INX'라는 이름으로 인덱스를 구성하라.

 CREATE UNIQUE INDEX 고객번호_INX

 ON 고객(고객번호 ASC);


⑤ ALTER TABLE


ALTER TABLE은 테이블에 대한 정의를 변경하는 명령문


※ 표기 형식

 ALTER TABLE 기본테이블_이름 ADD 속성_이름 data_type [DEFAULT '기본값'];

 ALTER TABLE 기본테이블_이름 ALTER 속성_이름 [SET DEFAULT '기본값'];

 ALTER TABLE 기본테이블_이름 DROP 속성_이름 [CASCADE];


· ADD : 새로운 속성(열)을 추가할 때 사용

· ALTER : 특정 속성의 Default 값을 변경할 때 사용

· DROP : 특정 속성을 삭제할 때 사용


예) '학생' 테이블에 최대 3문자로 구성되는 '학년' 속성 추가

 ALTER TABLE 학생 ADD 학년 VARCHAR(3); 


⑥ DROP


DROP은 스키마, 도메인, 기본 테이블, 뷰 테이블, 인덱스 등을 삭제하는 명령문


※ 표기 형식

 DROP SCHEMA 스키마_이름[CASCADE | RESTRICTED];

 DROP DOMAIN 도메인_이름[CASCADE | RESTRICTED];

 DROP TABLE 테이블_이름[CASCADE | RESTRICTED];

 DROP VIEW 뷰_이름[CASCADE | RESTRICTED];

 DROP INDEX 인덱스_이름;


· DROP SCHEMA : 스키마 삭제

· DROP DOMAIN : 도메인 삭제

· DROP TABLE : 기본 테이블 삭제

· DROP VIEW : 뷰 테이블 삭제

· DROP INDEX : 인덱스 삭제

· CASCADE 옵션 : 삭제할 요소를 참조하는 다른 모든 개체를 함께 삭제. 즉, Main Table의 데이터 삭제 시 각 외래키에 대해 부합되는 모든 데이터를 삭제하는 참조 무결성의 법칙을 설정

· RESTRICTED 옵션 : 삭제할 요소를 다른 개체가 참조중일 때는 삭제를 취소


예) '학생' 테이블을 삭제하되, '학생' 테이블을 참조하는 모든 테이블을 함께 삭제한다.

 DROP TABLE 학생 CASCADE; 



019 DML - SELECT


 SELECT문은 테이블을 구성하는 튜플(행)들 중에서 전체 또는 조건을 만족하는 튜플(행)을 검색하여 주기억장치 상에 임시 테이블로 구성하는 명령문


① 일반형식


 SELECT Predicate [테이블명.]속성명1, [테이블명.]속성명2, …

 FROM 테이블명1, 테이블명2, …

 [WHERE 조건]

 [GROUP BY 속성명1, 속성명2, …]

 [HAVING 조건]

 [ORDER BY 속성명 [ASC | DESC]]; 


· SELECT절

- 속성명 : 검색하여 불러올 속성(열) 또는 속성을 이용한 수식 지정

▶ 기본 테이블을 구성하는 모든 속성을 지정할 때는 '*'를 기술

▶ 두 개 이상의 테이블을 대상으로 검색할 때는 '테이블명.속성명'으로 표현

· Predicate : 불러올 튜플 수를 제한할 명령어를 기술


※ Predicate옵션

· ALL : 모든 튜플을 검색할 떄 지정하는 것으로, 주로 생략

· DISTINCT : 중복된 튜플이 있으면 그 중 첫 번째 한 개만 검색

· DISTINCTROW : 중복된 튜플을 제거하고 한 개만 검색하지만 선택된 속성의 값이 아닌, 튜플 전체를 대상으로 함


·  FROM절 : 질의에 의해 검색될 데이터들을 포함하는 테이블명을 기술

· WHERE절 : 검색할 조건을 기술


※ 조건 연산자

·  비교 연산자 : =, <>, >, >=, IN

·  논리 연산자 : NOT, AND, OR

·  LIKE : 대표 문자를 이용해 지정된 속성의 값이 문자 패턴과 일치하는 튜플만 검색


· GROUP BY절 : 특정 속성을 기준으로 그룹화하여 검색할 때 그룹화할 속성을 지정

· 일반적으로 GROUP BY절은 그룹 함수와 함께 사용됨


※ 그룹 함수의 종류

· COUNT(속성명) : 그룹별 튜플 수를 구하는 함수

· MAX(속성명) : 그룹별 최대값을 구하는 함수

· MIN(속성명) : 그룹별 최소값을 구하는 함수

· SUM(속성명) : 그룹별 합계를 구하는 함수

· AVG(속성명) : 그룹별 평균을 구하는 함수


· HAVING절 : GROUP BY와 함께 사용되며, 그룹에 대한 조건을 지정

· ORDER BY절 : 특정 속성을 기준으로 정렬하여 검색할 때 사용

- 속성명 : 정렬의 기준이 되는 속성명을 기술

- [ASC | DESC] : 정렬 방식으로서 'ASC'는 오름차순, 'DESC'는 내림차순. 생략하면 오름차순으로 지정


② 기본검색


· SELECT * FROM 사원;

· 중복 제거 : DISTINCT


③ 조건 지정 검색


 SELECT *

 FROM 사원

 WHERE 부서 = '기획';


 SELECT *

 FROM 사원

 WHERE 부서 = '기획' AND  주소 = '후평동';

 SELECT *

 FROM 사원

 WHERE 부서 = '기획' OR 부서 = '인터넷';

 SELECT *

 FROM 사원

 WHERE 이름 LIKE "김%"; 


  SELECT *

 FROM 사원

 WHERE 생일 Between #01/09/69# And #10/22/73#


·  SELECT *

 FROM 사원

 WHERE 주소 IS NULL;

(NULL이 아닌 값을 검색할 떄는 IS NOT NULL 사용 → WHERE 주소 IS NOT NULL;)


④ 정렬 검색


ASC : 오름차순 / DESC : 내림차순


⑤ 그룹 지정 검색


※ GROUP BY절 : 그룹을 지정. 그룹에 대한 조건을 지정할 때는 WHERE가 아닌 HAVING 사용

   Avg(기본급) As 평균 : '기본급' 속성에 있는 값들의 평균을 구하되 '평균'이라는 속성명으로 표시


SELECT 부서, Avg(기본급) As 평균

 FROM 사원

 Group By 부서;

 SELECT 부서, COUNT(*) As 사원수

 FROM 사원

 Group By 부서;

 SELECT 부서, COUNT(*) As 사원수

 FROM 사원

 WHERE 기본급 ≥ 100

 Group By 부서

 HAVING COUNT(*) ≥ 2;


⑥ 하위 질의


Select 이름, 주소

From 사원

Where 이름=(Select 이름 From 여가활동 Where 취미='나이트댄스')

- 하위 질의는 조건절에 주어진 질의를 먼저 수행하여 그 검색 결과를 조건절의 피연산자로 사용

  "Select 이름 From 여가활동 Where 취미 = '나이트댄스'"를 수행하여 <여가활동> 테이블에서 '성춘향'을 찾음

  그런 다음 하위 질의에 해당하는 피연산자의 자리에 '성춘향'을 대입하면 질문은 "Select 이름, 주소 From 사원 Where 이름='성춘향'"과 같음


Select *

From 사원

Where 이름 Not In(Select 이름 From 여가활동)

- Not In()

  Not In()은 포함되지 않는 데이터를 의미

  <사원> 테이브레서 모든 자료를 검색하는데, <여가활동> 테이블에 이름이 있는 자료는 제외하고 검색


⑦ 복수 테이블 검색


예) 경력이 10년 이상인 사원의 이름, 부서, 취미, 경력을 검색하시오.

Select 사원.이름, 사원.부서, 여가활동.취미, 여가활동.경력

From 사원, 여가활동

Where 여가활동.경력≥10 And 사원.이름 = 여가활동.이름


⑧ 통합(UNION) 질의


※ 두 테이블을 합치는 통합(UNION) 질의는 두 테이블에 모두 속해 있는 자료는 한 개만 표시


예) 사원들의 명단이 <사원> 테이블과 <직원>테이블에 저장되어 있다. 두 테이블을 통합하는 질의문을 작성하시오. 단, 같은 레코드가 두 번 나오지 않게 하시오.

Select *

From 사원

Union

Select *

From 직원



020 DML - INSERT, DELETE, UPDATE


① 삽입문(INSERT INTO~)


삽입문은 기본 테이블에 새로운 튜플을 삽입할 때 사용


※ 일반형식

 INSERT INTO 테이블명(속성명1, 속성명2, …)

 VALUES (데이터1, 데이터2, …) 


· 대응하는 속성과 데이터는 개수와 data_type이 일치해야함

· 기본 테이블의 모든 속성을 사용할 때는 속성명 생략 가능

· SELECT문을 사용하여 다른 테이블의 검색 결과 삽입 가능


예1) <사원> 테이블에 (이름-홍승현, 부서-인터넷)을 삽입하시오

 → INSERT INTO 사원(이름, 부서) VALUES('홍승현', '인터넷');

예2)  <사원> 테이블에 (장보고, 기획, 05/03/73, 석사동, 90)을 삽입하시오

 → INSERT INTO 사원 VALUES('장보고', '기획', #05/03/73#, '석사동', '90')

예3)  <사원> 테이블에 있는 편집부의 모든 튜플을 편집부원(이름, 생일, 주소, 기본급) 테이블에 삽입하시오

 → INSERT INTO 편집부원(이름, 생일, 주소, 기본급)

     SELECT 이름, 생일, 주소, 기본급

     FROM 사원

     WHERE 부서 = '편집';


② 삭제문(DELETE FROM~)


삭제문은 기본 테이블에 있는 튜플들 중에서 특정 튜플(행)을 삭제할 때 사용


※ 일반형식

 DELETE

 FROM 테이블명

 WHERE 조건;


· 모든 레코드를 삭제할 떄는 WHERE절을 생략

· 모든 레코드를 삭제하더라도 테이블 구조는 남아 있기 때문에 디스크에서 테이블을 완전히 제거하는 DROP과는 다름


예1) <사원> 테이블에서 임꺽정에 대한 튜플을 삭제하시오

 → DELETE FROM 사원 WHERE 이름='임꺽정';

예2)  <사원> 테이블에서 '인터넷' 부서에 대한 모든 튜플을 삭제하시오

 → DELETE FROM 사원 WHERE 부서 = '인터넷';

예3)  <사원> 테이블의 모든 레코드를 삭제하시오

 → DELETE FROM 사원;


③ 갱신문(UPDATE~ SET~)


갱신문은 기본 테이블에 있는 튜플들 중에서 특정 튜플의 내용을 변경할 때 사용(UPDATE~ SET~ WHERE~)


※ 일반형식

 UPDATE 테이블명

 SET 속성명 = 데이터

 WHERE 조건;


예1) <사원> 테이블에서 홍길동의 주소를 퇴계동으로 수정하시오

 → UPDATE 사원 SET 주소 = '퇴계동' WHERE 이름 = '홍길동';

예2)  <사원> 테이블에서 황진이의 부서를 기획부로 변경하고 기본급을 5만 원 인상시키시오

 → UPDATE 사원 SET 부서 = '기획', 기본급 = 기본급 + 5 WHERE 이름 = '황진이';


 ※ 데이터 조작문의 네 가지 유형

· SELECT(검색) : SELECT~ FROM~ WHERE~

· INSERT(삽입) : INSERT INTO~ VALUES~

· DELETE(삭제) : DELETE FROM~ WHERE~

· UPDATE(변경) : UPDATE~ SET~ WHERE~



021 내장 SQL


① 내장 SQL(Embedded SQL)의 정의


내장 SQL은 응용 프로그램 내에 데이터베이스에서 사용하는 데이터를 정의하거나 질의하는 SQL 문장을 내포하여 프로그램이 실행될 때 함께 실행되도록 호스트 프로그램 언어로 만든 프로그램에 삽입된 SQL


② 내장 SQL의 특징


· 내장 SQL 실행문은 호스트 언어에서 실행문이 나타날 수 있는 곳이면 프로그램의 어느 곳에서나 사용 가능

· 일반 SQL문은 수행 결과로 여러 개의 튜플을 반환하는 반면, 내장 SQL은 단 하나의 튜플만을 반환

· 내장 SQL문에 의해 반환되는 튜플은 일반 변수를 사용하여 저장 가능

· Host Program의 컴파일 시 내장 SQL문은 선행처리기에 의해 분리되어 컴파일됨. 호스트 변수와 데이터베이스 필드의 이름은 같아도 됨.

· 내장 SQL문에 사용된 호스트 변수의 데이터 타입은 이에 대응하는 데이터베이스 필드의 SQL 데이터 타입과 일치하여야 함

· 내장 SQL문이 실행되면 SQL 실행의 상태가 SQL 상태 변수에 전달됨


※ SQL 상태변수 : 삽입 SQL문 실행 후 SQLCODE라는 묵시적 변수에 성공, 실패, 오류 등의 결과를 정수값으로 전달함

 0:성공 / 100:NOT FOUND / 양수:경고 / 음수:에러 (SQL2에서는 SQLSTATE라는 변수 사용 → 00000:성공 / 02000:NOT FOUND)


③ 호스트 언어의 실행문과 구분시키는 방법 


프로그램에서 호스트 실행문과 내장 SQL문을 구분하기 위한 벙법


명령문의 구분

· C/C++에서 내장 SQL문은 $와 세미콜론(;) 문자 사이에 기술

· Visual BASIC에서는 내장 SQL문 앞에 'EXEC SQL'을 기술


변수의 구분

· 내장 SQL에서 사용하는 호스트 변수는 앞에 콜론(:) 문자를 붙임


④ 커서(Cursor)


· 커서는 내장 SQL문의 수행 결과로 반환될 수 있는 복수의 튜플들을 액세스할 수 있도록 해주는 개념

· 질의 수행 결과로 반환되는 첫 번째 튜플에 대한 포인터

· 커서를 사용하여 질의 결과로 반환될 수 있는 튜플들을 한 번에 하나식 차례로 처리 가능


커서 관련 명령어

· DECLARE : 커서를 정의하는 등 커서에 관련한 선언을 하는 명령

· OPEN : 커서가 질의 결과의 첫 번째 튜플을 포인트하도록 설정하는 명령

· FETCH : 질의 결과의 튜플들 중 현재의 다음 튜플로 커서를 이동시키는 명령

· CLOSE : 질의 수행 결과에 대한 처리 종료시 커서를 닫기 위해 사용하는 명령



022 뷰(View)


① 뷰(View)의 개요


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

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

· 데이터 보정작업, 처리과정 시험 등 임시적인 작업을 위한 용도로 활용됨

· 조인문의 사용 최소화로 사용상의 편의성을 최대화함


② 뷰(View)의 특징


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

· 가상 테이블이기 때문에 물리적으로 구현되어 있지 않음

· 데이터의 논리적 독립성 제공

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

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

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

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

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


③ 뷰(View)의 ·단점


장점

· 논리적 데이터 독립성 제공

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

· 사용자의 데이터 관리를 간단하게 해줌

· 접근 데아를 통한 자동 보안 제공


단점

· 독립적인 인덱스를 가질 수 없음

· ALTER VIEW문을 사용할 수 없음. 즉 뷰의 정의를 변경할 수 없음

· 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약이 따름


④ 뷰(View) 정의문


※ 일반 형식

 CREATE VIEW 뷰이름[(속성이름)]

 AS SELECT문;

· SELECT문을 부질의로 사용하여 SELECT문의 결과로서 뷰를 생성

· 부질의로서의 SELECT문에는 UNION이나 ORDER BY절을 사용할 수 없음

· 속성 이름을 기술하지 않으면 SELECT문의 속성 이름이 자동으로 사용됨


예) 고객 테이블에서 주소가 춘천시인 고객들의 성명과 전화번호를 '춘천고객'이라는 뷰로 정의하시오

  → CREATE VIEW 춘천고객

AS SELECT 성명, 전화번호

FROM 고객

WHERE 주소 = '춘천시';


⑤ 뷰 삭제문


뷰는 ALTER문을 사용하여 변경할 수 없으므로 필요한 경우는 삭제한 후 재생성함


※ 일반형식

 DROP VIEW 뷰이름 {RESTRICT | CASCADE}; 

· RESTRICT : 뷰를 다른 곳에서 참조하고 있으면 삭제가 취소됨

· CASCADE : 뷰를 참조하는 다른 뷰나 제약 조건까지 모두 삭제됨


예) 뷰 '춘천고객'을 삭제하시오. 단 다른 곳에서 참조하고 있으면 제거되지 않게 하시오

  → DROP VIEW 춘천고객 RESTRICT;



023 시스템 카탈로그


① 시스템 카탈로그(System Catalog)의 의미


· 시스템 카탈로그는 시스템 그 자체에 관련이 있는 다양한 객체에 관한 정보를 포함하는 시스템 데이터베이스

· 시스템 카탈로그 내의 각 테이블은 사용자를 포함하여 DBMS에서 지원하는 모든 데이터 객체에 대한 정의나 명세에 관한 정보를 유지 관리하는 시스템 테이블

· 데이터 정의어의 결과로 구성되는 기본 테이블, 뷰, 인덱스, 패키지, 접근 권한 등의 데이터베이스 구조 및 통계 정보를 저장

· 카탈로그들이 생성되면 자료 사전에 저장되기 때문에 좁은 의미로는 카탈로그를 자료 사전이라고도 함

· 카탈로그에 저장된 정보를 메타 데이터라고 함


② 카탈로그의 특징


· 카탈로그 자체도 시스템 테이블로 구성되어 있어 일반 이용자도 SQL을 이용하여 내용 검색 가능

· INSERT, DELETE, UPDATE문으로 카탈로그를 갱신하는 것은 허용되지 않음

· 데이터베이스 시스템에 따라 상이한 구조를 가짐

· 카탈로그는 DBMS가 스스로 생성하고 유지함

· 카탈로그의 갱신 : 사용자가 SQL문을 실행시켜 기본 테이블, 뷰, 인덱스 등에 변화를 주면 시스템이 자동으로 갱신함

· 분산 시스템에서의 카탈로그 ; 보통의 릴레이션, 인덱스, 사용자 등의 정보를 포함할 뿐 아니라 위치 투명성 및 중복 투명성을 제공하기 위해 필요한 모든 제어 정보를 가져야 함


③ 시스템 카탈로그의 종류


· SYSTABLES : 기본 테이블 및 뷰 테이블의 정보를 저장하는 테이블

· SYSCOLUMNS : 모든 테이블에 대한 정보를 열(속성) 중심으로 저장하는 테이블

· SYSINDEXES : 인덱스 테이블에 대한 정보를 저장하는 테이블

· SYSVIEW : 뷰에 대한 정보를 저장하는 테이블

· SYSTABAUTH : 테이블에 설정된 권한 사항들을 저장하는 테이블

· SYSCOLAUTH : 각 속성에 설정된 권한 사항들을 저장하는 테이블

· SYSDEPEND : 기본 테이블과 뷰 사이의 종속 관계를 저장하는 테이블

· SYSUSERS : 사용자의 권한 등급 정보를 저장하는 테이블


카탈로그/데이터 사전을 참조하기 위한 DBMS 내의 모듈 시스템


· 데이터 정의어 번역기(DDL Compiler) : DDL을 메타 데이터를 갖는 테이블(카탈로그)로 변환하여 데이터 사전에 저장시킴

· 데이터 조작어 번역기(DML Compiler) : 응용 프로그램에 삽입된 DML문을 주 언어로 표현한 프로시저 호출로 변환하여 질의 처리기와 상호 통신함

· Data Directory

- 데이터 사전에 수록된 데이터를 실제로 접근하는 데 필요한 정보를 관리 유지하는 시스템

- 시스템 카탈로그는 사용자와 시스템 모두 접근할 수 있지만 데이터 디렉터리는 시스템만 접근 가능

· 질의 최적화기 : 사용자의 요구를 효율적인 형태로 변환하고 질의를 처리하는 좋은 전략을 모색

· 트랜잭션 처리기 : 복수 사용자 환경에서 평행으로 동시에 일어나는 트랜잭션 문제를 해결하여, 각각의 사용자가 데이터베이스 자원을 배타적으로 이용할 수 있도록 함



출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 1과목 데이터베이스


2장 데이터 모델링 및 설계


007 데이터 모델의 개념


① 데이터 모델의 정의


· 현실 세계의 정보들을 컴퓨터에 표현하기 위해서 단순화, 추상화하여 체계적으로 표현한 개념적 모형

· 데이터, 데이터의 관계, 데이터의 의미 및 일관성, 제약조건 등을 기술하기 위한 개념적 도구들의 모임

· 현실세계를 데이터베이스에 표현하는 중간 과정, 즉 데이터베이스 설계 과정에서 데이터의 구조를 논리적으로 표현하기 위해 사용되는 도구

· 데이터의 구조(Schema)를 논리적으로 묘사하기 위해 사용되는 지능적 도구


② 데이터 모델의 종류


- 개념적 데이터 모델


· 현실 세계에 대한 인간의 이해를 돕기 위해 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정

· 속성들로 기술된 개체 타입과 이 개체 타입들 간의 관계를 이용하여 현실 세계를 표현

· 현실 세계에 존재하는 개체를 인간이 이해할 수 있는 정보 구조로 표현하기 때문에 정보 모델이라고도 부름

· 대표적인 개념적 데이터 모델 : E-R 모델


- 논리적 데이터 모델


· 개념적 모델링 과정에서 얻은 개념적 구조를 컴퓨터가 이해하고 처리할 수 있는 컴퓨터 세계의 환경에 맞도록 변환하는 과정

· 필드로 기술된 데이터 타입과 이 데이터 타입들 간의 관계를 이용하여 현실 세계 표현

· 단순히 데이터 모델이라고 하면 논리적 데이터 모델을 의미

· 특정 DBMS는 특정 논리적 데이터 모델 하나만 선정하여 사용

· 데이터 간의 관계를 어떻게 표현하느냐에 따라 관계 모델, 계층 모델, 네트워크 모델로 구분


※정보 모델링과 데이터 모델링

현실 세계에 존재하는 개체를 컴퓨터 세계의 데이터 구조로 기술하는 것이 논리적 데이터 모델링이라면, 정보 모델링은 현실 세계에 존재하는 개체를 인간이 이해할 수 있는 정보 구조로 표현하는 개념적 데이터 모델을 의미



③ 데이터 모델에 표시할 요소


· 구조(Structure) : 논리적으로 표현된 개체 타입들 간의 관계로서 데이터 구조 및 정적 성질을 표현

· 연산(Operation) : 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세로서 데이터베이스를 조작하는 기본 도구

· 제약 조건(Constraint) : 데이터베이스에 저장될 수 있는 실제 데이터의 논리적인 제약 조건


④ 데이터 모델의 구성 요소


- 개체(Entity)

· 데이터베이스에 표현하려는 것(사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체)

· 실세계에 독립적으로 존재하는 유형, 무형의 정보로서 서로 연관된 몇 개의 속성으로 구성

· 파일 시스템의 레코드에 대응하는 것으로 어떤 정보를 제공하는 역할 수행

· 독립적으로 존재하거나 그 자체로서도 구별 가능


- 속성(Attribute)

· 데이터의 가장 작은 논리적 단위로서 파일 구조상의 데이터 항목 또는 데이터 필드에 해당

· 개체를 구성하는 항목


- 관계(Relationship)


· 관계의 형태

- 일 대 일(1:1)

- 일 대 다(1:n)

- 다 대 다(n:m)



008 개체 - 관계 모델


① 개체 - 관계(Entity-Relationship) 모델의 개요


·  E-R 모델은 개념적 데이터 모델의 가장 대표적인 것(1976년 피터 첸 Peter Chen에의해 제안됨)

· 개체와 개체 간의 관계를 기본 요소로 이용하여 현실 세계의 데이터를 개념적인 논리 데이터로 표현하기 위한 방법으로 많이 사용됨

· 개체 타입과 이들 간의 관계 타입을 이용해 현실 세계를 개념적으로 표현

· E-R 모델에서 데이터를 개체, 관계 속성으로 묘사함

· E-R 다이어그램으로 표현, 1:1, 1:N, N:M 등의 관계유형을 제한 없이 나타낼 수 있음


② E-R 다이어그램


 기호 이름

 의미

 사각형

개체(Entity) 타입

 마름모

관계(Relationship) 타입 

 타원

속성(Attribute)

 밑줄 타원

기본키 속성 

 복수 타원

복합 속성 

 관계

1:1, 1:n, n:m 등의 개체 간 관계에 대한 대응수를 선 위에 기술함

선, 링크

개체 타입과 속성을 연결 


③ 확장된 E-R 모델


· 개체를 구성하는 속성들은 개체에서 선을 연결하여 작은 원으로 표시

· 속성 중에서 단일 식별자(기본키)는 작은 원을 검게 칠함

· 복합 식별자는 관련 속성들을 선으로 묶어서, 묶은 선 끝에 검게 칠한 원을 그림

· 관계와 개체를 연결하는 선 위에는 (최소 대응수, 최대 대응수)로 표시



009 관계형 데이터 모델


① 관계형 데이터 모델(Relational Data Model)의 개념


· 관계형 데이터 모델은 가장 널리 사용되는 데이터 모델로, 계층 모델과 망 모델의 복잡한 구조를 단순화시킨 모델

· 2차원적인 표(Table)를 이용해서 데이터 상호 관계를 정의하는 DB 구조

· 기본키(Primary Key)와 이를 참조하는 외래키(Foreign Key)로 데이터 간의 관계 표현

· 관계 모델의 대표적인 언어 : SQL

· 1:1, 1:N, N:M 관계 자유롭게 표현 가능


② 관계형 데이터 모델의 특징


· 장점 : 간결하고, 보기 편리하고, 다른 데이터베이스로의 변환이 용이

· 단점 : 성능이 다소 떨어짐



010 계층형 데이터 모델


계층형 데이터 모델은 트리 구조를 이용해서 데이터의 상호관계를 계층적으로 정의한 구조


① 계층형 데이터 모델(Hierarchical Data Model)의 구성 형태


· 데이터의 논리적 구조도가 트리 형태이며, 개체(Entity)가 Tree를 구성하는 노드 역할

· 개체 집합에 대한 속성 관계를 표시하기 위해 개체를 노드로 표현하고 개체 집합들 사이의 관계를 링크로 연결

· 개체 간의 관계를 부모와 자식 간의 관계로 표현

· 계층형 DB를 구성하는 관계의 유형

- 속성 관계(Attribute Relation) : 세그먼트(개체)를 구성하는 속성들의 관계

- 개체 관계(Entity Relation) : 개체와 개체 간의 관계를 링크로 표시


② 계층형 데이터 모델의 특징


· 개체 타입 간에는 상위와 하위 관계가 존재하며, 일 대 다(1:N) 대응관계만 존재

· 계층을 정의하는 트리는 하나의 루트 개체 타입과 다수의 종속되는 개체 타입으로 구성된 순서 트리

· 루트 개체 타입은 다른 개체 타입과 구별됨

· 개체 삭제 시 연쇄 삭제

· 개체 타입들 간에는 사이클(Cycle)이 허용되지 않음

· 두 개체 간에는 하나의 관계만 허용

· 개체를 세그먼트로 부름

· 대표적인 DBMS : IMS


③ 계층형 데이터 모델의 장·단점


장점

· 구조가 간단하고, 판독이 용이

· 구현, 수정, 검색이 용이

· 데이터의 독립성이 보장됨

· 망 데이터 모델이나 관계 데이터 모델도 실제로 구현할 때는 계층적인 기억 구조를 이용


단점

· 데이터 상호 간의 유연성이 부족

· 검색 경로가 한정되어 있음

· 삽입과 삭제 연산이 매우 복잡

· 다 대 다 관계를 처리하기 어려움



011 망(네트워크)형 데이터 모델


① 망형 데이터 모델(Network Data Model)의 개요


· CODASYL이 제안 → CODASYL DBTG 모델이라고도 불림

· 그래프를 이용해서 데이터 논리 구조를 표현

· 상위(Owner)와 하위(Member) 레코드 사이에서 다 대 다(N:M) 대응 관계를 만족하는 구조

· 레코드 타입 간의 관계는 1:1, 1:N, N:M 가능

· 대표적인 DBMS : DBTG, EDBS, TOTAL


② 망형 데이터 모델의 표현


· Entity군 : 동종의 Entity 그룹

· Entity SET : 주종 관계에 있는 Entity군들의 그룹

· SET Membership Type : 일 대 다(1:N) 관계에 연관된 레코드 타입들을 각각 오너(Owner)와 멤버(Member)라고 부름

오너(Owner) : 트리 구조에서의 Parent와 같은 개념

멤버(Member) : 트리 구조에서의 Children과 같은 개념


③ 망형 데이터 모델의 특징


· 레코드 타입과 링크들의 집합으로 구성

· 레코드 타입의 집합이 있음

· 레코드 타입들을 연결하는 링크 집합이 존재

· 상위 하나의 레코드에 대하여 하위의 레코드가 복수 대응하고, 하위 하나의 레코드에 대해 상위 레코드도 복수 대응

· 링크들로 표현한 관계성에는 제한 없음

· 한 레코드 타입에서 자기 자신으로 가는 링크는 없음

· 오너와 레코드 타입은 서로 동일 형태가 될 수 없음



012 데이터베이스 설계


① 데이터베이스 설계의 개념 및 고려 사항


데이터 베이스 설계란 사용자의 요구를 분석하여 그것들을 컴퓨터에 저장할 수 있는 데이터베이스의 구조에 맞게 변형한 후 특정 DBMS로 데이터베이스를 구현하여 일반 사용자들이 사용하게 하는 것


데이터베이스 설계 시 고려사항


· 무결성 : 삽입, 삭제, 갱신 등의 연산 후에도 데이터베이스에 저장된 데이터가 정해진 제약 조건을 항상 만족해야 함

· 일관성 : 데이터베이스에 저장된 데이터들 사이나, 특정 질의에 대한 응답이 처음부터 끝까지 변함없이 일정해야 함

· 회복(Recovery) : 시스템에 장애가 발생했을 때 장애 발생 직전의 상태로 복구할 수 있어야 함

· 보안 : 불법적인 데이터의 노출 또는 변경이나 손실로부터 보호할 수 있어야 함

· 효율성 : 응답시간의 단축, 시스템의 생산성, 저장 공간의 최적화 등이 가능해야 함

· 데이터베이스 확장 : 데이터베이스 운영에 영향을 주지 않으면서 지속적으로 데이터를 추가할 수 있어야 함


② 요구 조건 분석


요구 조건 분석은 데이터베이스를 사용할 사람들로부터 필요한 용도를 파악하는 것


· 데이터베이스 사용자에 따를 수행 업무와 필요한 데이터의 종류, 용도, 처리 형태, 흐름, 제약 조건 등을 수집

· 수집된 정보를 바탕으로 요구 조건 명세 작성


③ 개념적 설계(정보 모델링, 개념화)


개념적 설계란 정보의 구조를 얻기 위하여 현실 세계의 무한성과 계속성을 이해하고, 다른 사람과 통신하기 위하여 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정


· 개념적 설계 단계에서는 개념 스키마 모델링과 트랜잭션 모델링을 병행 수행

· 요구 부넉 단계에서 나온 결과(요구 조건 명세)를 DBMS에 독립적인 E-R 다이어그램(개체 관계도)으로 작성

· DBMS에 독립적인 개념 스키마를 설계


④ 논리적 설계(데이터 모델링)


논리적 설계 단계에서는 현실 세계에서 발생하는 자료를 컴퓨터가 이해하고 처리할 수 있는 물리적 저장장치에 저장할 수 있도록 변환하기 위해 특정 DBMS가 지원하는 논리적 자료 구조로 변환시키는 과정


· 논리적 구조의 데이터로 모델화

· 개념적 설계가 개념 스키마를 설계하는 단계라면 논리적 설계에서는 개념 스키마를 평가 및 정재하고 DBMS에 따라 서로 다른 논리적 스키마를 설계하는 단계

· 트랜잭션의 인터페이스 설계

· 관계형 데이터베이스라면 테이블을 설계하는 단계· 


⑤ 물리적 설계(데이터 구조화)


논리적 설계 단계에서 논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 과정


· 데이터베이스 파일의 저장 구조 및 액세스 경로 설정

· 저장 레코드의 형식, 순서, 접근 경로와 같은 정보를 사용하여 데이터가 컴퓨터에 저장되는 방법을 묘사

· 물리적 설계 단계에 꼭 포함되어야 할 것은 저장 레코드의 양식 설계, 레코드 집중의 분석 및 설계, 접근 경로 설계 등

· 기본적인 데이터 단위는 저장 레코드

· 여러 가지 타입의 저장 레코드 집합


물리적 설계 시 고려사항


· 인덱스의 구조

· 레코드의 크기

· 파일에 존재하는 레코드 개수

· 파일에 대한 트랜잭션의 갱신과 참조 성향

· 성능 향상을 위한 개념 스키마의 변경 여부 검토

· 빈번한 질의와 트랜잭션들의 수행속도를 높이기 위한 고려

· 시스템 운용 시 파일 크기의 변화 가능성


물리적 설계 옵션 선택 시 고려 사항


물리적 설계 옵션이란 특정 DBMS에서 제공되는 것으로, 데이터베이스 파일에 대한 저장 구조와 접근 경로에 대한 다양한 옵션


· 반응시간(Response Time) : 트랜잭션 수행을 요구한 시점부터 처리 결과를 얻을 때까지 경과 시간

· 공간 활용도(Space Utilization) : 데이터베이스 파일과 액세스 경로 구조에 의해 사용되는 저장공간의 양

· 트랜잭션 처리량(Transaction Throughput) : 단위시간 동안 데이터베이스 시스템에 의해 처리될 수 있는 트랜잭션의 평균 개수


데이터베이스 구현


구현 단계는 논리적 설계 단계와 물리적 설계 단계에서 도출된 데이터베이스 스키마를 파일로 생성하는 단계


· 사용하려는 특정 DBMS의 DDL을 이용하여 데이터베이스 스키마를 기술한 후 컴파일하여 빈 데이터베이스 파일을 생성

· 생성된 빈 데이터베이스 파일에 데이터 입력

· 응용 프로그램을 위한 트랜잭션 작성

· 데이터베이스 접근을 위한 응용 프로그램 작성


※ 데이터 베이스 설계 순서

요구분석 : 요구 조건 명세서 작성

개념적 설계 : 개념 스키마, 트랜잭션 모델링, E-R 모델

논리적 설계 : 목표 DBMS에 맞는 논리 스키마 설계, 트랜잭션 인터페이스 설계

물리적 설계 : 목표 DBMS에 맞는 물리적 구조의 데이터로 변환

구현 : 목표 DBMS의 DDL로 데이터베이스 생성, 트랜잭션 작성



출처 : 2017 시나공 정보처리기사 필기

+ Recent posts