기타/정보처리기사

2과목 | 1장 : 데이터 입출력 구현

도이도2 2021. 3. 17. 09:02

034 자료 구조

 

1. 자료 구조의 정의

 자료 구조 :  프로그램에서 사용하기 위한 자료를 저장 공간에 저장하는 것 + 자료 간의 관계, 처리 방법을 연구 분석하는 것.

- 자료 표현과 연산.

- 자료를 조직하고 구조화하는 것.

- 어떤 자료 구조에서도 필요한 모든 연산 처리 가능.

 

2. 자료 구조의 분류

Linear Structure(선형 구조) : Array, Linear List(Contiguous List, Linked List), Stack, Queue, Deque.

Non-Linear Structure(비선형 구조) : Tree, Graph.

 

3. Array

배열 : 동일한 자료형의 데이터들이 같은 크기로 나열되어 순서를 갖고 있는 집합.

- 정적인 자료 구조. 기억장소 추가 어렵고, 삭제 시 기억장소는 빈 공간으로 남아있어 메모리의 낭비 발생.

- 첨자를 이용해 데이터에 접근.

- 반복적인 데이터 처리 작업에 적합.

- 데이터마다 동일한 이름의 변수를 사용, 처리 간편.

- 사용한 첨자([숫자])의 개수에 따라 n차원의 배열이라고 부름.

크기가 n인 1차원 배열 a : a[0]부터 a[n-1]까지 총 n개의 기억장소 존재.

크기가 n×n인 2차원 배열 a : 2개의 첨자가 존재하는 이차원 배열로 a[0][0]부터 a[n-1][n-1]까지 총 n×n개의 기억장소 존재.

 

4. Linear List

선형 리스트 : 빈 공간 없이 일정한 순서에 의해 나열된 자료 구조.

- 배열을 이용하는 Contiguous(연속 리스트)와 포인터를 이용하는 Linked List(연결 리스트)로 구분.

Pointer : 현재 위치에서 다음 노드의 위치를 알려주는 요소.

- F, Front Pointer : 리스트를 구성하는 최초의 노드 위치.

- Null Pointer, Nil Pointer : 다음 노드가 없음을 나타내는 포인터. 일반적으로 마지막 노드의 링크 부분에 0, ∧, \0 등의 기호 입력하여 표시.

Node

Data 부분 | Link 부분

- 노드는 자료를 저장하는 데이터 부분과 노드를 가리키는 포인터인 링크 부분으로 구성된 기억 공간.

Contiguous List

- 배열과 같이 연속되는 기억장소에 저장되는 자료 구조.

- 기억장소를 연속으로 배정받기 때문에 기억장소 이용 효율은 가장 좋다(밀도 1).

- 중간에 데이터 삽입하기 위해 연속된 빈 공간이 있어야 하며, 삽입/삭제 시 자료의 이동 필요.

Linked List

- 반드시 연속적으로 배열시키지는 않고 임의의 기억공간에 기억시키되, 자료 항목의 순서에 따라 노드의 포인터 부분을 이용하여 서로 연결시킨 자료 구조.

- 노드 삽입/삭제 작업 용이.

- 기억 공간이 연속적으로 놓여 있지 않아도 저장 가능.

- 링크(포인터) 부분이 필요하기 때문에 순차 리스트에 비해 기억 공간의 효율이 좋지 않음.

- 포인터를 찾는 시간이 필요해서 접근 속도 느림.

- 중간 노드 연결이 끊어지면 다음 노드 찾기 힘듦.

 

5. Stack

스택 : 리스트의 한쪽 끝으로만 자료의 삽입/삭제 작업이 이루어지는 자료 구조.

- 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO : Last In First Out).

- 모든 공간이 찬 상태에서 데이터가 삽입되면 Overflow 발생, 더 이상 삭제할 데이터가 없는 상태에서 삭제하면 Underflow 발생.

Top : 가장 마지막으로 삽입된 자료가 기억된 위치.

Bottom : 가장 밑바닥.

 

6. Queue

: 리스트의 한쪽에서는 삽입이 이루어지고, 다른 한쪽에서는 삭제 작업이 이루어지도록 구성한 자료 구조.

- 가장 먼저 삽입된 자료가 가장 먼저 삭제되는 선입선출(FIFO : First In First Out).

- 시작과 끝을 표시하는 두 개의 포인터.

- 운영체제의 작업 스케줄링에 사용.

F, Front 포인터 : 가장 먼저 삽입된 자료의 기억 공간을 가리키는 포인터, 삭제 작업을 할 때 사용.

R, Rear 포인터 : 가장 마지막에 삽입된 자료가 위치한 기억 공간을 가리키는 포인터, 삽입 작업할 때 사용.

 

7. Tree

트리 : 정점(Node)과 선분(Branch)을 이용하여 사이클을 이루지 않도록 구성한 Graph의 특수한 형태.

- 하나의 기억 공간을 Node라고 하며 , 노드와 노드를 연결하는 선을 Link라고 함.

   - 가족의 계보(족보), 조직도를 표현하기에 적합.

Node : 트리의 기본 요소로서 자료 항목과 다른 항목에 대한 Branch를 합친 것.

Root Node : 트리의 맨 위에 있는 노드.

Degree(차수) : 각 노드에서 뻗어 나온 가지의 수.

Terminal Node(단말 노드) = Leaf Node : 자식이 하나도 없는 노드, 즉 디그리가 0인 노드.

Son Node :  어떤 노드에 연결된 다음 레벨의 노드들.

Parent Node : 어떤 노드에 연결된 이전 레벨의 노드들.

Brother Node, Sibling : 동일한 부모를 갖는 노드들.

트리의 디그리 : 노드들의 디그리 중에서 가장 많은 수.


035 데이터저장소 / 데이터베이스 / DBMS

1. 데이터저장소

데이터저장소 : 데이터를 논리적인 구조로 조직화하거나, 물리적인 공간에 구축한 것.

- 논리 데이터저장소는 데이터 및 데이터 간의 연관성, 제약조건을 식별하여 논리적인 구조로 조직화한 것.

- 물리 데이터저장소는 논리 데이터저장소에 저장된 데이터와 구조들을 소프트웨어가 운용될 환경의 물리적 특성을 고려하여 하드웨어적인 저장장치에 저장한 것.

- 논리 데이터저장소를 거쳐 물리 데이터저장소를 구축하는 과정은 데이터베이스를 구축하는 과정과 동일.

 

2. 데이터베이스

데이터베이스 : 특정 조직의 업무를 수행하는 데 필요한 상호 관련된 데이터들의 모임.

Intergrated Data(통합된 데이터) : 중복을 배제한 데이터의 모임.

Stored Data(저장된 데이터) : 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료.

Operational Data(운영 데이터) : 업무 수행에 꼭 필요한 자료.

Shared Data : 여러 응용 시스템들이 공동으로 소유하고 있는 자료.

 

3. DBMS(DataBase Management System ; 데이터베이스 관리 시스템)

DBMS : 사용자와 데이터베이스 사이에서 요구에 따라 정보를 생성해주고, 데이터베이스를 관리해주는 소프트웨어.

- 기존의 파일 시스템이 갖는 종속성과 중복성의 문제를 해결하기 위한 시스템으로 모든 응용 프로그램들이 데이터베이스를 공용할 수 있도록 관리해줌.

- 데이터베이스의 구성, 접근 방법, 유지관리에 대한 모든 책임을 짐.

- Definition, Manipulation, Control 기능 필수.

- 정의 기능 : 모든 응용프로그램들이 요구하는 데이터 구조를 지원하기 위해 데이터베이스에 저장될 데이터의 형(Type)과 구조에 대한 정의, 이용 방식, 제약 조건 등을 명시하는 것.

- 조작 기능 : 검색, 갱신, 삽입, 삭제 등을 위해 인터페이스 수단을 제공.

- 제어 기능

    - 갱신, 삽입, 삭제 작업이 정확하게 수행되어 무결성이 유지되도록 제어.

    - Security 유지하고 Authority를 검사.

    - 여러 사용자가 동시에 접근하여 처리할 때 항상 정확성을 유지하도록 Concurrency Control(병행 제어) 할 수 있어야 함.

 

4. DBMS의 장단점

장점

- 논리적, 물리적 독립성 보장(DBMS의 궁극적인 목표).

- 중복 피할 수 있어서 기억 공간 절약.

- 저장된 자료 공동으로 이용.

- 데이터 일관성 유지.

- 데이터 무결성 유지.

- 보안 유지.

- 데이터 표준화 가능.

- 데이터 통합 관리 가능.

- 항상 최신의 데이터.

- 실시간 처리 가능.

단점

- 전문가 부족.

- 전산화 비용 증가.

- 대용량 디스크로의 집중적인 Access로 Overhead(과부하)가 발생.

- Backup과 Recovery가 어려움.

- 시스템이 복잡함.


036 데이터 입출력

1. 개요

- 단순 입력과 출력 뿐만 아니라 데이터를 조작하는 모든 행위. 이와 같은 작업을 위해 SQL(Structured Query Language) 사용.

- Data Mapping : 데이터 입출력을 소프트웨어에 구현하기 위해 개발 코드 내에 SQL 코드를 삽입하거나 객체와 데이터를 연결하는 것.

- Transaction : 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 수행되어야 할 일련의 연산들.

 

2. SQL(Structured Query Language)

SQL : 1974년 IBM 연구소에서 개발한 SEQUEL에서 유래. 국제표준 데이터베이스 언어로, 많은 회사에서 RDB(Relational DataBase, 관계형 데이터베이스)를 지원하는 언어로 채택하고 있음.

RDB : 2차원적인 표(Table)을 이용해서 데이터의 상호 관계를 정의하는 데이터베이스.

- 관계대수와 관계해석을 기초로한 혼합 데이터 언어.

관계대수 : 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해 어떻게 유도하는가를 기술하는 절차적인 언어.

관계해석 : 관계 데이터의 연산을 표현하는 방법. 원하는 정보를 정의할 때 계산 수식 사용.

- 질의어지만 데이터 구조의 정의 , 데이터 조작, 데이터 제어 기능을 모두 갖춤.

질의어(Query Language) : 단말 사용자들이 단말기를 통해서 대화식으로 쉽게 DB를 이용할 수 있도록 되어있는 비절차어의 일종.

    - DDL(Data Define Language, 데이터 정의어) : SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용.

    - DML(Data Manipulation Language, 데이터 조작어) : 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 실질적으로 처리하는 데 사용.

    - DCL(Data Control Language, 데이터 제어어) : 데이터 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는 데 사용.

 

3. Data Mapping

데이터 접속 : 프로그래밍 코드와 데이터베이스 데이터를 연결하는 것. 관련 기술로 SQL Mapping과  ORM 등이 있음.

- SQL Mapping : 코드 내에 SQL 직접 입력하여 DBMS에 접속하는 기술, 관련 프레임워크로 JDBC, ODBC, MyBatis 등이 있음.

- ORM(Object-Relational Mapping) : 객체지향 프로그래밍의 객체와 관계형 데이터베이스의 데이터를 연결하는 기술. 관련 프레임워크로 JPA, Hibernate, Django 등이 있음.

 

4. Transaction

트랜잭션 : DB의 상태를 변환시키는 하나의 논리적 기능을 수행하는 작업 단위 또는 한꺼번에 수행되어야 할 인련의 연산들.

- TCL(Transaction Control Language, 트랜잭션 제어어) : COMMIT, ROLLBACK, SAVEPOINT 등.

    - COMMIT : 변경 내용 데이터베이스에 반영하는 명령어.

    - ROLLBACK : 트랜잭션 처리가 비정상으로 종료되어 데이터베이스의 일관성이 깨졌을 때, 변경 작업 취소하는 연산.

    - SAVEPOINT(CHECKPOINT) : ROLLBACK할 위치 지정하는 명령어.


037 절차형 SQL

1. 개요

 절차형 SQL : C, JAVA 등의 프로그래밍 언어와 같이 연속적인 실행이나 분기, 반복 등의 제어가 가능한 SQL.

- 일반적인 프로그래밍 언어에 비해 효율은 떨어지지만, 단일 SQL 문장으로 처리하기 어려운 연속적인 작업들 처리하는 데 적합.

- 저장 모듈 생성 가능.

- BEGIN ~ END 형식으로 작성되는 Block 구조로 되어 있어 기능별 모듈화 가능.

    - Procedure : 특정 기능을 수행하는 일종의 트랜잭션 언어. 호출을 통해 실행되어 미리 저장해 놓은 SQL 작업 수행.

    - Trigger : 이벤트(데이터 입력, 갱신, 삭제 등)가 발생할 때마다 관련 작업이 자동으로 수행.

    - 사용자 정의 함수 : 프로시저와 유사하게 일련의 작업을 연속적으로 처리. 종료 시 예약어 Return을 사용하여 처리 결과를 단일값으로 반환.

 

2. 절차형 SQL의 테스트와 디버깅

- 테스트 전에 생성을 통해 Syntax Error(구문 오류)나 참조 오류 확인.

- 오류 메세지가 상세히 출력되지 않으므로 SHOW 명령어 사용.

- 디버깅은 실제로 데이터베이스에 변화를 줄 수 있는 삽입 및 변경 관련 SQL문을 주석 처리하고, 출력문을 통해 화면에 출력하여 확인.

 

3. 쿼리 성능 최적화

- ARM(Application Perfomance Management/Monitoring, 성능 측정 도구) 사용하여 최적화 할 쿼리 선정.

- Optimizer가 수립한 실행 계획을 검토하고 SQL 코드와 인덱스 재구성.

Optimizer : DBMS에 내장되어 작성된 SQL이 효율적으로 수행되도록 최적의 경로를 찾아 주는 모듈.