[정보처리기사 필기] 2-1. 데이터 입출력 구현
2020 시나공 정보처리기사 필기책 참고
주의! 중요도가 낮은 항목(C)은 제외
1. 자료구조 – A
- 자료 구조의 정의
- 자료의 표현과 그것과 관련된 연산
- 자료들을 조직하고 구조화하는 것
- 필요한 모든 연산들을 처리할 수 있음
- 프로그램 실행시간이 달라짐
- 자료 구조의 분류
- 선형 구조
- 배열
- 선형 리스트
- 연속 리스트
- 연결 리스트
- 스택
- 큐
- 데크
- 비선형 구조
- 트리
- 그래프
- 배열(Array)
- 동일한 자료형의 데이터들이 같은 크기로 나열되어 순서를 갖고 있는 집합
- 정적인 자료구조
- 기억장소 추가가 어려움
- 데이터 삭제 시 데이터가 저장되어 있던 기억장소가 빈 공간으로 남아있어 메모리 낭비 발생
- 첨자를 이용하여 데이터에 접근
- 반복적인 데이터 처리 작업에 적합한 구조
- 동일한 이름의 변수를 사용하여 처리가 간편
- 첨자의 개수에 따라 n차원 배열이라고 부름
- 선형 리스트(Linear List)
- 일정한 순서에 의해 나열된 자료 구조
- 배열을 이용하는 연속 리스트, 포인터를 이용하는 연결 리스트로 구분
@ 연속 리스트(Contiguous List)
- 연속되는 기억장소에 저장되는 자료 구조
- 기억장소 이용 효율은 밀도가 1로서 가장 좋음
- 데이터 삽입, 삭제 시 자료의 이동이 필요
@ 연결 리스트(Linked List)
- 자료들을 반드시 연속적으로 배열시키지 않고 노드의 포인터 부분을 이용해서 서로 연결
- 노드의 삽입, 삭제 작업이 용이
- 기억공간이 연속적으로 놓여있지 않아도 저장 가능
- 순차 리스트에 비해 기억 공간의 이용 효율이 좋지 않음
- 포인터를 찾는 시간이 필요해 접근 속도가 느림
- 중간 노드 연결이 끊어지면 그 다음 노드를 찾기 힘듬
- 스택(Stack)
- 리스트의 한쪽 끝으로만 자료의 삽입, 삭제가 이루어짐
- 후입선출(LIFO)
- 기억공간이 꽉 차있는 상태에서 삽입되면 Overflow 발생
- 기억공간이 비어있는 상태에서 삭제하면 Underflow 발생
- 삽입(PUSH), 삭제(POP), 마지막 삽입 자료(Top), 밑바닥(Bottom)
- 큐(Queue)
- 리스트의 한쪽에서는 삽입, 다른 한쪽에서는 삭제가 이루어짐
- 선입선출(FIFO)
- 시작과 끝을 표시하는 두 개의 포인터가 있음
- 프런트(F, Front) 포인터 : 가장 먼저 삽입된 자료의 기억공간을 가리킴. 삭제 작업
- 리어(R, Rear) 포인터 : 가장 마지막에 삽입된 자료의 기억공간을 가리킴. 삽입작업
- 운영체제의 작업 스케줄링에 사용
- 트리(Tree)
- 정점(Node)과 선분(Branch)을 이용하여 사이클을 이루지 않도록 구성한 그래프의 형태
- 하나의 기억공간을 노드(Node), 노드와 노드를 연결하는 선을 링크(Link)
- 가족의 계보, 조직도 등을 표현하기 적합
- 노드 : 자료 항목과 다른 항목에 대한 가지를 합친 것
- 근 노드(Root Node) : 트리의 맨 위에 있는 노드
- 차수(Degree) : 각 노드에서 뻗어 나온 가지의 수
- 단말 노드(Terminal Node) = 잎 노드(Leaf Node) : 자식이 하나도 없는 노드
- 자식 노드(Son Node) : 어떤 노드에 연결된 다음 레벨의 노드들
- 부모 노드(Parent Node) : 어떤 노드에 연결된 이전 레벨의 노드들
- 형제 노드(Brother Node, Sibling) : 동일한 부모를 갖는 노드들
- 트리의 차수 : 노드들의 차수 중에서 가장 많은 수
2. 데이터저장소 / 데이터베이스 / DBMS – A
- 데이터저장소
- 데이터들을 논리적인 구조로 조직화하거나, 물리적인 공간에 구축한 것
- 논리 데이터 저장소 : 데이터 간 연관성, 제약조건을 식별하여 논리적인 구조로 조직화
- 물리 데이터 저장소 : 물리적 특성을 고려하여 하드웨어적인 저장장치에 저장
- 데이터베이스를 구축하는 과정과 동일
- 데이터베이스
- 상호 관련된 데이터들의 모임
- 통합된 데이터(Integrated Data) : 중복을 배제한 데이터의 모임
- 저장된 데이터(Stored Data) : 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료
- 운영 데이터(Operational Data) : 조직의 고유한 업무를 수행하는 데 없어서는 안 될 자료
- 공용 데이터(Shared Data) : 공동으로 소유하고 유지하는 자료
- DBMS(DataBase Management System)
- 사용자의 요구에 따라 정보를 생성해주고, 데이터베이스를 관리해 주는 S/W
- 데이터의 종속성과 중복성의 문제를 해결
- 모든 응용 프로그램들이 DB를 공용할 수 있도록 관리
- DB의 구성, 접근 방법, 유지관리에 대한 모든 책임을 짐
- DBMS의 필수 기능
- 정의 기능 : 데이터 Type과 구조에 대한 정의, 이용 방식, 제약 조건 등을 명시
- 조작 기능 : 검색, 갱신, 삽입, 삭제 등의 인터페이스 수단을 제공
- 제어 기능 : 데이터의 무결성이 유지되도록 제어, 보안 유지, 권한 검사, 병행 제어
- 장점
- 데이터의 논리적, 물리적 독립성 보장
- 데이터의 중복을 피할 수 있어 기억 공간 절약
- 자료를 공동으로 이용할 수 있음
- 데이터의 일관성을 유지할 수 있음
- 데이터의 무결성을 유지할 수 있음
- 보안을 유지할 수 있음
- 데이터를 표준화 할 수 있음
- 통합 관리가 가능
- 최신의 데이터 유지 가능
- 실시간 처리 가능
- 단점
- DB 전문가 부족
- 전산화 비용 증가
- Overhead 발생
- Backup과 Recovery이 어려움
- 시스템이 복잡
- 데이터의 독립성
- 데이터의 독립성은 DBMS의 궁극적 목표
- 논리적 독립성 : 데이터의 논리적 구조를 변경해도 응용 프로그램은 변경되지 않음
- 물리적 독립성 : 응용 프로그램에는 영향을 주지 않고, 데이터의 물리적 구조만을 변경
3. 데이터 입출력 – B
- 데이터 입출력 개요
- DB에 데이터를 입력하거나 출력하는 작업
- 데이터를 조작하는 모든 행위를 의미. SQL 사용
- 개발 코드 내에 SQL 코드를 삽입하거나, 객체와 데이터를 연결하는 데이터 접속(Data Mapping)
- 논리적 기능을 수행하기 위한 작업의 단위 또는 한번에 수행되야 할 연산들을 트랜잭션이라고 함
- SQL(Structured Query Language)
- 많은 회사에서 관계형 데이터베이스(RDB)를 지원하는 언어로 채택
- 관계대수와 관계해석을 기초로 한 혼합 데이터
- 질의어지만 질의 기능뿐만 아니라, 데이터 구조 정의, 조작, 제어기능을 모두 갖춤
- 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 구분
- DDL : SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의, 변경, 삭제
- DML : 저장된 데이터를 실질적으로 처리
- DCL : 보안, 무결성, 회복, 병행수행 제어 등을 정의하는데 사용
- 데이터 접속(Data Mapping)
- 프로그래밍 코드와 DB의 데이터를 연결하는 것
- SQL Mapping : 코드 내에 SQL을 직접 입력하여 DBMS 객체에 접속. JDBC, ODBC, MyBatis
- ORM(Object-Relational Mapping) : 객체와 RDB의 데이터를 연결. JPA, Hibernate, Django
- 트랜잭션(Transaction)
- DB 상태를 변환시키는 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 수행돼야 할 연산
- TCL : 트랜잭션을 제어하기 위한 명령어. COMMIT, ROLLBACK, SAVEPOINT
- COMMIT : 트랜잭션이 수행한 변경 내용을 DB에 저장
- ROLLBACK : 모든 변경 작업을 취소하고 이전 상태로 되돌림
- SAVEPOINT(=CHECKPOINT) : ROLLBACK 할 저장점을 지정
4. 절차형 SQL – B
- 절차형 SQL 개요
- 프로그래밍 언어와 같이 연속적인 실행이나 분기, 반복 등의 제어가 가능한 SQL
- 프로그래밍 언어에 비해 효율은 떨어지지만, 연속적인 작업들을 처리하는데 적합
- 다양한 기능을 수행하는 저장 모듈 생성할 수 있음
- DBMS 엔진에서 직접 실행돼 입출력 패킷이 적은 편
- BEGIN ~ END 형식의 블록 구조로 되어 있어 기능별 모듈화 가능
- 프로시저 : 트랜잭션 언어, 호출을 통해 실행되어 미리 저장해 놓은 SQL 작업 수행
- 트리거 : 이벤트가 발생할 때마다 관련 작업이 자동으로 수행
- 사용자 정의 함수 : 예약어 RETURN을 사용하여 처리 결과를 단일값으로 반환
- 절차형 SQL의 테스트와 디버깅
- 디버깅을 통해 기능의 적합성 여부를 검증, 실행을 통해 결과를 테스트
- 테스트 전에 생성을 통해 구문 오류나 참조 오류의 존재 여부 확인
- SHOW 명령어를 통해 내용을 확인하고 문제를 수정
- 디버깅을 통해 로직을 검증하고, 결과를 통해 최종적으로 확인
- DB에 변화를 줄 수 있는 삽입 등의 SQL 문을 주석으로 처리하고, 출력문을 이용해 확인
- 쿼리 성능 최적화
- 데이터 입출력 애플리케이션의 성능 향상을 위해 SQL 코드를 최적화
- 성능 측정 도구인 APM을 사용하여 최적화 할 쿼리 선정
- 옵티마이저가 수립한 실행 계획을 검토하고 SQL 코드와 인덱스 재구성
댓글남기기