Chapter 01. 데이터 입출력 구현
1. 논리 데이터 저장소 확인
(1) 자료 구조
자료 구조(Data Structure)의 개념
자료 구조는 컴퓨터상 자료를 효율적으로 저장하기 위해 만들어진 논리적인 구조이다.
자료 구조의 분류
구조 | 설명 | 종류 |
선형 구조 | 데이터를 연속적으로 연결한 자료 구조 | 리스트, 스택, 큐, 데크 |
비선형 구조 | 데이터를 비연속적으로 연결한 자료 구조 | 트리, 그래프 |
선형 구조
① 리스트(List)
개념 | 설명 |
선형 리스트 (Linear List) |
배열과 같이 연속되는 기억 장소에 저장되는 리스트 선형 리스트의 대표적인 구조로는 배열(Array) 등이 있음 자료의 삽입, 삭제 시 기존 자료의 이동이 필요하며 접근 구조가 빠름 |
연결 리스트 (Linked List) |
노드의 포인터 부분으로 서로 연결시킨 리스트 노드의 삽입, 삭제가 선형 리스트와 달리 편리 포인터를 통해 찾는 시간이 추가되어 선형 리스트에 비해 느림 |
② 스택(Stack)
스택은 한 방향으로만 자료를 넣고 꺼낼 수 있는 LIFO(Last-In First-Out) 형식의 자료 구조이다.
스택 연산
연산 | 설명 |
PUSH | 데이터를 차례대로 스택에 넣는 연산 |
POP | 스택에서 가장 위에 있는 데이터를 하나씩 꺼내는 연산 |
③ 큐
큐는 한쪽 끝에서는 삽입 작업이 이뤄지고, 반대쪽 끝에서는 삭제 작업이 이루어지는 FIFO(First-In First-Out) 형식의 자료 구조이다.
연산 | 설명 |
ENQUEUE | 데이터를 차례대로 넣는 연산 |
DEQUEUE | 처음 저장된 데이터부터 하나씩 꺼내는 연산 |
④ 데크
데크는 큐의 양쪽 끝에서 삽입과 삭제를 할 수 있는 자료 구조이다.
연산 | 설명 |
PUSH | 데이터를 차례대로 데크에 넣는 연산 |
POP | 데크에서 Front와 Rear에 있는 데이터를 하나씩 꺼내는 연산 |
비선형 구조
① 트리
트리는 데이터들을 계층화시킨 자료 구조이다.
인덱스를 조작하는 방법으로 가장 많이 사용하는 구조이다.
배열과 달리 노드들이 포인터로 연결되어 노드의 상한선이 없다.
용어 | 설명 |
루트 노드(Root Node) | 트리에서 부모가 없는 최상위 노드 {A} |
단말 노드(Leaf Node) | 자식이 없는 노드, 트리의 가장 말단에 위치 {F, G, H, E, C} |
레벨(Level) | 루트 노드를 기준으로 특정 노드까지의 경로 길이 E의 레벨 3 |
조상 노드(Ancestor Node) | 특정 노드에서 루트에 이르는 경로상 모든 노드 D의 조상 노드는 {B, A} |
자식 노드(Child Node) | 특정 노드에 연결된 다음 레벨의 노드 B의 자식 노드는 {D, E} |
부모 노드(Parent Node) | 특정 노드에 연결된 이전 레벨의 노드 F의 부모 노드는 {D} |
형제 노드(Sibling) | 같은 부모를 가진 노드 F의 형제 노드는 {G, H} |
깊이(Depth) | 루트 노드에서 특정 노드에 도달하기 위한 간선의 수 트리의 깊이는 3 |
차수(Degree) | 특정 노드에 연결된 자식 노드의 수 D의 차수는 3 |
② 트리 순회방법
구분 | 개념도 | 순회방법 |
전위 순회 (Pre-Order Traversal) |
C L R 전위 순회 C > L > R 순으로 조회 |
Root > Left >Right 순으로 방문 |
중위 순회 (In-Order Traversal) |
C L R 중위 순회 L > C > R 순으로 조회 |
Left > Root >Right 순으로 방문 |
후위 순회 (Post-Order Traversal) |
C L R 후위 순회 L > R > C 순으로 조희 |
Left > Right > Root 순으로 방문 |
③ 이진트리
이진트리는 차수(Degree)가 2 이하인 노드로 구성되어 자식이 둘 이하로 구성된 트리이다.
이진 트리 유형
구분 | 설명 |
포화 이진 트리 (Full Binary Tree) |
모든 레벨에서 노드가 꽉 채워진 트리 |
완전 이진 트리 (Complete Binary Tree) |
마지막 레벨을 제외하고 노드가 채워진 트리 |
편향 이진 트리 (Skewed Binary Tree) |
노드의 왼쪽이나 오른쪽 한 곳만 노드가 존재하는 트리 |
④ 그래프
그래프 노드(Node)와 노드를 연결하는 간선(Edge)을 하나로 모아 놓은 자료 구조이다.
그래프의 유형
유형 | 설명 |
방향 그래프 | 정점을 연결하는 선에 방향이 있는 그래프 n개의 장점으로 구성된 방향 그래프의 최대 간선 수는 n(n-1) |
무방향 그래프 | 정점을 연결하는 선에 방향이 없는 그래프 n개의 정점으로 구성된 무방향 그래프의 최대 간선 수는 n(n-1)/2 |
그래프의 표현방법
그래프 G = (V, E)
V(G) = 정점(Vertices)
E(G) = 간선(Edges)
그래프 용어 정리
용어 | 설명 |
경로(Path) | 임의 정점에서 다른 정점으로 이르는 길 |
경로 길이(Path Length) | 경로상 있는 간선의 수 |
단순 경로(Simple Path) | 한 경로의 모든 간선이 다를 때의 경로 |
사이클(Cycle) | 동일 정점에서 시작과 끝이 이어지는 경로 |
(2) 논리 데이터 저장소
논리 데이터 저장소의 개념
업무를 모델링 표기법으로 형상화한 데이터의 저장소이다.
논리 데이터 저장소 구조 = 개속관
구조 | 설명 | 표기 |
개체(Entity) | 관리할 대상이 되는 실체 | □ |
속성(Attribute) | 관리할 정보의 구체적 항목 | ○ |
관계(Relationship) | 개체 간의 대응 관계 | ◇ |
2. 물리 데이터 저장소 설계
(1) 물리 데이터 저장소
물리 데이터 저장소의 개념
물리 데이터 저장소는 논리 데이터 모델을 사용하고자 하는 각 DBMS의 특성을 고려하여 데이터베이스 저장 구조로 변환하기 위한 데이터 저장소이다.
물리 데이터 저장소 모델 변환
순서 | 변환 단계 | 수행 |
1 | 단위 개체를 테이블로 변환 | 개체는 한글명을 사용 |
2 | 속성을 컬럼으로 변환 | 개발자와 사용자 간 의사소통을 위해 표준화된 약어를 사용하도록 권고 |
3 | UID를 기본 키로 변환 | 개체의 UID에 해당하는 모든 속성에 대해 기본 키로 선언 |
4 | 관계를 외래 키로 변환 | 외래 키 명은 기본 키 이름을 그대로 사용하나 다른 의미를 가질 경우 변경 가능 |
5 | 컬럼 유형과 길이 정의 | CHAR 최대 2000바이트의 고정 길이 문자열 저장 가능 VARCHAR2 최대 4000바이트의 가변 길이 문자열 저장 가능 NUMBER 38 자릿수의 숫자 저장 가능 DATE 날짜 값을 저장 BLOB, CLOB 바이너리, 텍스트 데이터 최대 4GB까지 저장 |
6 | 반 정규화 수행 | 1:1 관계, 1:M 관계를 통합하여 조인 횟수를 줄여 성능 향상 슈퍼타입/서브타입 테이블 통합 통해 성능 향상 |
① 물리 데이터 저장소 구성
제약조건 | 옵션 | 설명 |
삭제 제약 조건 (Delete Constraint) |
연쇄(Cascade) | 참조한 테이블에 있는 외부 키와 일치하는 모든 Row가 삭제 |
제한(Restricted) | 참조한 테이블에 있는 외부 키에 없는 것만 삭제 가능 | |
무효(Nullify) | 참조한 테이블에 정의된 외부 키와 일치하는 것을 Null로 수정 | |
갱신 제약 조건 (Update Constraint) |
연쇄(Cascade) | 참조한 테이블에 있는 외부 키와 일치하는 모든 Row가 수정 |
제한(Restricted) | 참조한 테이블에 있는 외부 키에 없는 것만 수정가능 | |
무효(Nullify) | 참조한 테이블에 정의된 외부 키와 일치하는 것을 Null로 수정 |
② 인덱스(Index) 설계
분포도 = (1 / (컬럼 값의 종류)) * 100
분포도 = (컬럼 값의 평균 Row 수) / (테이블의 총 Row 수) * 100
③ 뷰(View) 설계
속성 | 설명 |
REPLACE | 뷰가 이미 존재하는 경우 재생성 |
FORCE | 기본 테이블의 존재 여부에 관계 없이 뷰 생성 |
NOFORCE | 기본 테이블이 존재할 때만 뷰 생성 |
WITH CHECK OPTION | 서브 쿼리 내의 조건을 만족하는 행만 변경 |
WITH READ ONLY | 데이터 조작어 작업 불가 |
④ 파티션(Partition) 설계
파티션의 종류 = 레해리컴
종류 | 설명 |
범위 분할 (레인지 파티셔닝 : Range Partitioning) |
분할 키값이 범위 내에 있는지 여부를 구분하는 분할 기법 |
해시 분할 (해시 파티셔닝 : Hash Partitioning) |
해시 함수의 값에 따라 파티션에 포함할지 여부를 결정하는 분할 기법 |
목록 분할 (리스트 파티셔닝 : List Partitioning) |
값 목록에 파티션을 할당하고 분할 키값을 그 목록에 맞게 분할하는 기법 |
조합 분할 (컴포지트 파티셔닝 : Composite Partitioning) |
범위 분할, 해시 분할, 목록 분할 중 2개 이상의 분할 기법을 결정하는 기법 |
파티션의 장점 = 성가백합
속성 | 설명 |
성능 향상 | 데이터 액세스 범위를 줄여 성능 향상 |
가용성 향상 | 전체 데이터의 훼손 가능성이 감소 및 데이터 가용성 향상 |
백업 가능 | 분할 영역을 독립적으로 백업하고 복구 가능 |
경합 감소 | 디스크 스트라이핑으로 입출력 성능을 향상 디스크 컨트롤러에 대한 경합의 감소 |
(2) ORM 프레임워크
ORM(Object-Relational Mapping) 프레임워크의 개념
관계형 데이터베이스와 객체지향 프로그래밍 언어 간 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다.
ORM 프레임워크의 기술
유형 | 기술 | 설명 |
SQL Mapping | iBatis | SQL에 기반한 데이터베이스와 자바 등을 연결시켜주는 역할을 하는 개발 프레임워크 |
MyBatis | 객체지향 언어인 자바의 관계형 DB 프로그래밍을 좀 더 쉽게 할 수 있게 도와주는 개발 프레임워크 | |
OR Mapping | Hibernate | 자바 언어를 위한 객체 관계 매핑 프레임워크 |
ORM 종류
구분 | 부분적 ORM | 완전 OPM |
개요 | SQL을 특정 이름으로 정의하여 사용 | 내부 엔진에서 SQL 자동생성 |
매퍼 사용 | SQL Mapper | Object Relation Mapper |
방법 | iBatis, MyBatis, Embeded SQL | Hibernate |
장점 | 데이터 전송 방식의 효율성 | 효율적인 매핑 기법 |
(3) 트랜잭션 인터페이스
트랜잭션 인터페이스는 데이터베이스 트랜잭션의 입출력과 기능 형태를 정의한 인터페이스이다.
트랜잭션 인터페이스 특징
특징 | 설명 |
원자성(Atomicity) | 트랜잭션 연산을 데이터베이스 모두에 반영 또는 반영하지 말아야 함(All or Nothing) |
일관성(Consistency) | 트랜잭션이 실행을 성공적으로 완료할 시 일관성 있는 데이터베이스 상태를 유지 |
격리성(Isolation) | 둘 이상 트랜잭션 동시 실행 시 한 개의 트랜잭션만 접근이 가능하여 간섭 불가 |
영속성(Durability) | 성공적으로 완료된 트랜잭션 결과는 영구적으로 반영됨 |
3. 데이터 조작 프로시저 작성
(1) 프로시저
프로시저는 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다.
절차형 데이터 조작 프로시저
① Oracle 기반 PL/SQL 개념
표준 SQL을 기본으로 Oracle에서 개발한 데이터 조작 언어이다.
② PL/SQL 장점
장점 | 설명 |
컴파일 불필요 | 컴파일 없이 스크립트 생성 및 변경 후 실행 가능 |
모듈화 가능 | 블록 내에서 논리적으로 관련된 문장 그룹화 가능 |
절차적 언어 사용 | 데이터베이스의 테이블과 레코드를 기반으로 하는 동적변수 선언 가능 |
에러 처리 | 예외처리 루틴을 이용한 에러 처리 가능 |
③ PL/SQL 구성
구성 | 설명 |
선언부(Declare) | 실행부에서 참조할 모든 변수, 상수, CURSOR, EXCEPTION 선언 |
실행부(Begin/End) | BEGIN과 END 사이에 기술되는 영역 데이터를 처리할 SQL 문과 PL/SQL 블록을 기술 |
예외부(Exception) | 실행부에서 에러가 발생했을 때 문장 기술 |
④ PL/SQL을 활용한 저장형 객체 활용 = 프함패트
구분 | 설명 |
저장된 프로시저 |
일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합 CREATE OR REPLACE 구문을 사용 |
저장된 함수 | 반드시 반환할 값의 데이터 타입을 return 문에 선언 |
저장된 패키지 | 프로시저나 함수를 효율적으로 관리하기 위한 집합 패키지나 선언부와 본문으로 구분 |
트리거 | 특정 테이블에서 삽입, 수정, 삭제 등의 데이터 변경 이벤트가 발생 시 DBMS에서 자동적으로 실행되도록 구현된 프로그램 |
(2) 프로그램 디버깅
프로그램 디버깅은 프로시저가 입력 자료를 받아 출력을 올바르게 도출하는지에 관한 확인 과정이다.
(3) 단위 테스트 도구
단위 테스트 도구는 단위 테스트에서 구현된 프로시저의 적합성을 확인하기 위한 도구이다.
4. 데이터 조작 프로시저 최적화
(1) 쿼리 성능 측정
데이터베이스에서 프로시저에 있는 SQL 실행 계획을 분석, 수정을 통해 최소의 시간으로 원하는 결과를 얻도록 프로시저를 수정하는 사전 작업이다.
SQL 성능 개선 절차
순서 | 절차 |
1 | 문제 있는 SQL 식별 |
2 | 옵티마이저 통계 확인 |
3 | SQL 문 재구성 |
4 | 인덱스 재구성 |
5 | 실행계획 유지관리 |
(2) 소스 코드 인스펙션
소스 코드 인스펙션의 개념
데이터베이스 성능 향상을 위하여 프로시저 코드를 보면서 성능 문제점을 개선해 나가는 활동이다.
SQL 코드 인스펙션 대상
인스펙션 대상 | 설명 |
미사용 변수 | 프로시저에서 선언은 되었지만 본문에서는 전혀 사용되지 않는 변수 |
미사용 서브쿼리 | 컬럼이 선언은 되었지만 외부 쿼리에서 참조가 되지 않음 |
Null 값 비교 | Null 값과 비교하는 프로시저 소스가 있는 경우 |
과거의 데이터 타입 사용 | 데이터 타입이 바뀌었지만 과거의 타입을 그대로 쓰는 소스가 있는 경우 |
SQL 코드 인스펙션 절차
순서 | 절차 | 설명 |
1 | 계획 단계 | 문제되는 SQL 코드 식별 문제점 인식 및 인스펙션 참여자 설정 |
2 | 개관 단계 | SQL 코드 문제점 공유 계획 및 방법 공유 |
3 | 준비 단계 | 개별 SQL 소스 코드 분석, 문제점 확인 |
4 | 검사 단계 | 공식적인 SQL 인스펙션 수행 문제점 토의 |
5 | 재작업 단계 | SQL 소스 코드 수정 및 실행 시간 재측정 |
6 | 추적 단계 | 팔로우 업, 개선 효과 분석 |
https://book.naver.com/bookdb/book_detail.nhn?bid=15910265
수제비 정보처리기사 필기
NCS 모듈제작에 참여한 경험을 기반으로, 다양한 모듈에서 시험 출제 빈도를 분석하여 출제 비중이 높은 내용 위주로 구성했다. 출제 비중이 낮고 이해하기 어려운 개념들은 과감하게 제외함으
book.naver.com
Ps. 2주차 Chapter 01 끝!
'IT 자격증 > 정보처리기사' 카테고리의 다른 글
정보처리기사 필기 2주차 Day-3 정리 (0) | 2021.07.17 |
---|---|
정보처리기사 필기 2주차 Day-2 정리 (0) | 2021.07.16 |
정보처리기사 필기 1주차 Day-4 정리 (0) | 2021.07.13 |
(추가)정보처리기사 필기 1주차 Day-3 정리(추가) (0) | 2021.07.12 |
정보처리기사 필기 1주차 Day-2 정리 (0) | 2021.07.11 |