일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- package.json
- javascript
- collapsing-margins
- classList
- confirm()
- grid-row-start
- mongodb
- valuable
- variables
- python #qqplot #qq-plot #code
- box-shadow
- className
- scope
- javascipt
- grid-template-areas
- Grid
- border-style
- gird-row-end
- grid-column-end
- CSS
- createElement
- foreach()
- css#cascading#display#block#inline
- relative
- localStorage
- prompt()
- React
- var
- react-hook-form
- grid-column-start
- Today
- Total
data life
[정처기 실기] 2. 데이터 입출력 구현 본문
2. 데이터 입출력 구현
2-1. 데이터 전환
데이터 전환
- 운영 중인 기본 정보 시스템에 축적된 데이터를 추출하여 새로 개발할 정보 시스템에서 운영할 수 있도록 변환한 후, 적재하는 과정
- ETL (Extraction, Transformation, Load)
- Data Migration(데이터 이행, 데이터 이관) 이라고도 한다.
데이터 전환 계획서
- 데이터 전환에 필요한 모든 계획을 기록하는 문서
- 항목
- 개요
- 데이터 전환 대상 및 범위
- 환경 구성
- 조직 및 역할
- 일정
- 방안
- 데이터 정비 방안
- 비상 계획
- 데이터 복구 대책
2-2. 데이터 검증
데이터 검증
- 원천 시스템의 데이터 -> 목적 시스템의 데이터로 전환하는 과정이 정상적으로 수행되었는지 확인하는 과정
- 검증 방법 & 검증 단계에 따라 분류
검증 방법에 따른 분류
검증 방법 | 내용 |
로그 검증 | 데이터 전환 과정에서 작성하는 ETL 로그를 검증 |
기본 항목 검증 | 로그 검증 이외에 별도로 요청된 검증 항목을 검증 |
응용 프로그램 검증 | 응용 프로그램으로 데이터 전환의 정합성을 검증 |
응용 데이터 검증 | 사전 정의된 업무 규칙을 기준으로 데이터 전환의 정합성을 검증 |
값 검증 | 숫자 항목의 합계, 코드 데이터의 범위, 속성 변경에 따른 값 검증 |
검증 단계에 따른 분류
검증 방법 | 목적 | 검증 방법 |
추출 | 원천 시스템 데이터에 대한 정합성 확인 | 로그 검증 |
전환 | 매핑 정의서대로 반영되었는지 확인 매핑 정의서 오류 여부 확인 |
로그 검증 |
DB 적재 | SAM 파일을 적재하는 과정에서 발생할 수 있는 오류나 데이터 누락 여부 등 확인 | 로그 검증 |
DB 적재 후 | 적재 완료 후 정합성 확인 | 기본 항목 검증 |
전환 완료 후 | 추가 검증 과정을 통해 데이터 전환 정합성 검증 | 응용 프로그램 검증 응용 데이터 검증 |
2-3. 오류 데이터 측정 및 정제
오류 데이터 측정 및 정제
- 고품질의 데이터를 운영 및 관리하기 위해 수행
- 진행과정
- 데이터 품질 분석 : 오류 데이터를 찾기 위해 원천 및 목적 시스템 데이터의 정합성 여부를 확인
- 오류 데이터 측정 : 정상 데이터와 오류 데이터의 수를 측정하여 오류 관리 목록 작성
- 오류 데이터 정제 : 오류 관리 목록의 각 항목을 분석하여 원천 데이터 정의 및 전환 프로그램 수정
오류 상태
상태 | 내용 |
Open | 오류 보고만 된 상태 (분석❌) |
Assigned | 개발자에게 오류를 전달한 상태 (for 오류 영향 분석 및 수정) |
Fixed | 개발자가 오류를 수정한 상태 |
Closed | 수정된 오류에 대해 테스트를 다시하고 오류가 발견되지 않은 상태 |
Deferred | 오류 수정 연기 상태 |
Classified | 보고된 오류가 오류가 아니라고 확인된 상태 |
데이터 정제 요청서
- 데이터 정제와 관련된 전반적 내용을 문서로 작성
- 오류 관리 목록을 기반으로 데이터 정제 요건 목록을 작성하고, 이 목록의 항목별로 데이터 정제 요청서를 작성
데이터 정제 보고서
- 데이터 정제 요청서를 통해 정제된 원천 데이터가 정상적으로 정제되었는지 확인한 결과를 문서로 작성
2-4. 데이터베이스 개요
데이터 저장소
- 논리 데이터 저장소 : 데이터 및 데이터 간 연관성, 제약 조건을 식별하여 논리적인 구조로 조직화한 것
- 물리 데이터 저장소 : 논리 데이터 저장소를 소프트웨어가 운용될 환경의 물리적 특성을 고려하여 실제 저장장치에 저장한 것
데이터베이스 (Database)
- 여러 사람에 의해 공동으로 사용될 데이터의 중복을 배제하여 통합하고, 쉽게 접근하여 처리할 수 있도록 저장장치에 저장하여 항상 사용할 수 있도록 운영하는 운영 데이터
- 분류
- 통합 데이터 (Integrated Data) : 자료의 중복을 배제한 데이터의 모임
- 저장 데이터 (Stored Data) : 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료
- 운영 데이터 (Operational Data) : 조직의 고유한 업무를 수행하는 데 반드시 필요한 자료
- 공용 데이터 (Shared Data) : 여러 응용 시스템들이 공동으로 소유하고 유지하는 자료
DBMS (DataBase Management System : 데이터베이스 관리 시스템)
- 사용자의 요구에 따라 정보를 생성해주고 데이터베이스를 관리해주는 소프트웨어
- 데이터의 종속성과 중복성의 문제를 해결하기 위함
- 필수 기능 3가지
⭐️ 정의 기능 : 데이터의 형과 구조에 대한 정의, 이용 방식, 제약 조건 등을 명시하는 기능
⭐️ 조작 기능 : 데이터 검색, 갱신, 삽입, 삭제 등을 위해 인터페이스 제공
⭐️ 제어 기능 : 데이터의 무결성, 보안, 권한 검사, 병행 제어를 제공
데이터의 독립성
- 논리적 독립성
: 응용 프로그램과 데이터베이스를 독립
=> 데이터의 논리적 구조를 변경하여도 응용 프로그램은 영향받지 않음
- 물리적 독립성
: 응용 프로그램과 보조기억장치 같은 물리적 장치를 독립
=> 디스크 추가 / 변경하여도 응용 프로그램은 영향받지 않음
스키마 (Schema)
- 데이터베이스의 구조와 제약 조건에 전반적인 명세를 기술한 것
- 종류
종류 | 내용 |
외부 스키마 | 사용자나 응용 프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의 |
개념 스키마 | 데이터베이스의 전체적인 논리적 구조로 하나만 존재한다. |
내부 스키마 | 물리적 저장장치 입장에서 본 데이터베이스 구조 실제 저장될 레코드의 형식, 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타냄 |
2-5. 데이터베이스 설계
데이터베이스 설계
- 사용자의 요구를 분석하여 컴퓨터에 저장할 수 있는 데이터베이스의 구조에 맞게 변형한 후, DBMS로 데이터베이스를 구현하여 일반 사용자들이 사용하게 하는 것
데이터베이스 설계 시 고려사항
항목 | 내용 |
무결성 | 삽입, 삭제, 갱신 등 연산 후에도 데이터베이스에 저장된 데이터가 정해진 제약 조건을 항상 만족해야 한다 |
일관성 | 데이터베이스에 저장된 데이터들 사이, 특정 질의에 대한 응답 등이 처음부터 끝까지 변함없이 일정해야 한다 |
회복 | 시스템 장애 발생 시, 장애 발생 직전 상태로 복구할 수 있어야 한다 |
보안 | 불법적인 데이터의 노출, 변경, 손실로부터 보호할 수 있어야 한다 |
효율성 | 응답시간의 단축, 시스템의 생산성, 저장 공간의 최적화가 가능해야 한다 |
데이터베이스 확장 | 데이터베이스 운영에 영향을 주지 않으면서 지속적으로 데이터를 추가할 수 있어야 한다 |
데이터베이스 설계 순서
요구 조건 분석 | - 데이터베이스를 사용할 사람들로부터 필요한 용도를 파악 - 요구 조건 명세서 작성 |
개념적 설계 (정보 모델링, 개념화) | - 개념 스키마, 트랜잭션 모델링, E-R 모델 - 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정 |
논리적 설계 (데이터 모델링) | - 컴퓨터가 이해하고 처리할 수 있는 물리적 저장장치에 저장하도록 변환하기 위해 특정 DBMS가 지원하는 논리적 자료 구조로 변환(Mapping)시키는 과정 - 목표 DBMS에 맞는 논리 스키마 설계, 트랜잭션 인터페이스 설계 |
물리적 설계 (데이터 구조화) | - 목표 DBMS에 맞는 물리적 구조의 데이터로 변환 - 데이터베이스 파일의 저장 구조 및 액세스 경로 결정 |
데이터베이스 구현 | - 논리적 설계와 물리적 설계에서 도출된 데이터베이스 스키마를 파일로 생성 - 목표 DBMS의 DDL(데이터 정의어)로 데이터베이스 생성, 응용 프로그램을 위한 트랜잭션 작성 |
2-6. 데이터 모델의 개념
데이터 모델
- 현실 세계의 정보들을 컴퓨터에 표현하기 위해 단순화, 추상화하여 체계적으로 표현한 개념적 모형
구성 요소
- 개체
- 속성
- 관계
종류
- 개념적 데이터 모델 : 현실 세계에 존재하는 개체를 인간이 이해할 수 있는 정보 구조로 표현 (= 정보 모델)
대표적으로 E-R 모델이 있다.
- 논리적 데이터 모델 : 개념적 모델링에서 얻은 개념적 구조를 컴퓨터 세계에 맞도록 변환 (= 데이터 모델)
데이터 간의 관계를 어떻게 표현하느냐에 따라 관계 모델, 계층 모델, 네트워크 모델로 구분
- 물리적 데이터 모델
표시할 요소
- 구조
- 연산
- 제약 조건
2-7. 데이터 모델의 구성 요소
개체 (Entity)
- 데이터베이스에 표현하려는 것, 개념이나 정보 단위 같은 현실 세계의 대상체
- 독립적으로 존재하나 그 자체로서도 구별이 가능, 유일한 식별자에 의해 식별된다.
- 다른 개체와 하나 이상의 관계가 있다.
속성 (Attribute)
- 데이터베이스를 구성하는 가장 작은 논리적 단위
- 데이터 항목 또는 데이터 필드에 해당
- 개체를 구성하는 항목으로 개체의 특성을 기술
- 속성의 수를 차수(Degree)라고 한다.
- 속성은 속성의 특성과 개체 구성 방식에 따라 분류
속성의 특성에 따른 분류
분류 | 내용 |
기본 속성 (Basic Attribute) |
- 업무 분석을 통해 정의한 속성 - 속성 중 가장 많고 일반적임 |
설계 속성 (Designed Attribute) |
- 원래 업무상 존재하지 않고, 설계 과정에서 도출해내는 속성 - 업무를 규칙화하려고 속성을 새로 만들거나 변형하여 정의하는 속성 |
파생 속성 (Derived Attribute) |
- 다른 속성으로부터 계산이나 변형 등의 영향을 받아 발생하는 속성 - 되도록 적게 정의하는 것이 좋음 |
속성의 개체 구성 방식에 따른 분류
분류 | 내용 |
기본키 속성 (Primary Key Attribute) |
개체를 유일하게 식별할 수 있는 속성 |
외래키 속성 (Foreign Key Attribute) |
다른 개체와의 관계에서 포함된 속성 |
일반 속성 | 개체에 포함되어 있고 기본키, 외래키에 포함되지 않은 속성 |
관계 (Relationship)
- 개체와 개체 사이의 논리적인 연결
- 개체 간의 관계 & 속성 간의 관계
관계의 형태
형태 | 내용 |
1 : 1 | 개체 집합 A의 각 원소가 개체 집합 B의 원소 한개와 대응하는 관계 |
1 : N | 개체 집합 A의 각 원소는 개체 집합 B의 원소 여러 개와 대응하지만 개체 집합 B의 각 원소는 개체 집합 A의 원소 한개와 대응하는 관계 |
N : M | 개체 집합 A의 각 원소는 개체 집합 B의 원소 여러 개와 대응하고, 개체 집합 B의 각 원소도 개체 집합 A의 원소 여러 개와 대응하는 관계 |
관계의 종류
종류 | 내용 |
종속 관계 | - 두 개체 사이의 주종 관계를 표현 - 식별 관계 & 비식별 관계 |
중복 관계 | 두 개체 사이에 2번 이상의 종속 관계가 발생하는 관계 |
재귀 관계 | 개체가 자기 자신과 관계를 갖는 것 (순환 관계) |
배타 관계 | - 개체의 속성이나 구분자를 기준으로 개체의 특성을 분할하는 관계 - 배타 AND 관계와 배타 OR 관계 |
2-8. 식별자 (Identifier)
식별자 (Identifier)
- 하나의 개체 내에서 각각의 인스턴스를 유일하게 구분할 수 있는 구분자
- 모든 개체는 하나 이상의 식별자를 반드시 가져야 한다.
식별자의 분류
분류 | 식별자 |
대표성 여부 | - 주 식별자 : 개체를 대표하는 유일한 식별자 - 보조 식별자 : 주 식별자를 대신하여 개체를 식별할 수 있는 속성 |
스스로 생성 여부 | - 내부 식별자 : 개체 내에서 스스로 만들어지는 식별자 - 외부 식별자 : 다른 개체와의 관계에 의해 외부 개체의 식별자를 가져와 사용하는 식별자 |
단일 속성 여부 | - 단일 식별자 : 주 식별자가 한 가지 속성으로만 구성된 식별자 - 복합 식별자 : 주 식별자가 두 개 이상의 속성으로 구성된 식별자 |
대체 여부 | - 원조 식별자 : 업무에 의해 만들어지는 가공되지 않은 원래 식별자 - 대리 식별자 : 주 식별자의 속성이 2개 이상인 경우 하나의 속성으로 묶어 사용하는 식별자 |
후보 식별자
- 개체에서 각 인스턴스를 유일하게 식별할 수 있는 속성 또는 속성 집합
- 하나의 개체에는 한 개 이상의 후보 식별자가 존재할 수 있으며, 이 중 개체의 대표성을 나타내는 식별자를 주 식별자, 나머지는 보조 식별자로 지정
주 식별자 특징
- 유일성 : 개체 내의 모든 인스턴스들은 주 식별자에 의해 유일하게 구분되어야 함
- 최소성 : 유일성을 만족시키기 위해 필요한 최소한의 속성으로만 구성되어야 함
- 불변성 : 주 식별자가 특정 개체에 한 번 지정되면 그 식별자는 변하지 않아야 함
- 존재성 : 주 식별자가 지정되면 식별자 속성에 반드시 데이터 값이 존재해야 함
학번 | 주민번호 | 성명 |
1001 | 010429-3****** | 김상욱 |
1002 | 000505-3****** | 임선호 |
1003 | 001225-4****** | 이다혜 |
'학번' 이나 '주민번호' 는 다른 속성과 함께 복합키로 구성되지 않아도 단일 속성만으로(최소성) 다른 레코드들을 유일하게 구별할 수 있으며(유일성), 값이 변경되거나(불변성), 어떤 값도 비어있어서는 안된다(존재성)
2-9. E-R(개체-관계) 모델
E-R(Entity-Relationship, 개체-관계) 모델
- 1976년 피터 첸(Peter Chen)에 의해 제안
- 개념적 데이터 모델의 가장 대표적
- 데이터를 개체, 관계, 속성으로 묘사한다.
- E-R 다이어그램으로 표현하며 1:1, 1:N, N:M 등의 관계 유형을 제한 없이 나타낼 수 있다.
E-R 다이어그램
2-10. 관계형 데이터베이스의 구조 / 관계형 데이터 모델
관계형 데이터베이스
- 2차원 표(Table)을 이용해서 데이터 상호 관계를 정의하는 데이터베이스
- 개체와 관계를 모두 릴레이션이라는 표로 표현하기 때문에 개체에는 개체 릴레이션과 관계 릴레이션이 존재한다.
- 장점 : 간결하고 보기 편리, 다른 데이터베이스로의 변환 용이
- 단점 : 성능이 다소 떨어짐
관계형 데이터베이스의 릴레이션 구조
- 릴레이션은 데이터들을 표(Table) 의 형태로 표현한 것
- 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성
튜플(Tuple)
- 릴레이션을 구성하는 각 행
- 속성의 모임
- 레코드와 같은 의미
- 튜플의 수를 카디널리티(Cardinality) 또는 기수, 대응수라고 한다.
속성(Attribute)
- 데이터베이스를 구성하는 가장 작은 논리적 단위
- 데이터 항목 또는 데이터 필드에 해당
- 속성은 개체의 특성을 기술
- 속성의 수를 차수(Degree)라고 한다.
도메인(Domain)
- 하나의 속성이 취할 수 있는 같은 타입의 원자값들의 집합
예) '성별' 속성의 도메인은 '남'과 '여'로, 그 외 값은 입력될 수 없다.
릴레이션의 특징
- 한 릴레이션에 포함된 튜플 사이에는 순서가 없다.
- 튜플들의 삽입, 삭제 등의 작업으로 릴레이션은 시간에 따라 변한다.
- 릴레이션 스키마를 구성하는 속성들 간 순서는 중요하지 않다.
- 속성의 유일한 식별을 위해 속성의 명칭은 유일해야 하지만 속성을 구분하는 값은 동일한 값이 있을 수 있다.
- 릴레이션을 구성하는 튜플을 유일하게 식별하기 위해 속성들의 부분집합을 키(Key)로 설정한다.
- 속성의 값은 논리적으로 더 이상 쪼갤 수 없는 원자값만 저장한다.
관계형 데이터 모델
- 2차원적인 표를 이용해서 데이터 상호관계를 정의하는 DB구조
- 가장 널리 사용되는 데이터 모델
- 기본키와 이를 참조하는 외래키로 데이터 간의 관계를 표현
- 관계형 모델의 대표적인 언어 : SQL
- 1:1, 1:N, N:M 관계를 자유롭게 표현
2-11. 관계형 데이터베이스의 제약 조건 - 키(Key)
키(Key)
- 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 기준이 되는 속성
종류
종류 | 내용 |
후보키 (Candidate Key) |
- 릴레이션을 구성하는 속성들 중 튜플을 유일하게 식별하기 위해 사용되는 속성들의 부분집합 - 기본키로 사용할 수 있는 속성들 - 유일성과 최소성을 모두 만족 |
기본키 (Primary Key) |
- 후보키 중에서 특별히 선정된 메인 키 - 중복된 값을 가질 수 없다. - 한 릴레이션 안에서 특정 튜플을 유일하게 구별할 수 있는 속성 - NULL 값 가질 수 없음 |
대체키 (Alternate Key) |
- 후보키가 2개 이상일 때 기본키를 제외한 나머지 후보키 - 보조키 |
슈퍼키 (Super Key) |
- 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키 - 유일성은 만족하지만, 최소성은 만족하지 못한다. |
외래키 (Foreign Key) |
- 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합 - 외래키로 지정시, 참조 릴레이션의 기본키에 없는 값은 입력할 수 없다 |
* 유일성 : 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 한다.
* 최소성 : 키를 구성하는 속성 하나를 제거하면 유일하게 식별할 수 없도록 꼭 필요한 최소의 속성으로 구성되어야 한다.
2-12. 관계형 데이터베이스의 제약 조건 - 무결성(Integrity)
무결성(Integrity)
- 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제 값이 일치하는 정확성
- 무결성 제약 조건
" 데이터베이스에 들어 있는 데이터의 정확성을 보장하기 위해 부정확한 자료가 데이터베이스 내에 저장되는 것을 방지하기 위한 제약 조건"
무결성의 종류
종류 | 내용 |
개체 무결성 | 기본 테이블의 기본키를 구성하는 어떤 속성도 NULL 값이나 중복값을 가질 수 없다 |
참조 무결성 | 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 함 즉, 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다 |
데이터 무결성 강화
- 애플리케이션 : 데이터 생성, 수정, 삭제 시 무결성 조건을 검증하는 코드를 프로그램 내에 추가
- 데이터베이스 트리거 : 트리거 이벤트에 무결성 조건을 실행하는 절차형 SQL을 추가
- 제약 조건 : 데이터베이스에 제약 조건을 설정하여 무결성을 유지
2-13. 관계대수 및 관계해석
관계대수
- 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해 어떻게 유도하는가를 기술하는 절차적 언어
- 릴레이션 처리를 위한 연산자와 연산 규칙을 제공하며 피연산자와 연산 결과 모두 릴레이션이다.
- 순수 관계 연산자 & 일반 집합 연산자
순수 관계 연산자
종류 | 특징 | 기호 |
Select | - 릴레이션에 존재하는 튜플 중 선택 조건을 만족하는 튜플의 부분집합을 구하여 새로운 릴레이션을 만드는 연산 - 수평 연산 |
σ (시그마) |
Project | - 주어진 릴레이션에서 속성 리스트에 제시된 속성 값만 추출하여 새로운 릴레이션을 만드는 연산 - 중복은 제거됨 - 수직 연산자 |
π (파이) |
Join | - 공통 속성을 중심으로 2개의 릴레이션을 하나로 합쳐 새로운 릴레이션을 만드는 연산 - 교차곱을 수행 후, Select를 수행한 것과 동일 |
⋈ |
Division | - X⊃Y인 2개의 릴레이션 R(X)와 S(Y)가 있을 경우, R의 속성이 S의 속성값을 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산 | ➗ |
일반 집합 연산자
합병조건
- 합병하려는 두 릴레이션 간에 속성 수가 같고, 대응되는 속성별로 도메인이 같아야한다.
연산자 | 기능 | 카디널리티 |
합집합 UNION (∪) |
- 두 릴레이션에 존재하는 튜플의 합집합을 구하되, 중복되는 튜플은 제거되는 연산 | 두 릴레이션 카디널리티의 합보다 크지 않음 |
교집합 INTERSECTION (∩) |
- 두 릴레이션에 존재하는 튜플의 교집합을 구하는 연산 | 두 릴레이션 중 카디널리티가 적은 릴레이션의 카디널리티보다 크지 않음 |
차집합 DIFFERENCE (-) |
- 두 릴레이션에 존재하는 튜플의 차집합을 구하는 연사나 | 릴레이션 R의 카디널리티보다 크지 않음 |
교차곱 CARTESIAN PRODUCT (Х) |
- 두 릴레이션에 있는 튜플들의 순서쌍을 구하는 연산 | 두 릴레이션의 카디널리티를 곱합 것과 같음 |
관계해석
- 관계 데이터의 연산을 표현하는 방법
- 원하는 정보가 무엇인지 정의하는 비절차적 특성을 지님
- 원하는 정보를 정의할 때 계산 수식을 사용
2-14. 이상 / 함수적 종속
이상(Anomaly)
- 테이블에서 일부 속성들의 종속으로 인해 데이터의 중복이 발생하고 이 중복으로 인해 테이블 조작 시 문제가 발생하는 현상
- 종류
- 삽입 이상 : 테이블에 데이터를 삽입 시, 원하지 않는 값들로 삽입할 수 없게 되는 현상
- 삭제 이상 : 테이블에서 한 튜플을 삭제할 시, 의도와 상관없는 값들도 함께 삭제되는 현상 (연쇄 삭제)
- 갱신 이상 : 테이블에서 튜플에 있는 속성 값을 갱신할 시, 일부 튜플의 정보만 갱신되어 정보에 불일치성이 생기는 현상
함수적 종속
- 어떤 테이블 R에 X와 Y를 각각 R의 속성 집합의 부분 집합이라 하자
- 속성 X의 값 각각에 대해 시간에 관계없이 항상 속성 Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수적 종속 또는 X가 Y를 함수적으로 결정한다고 한다.
- X (결정자) -> Y (종속자)
학번 | 이름 | 학년 | 학과 |
400 | 이순신 | 4 | 약학과 |
422 | 유관순 | 4 | 물리학과 |
301 | 강감찬 | 3 | 수학과 |
320 | 홍길동 | 3 | 체육과 |
학번 -> 이름
학번 -> 학년 or 학번 -> 이름, 학년, 학과
학번 -> 학과
완전 / 부분 함수적 종속
학번 | 과목번호 | 성적 | 학년 |
100 | C413 | A | 4 |
100 | E412 | A | 4 |
200 | C123 | B | 3 |
300 | C312 | A | 1 |
300 | C324 | C | 1 |
학번, 과목번호 -> 성적
학번 -> 학년
테이블 속성 중 '성적'은 (학번, 과목번호)에 완전 함수적 종속이라 하며, '학년'은 (학번, 과목번호)에 완전 함수적 종속이 아니므로 부분 함수적 종속이라고 한다.
💡즉, 완전 함수적 종속은 어떤 속성이 기본키에 대해 완전히 종속일 때를 말한다.
2-15. 정규화 (Normalization)
정규화(Normalization)
- 테이블의 속성들이 상호 종속적인 관계를 갖는 특성을 이용하여 테이블을 무손실 분해하는 과정
- 가능한 한 중복을 제거하여 삽입, 삭제, 갱신 이상의 발생 가능성을 줄이는 것이 목적이다.
정규화 과정
⭐️ 도부이결다조 (두부이걸다줘?)
비정규 릴레이션
⬇️ 도메인이 원자값
1NF
⬇️ 부분적 함수 종속 제거
2NF
⬇️ 이행적 함수 종속 제거 : A->B이고 B->C일 때, A->C를 만족하는 관계
3NF
⬇️ 결정자이면서 후보키가 아닌 것 제거
BCNF
⬇️ 다치 종속 제거
4NF
⬇️ 조인 종속성 이용
5NF
2-16. 반정규화 (Denormalization)
반정규화
- 시스템의 성능 향상, 개발 및 운영의 편의성 등을 높이기 위해 정규화된 데이터 모델을 의도적으로 통합, 중복, 분리하여 정규화의 원칙을 위배하는 행위
- 시스템의 성능이 향상되고 관리 효율성은 증가하지만 데이터의 일관성 및 정합성이 저하될 수 있다.
- 과도한 반정규화는 오히려 성능을 저하시킴
반정규화의 방법
방법 | 내용 |
테이블 통합 | - 2개의 테이블에서 발생하는 프로세스가 동일하게 자주 처리될 경우 - 항상 2개의 테이블을 이용하여 조회할 경우 * 종류 - 1:1 관계 테이블 통합 - 1:N 관계 테이블 통합 - 슈퍼 타입 / 서브 타입 테이블 통합 - 슈퍼 타입 : 상위 개체 - 서브 타입 : 하위 개체 |
테이블 분할 | - 수평 분할 : 레코드를 기준으로 분할 - 수직 분할 : 속성을 기준으로 분할 |
중복 테이블 추가 | - 여러 테이블에서 데이터를 추출하여 사용할 경우 - 다른 서버에 저장된 테이블을 이용해야하는 경우 * 방법 - 집계 테이블의 추가 : 집계 데이터를 위한 테이블을 생성하고, 각 원본 테이블에 트리거(Trigger)를 설정하여 사용 - 진행 테이블의 추가 : 이력 관리 등의 목적으로 추가하는 테이블 - 특정 부분만 포함하는 테이블의 추가 : 데이터가 많은 테이블의 특정 부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성 |
중복 속성 추가 | - 조인이 자주 발생하는 속성인 경우 - 접근 경로가 복잡한 속성인 경우 - 액세스의 조건으로 자주 사용되는 속성의 경우 - 기본키의 형태가 적절하지 않거나 여러 개의 속성으로 구성된 경우 |
2-17. 시스템 카탈로그
시스템 카탈로그(System Catalog)
- 다양한 객체에 관한 정보를 포함하는 시스템 데이터베이스
- 카탈로그들이 생성되면 데이터 사전에 저장되기 때문에 데이터 사전이라고도 한다.
메타 데이터(Meta-Data)
- 시스템 카탈로그에 저장된 정보
- 유형
- 데이터베이스 객체 정보 : 테이블, 인덱스, 뷰 등의 구조 및 통계 정보
- 사용자 정보 : 아이디, 패스워드, 접근 권한 등
- 테이블의 무결성 제약 조건 정보 : 기본키, 외래키, NULL값 허용 여부 등
- 함수, 프로시저, 트리거 등에 대한 정보
데이터 디렉터리
- 데이터 사전에 수록된 데이터에 접근하는 데 필요한 정보를 관리 유지하는 시스템
- 시스템 카탈로그는 사용자와 시스템 모두 접근가능하지만, 데이터 디렉터리는 시스템만 접근 가능
2-18. 데이터베이스 저장 공간 설계
데이터베이스 저장 공간 설계
객체 | 내용 |
테이블 | - 데이터베이스의 가장 기본적인 객체 - row(행), column(열)로 구성 - 데이터베이스의 모든 데이터는 테이블에 저장 |
컬럼 | - 테이블의 열을 구성하는 요소 - 데이터 타입, 길이 등으로 정의 |
테이블스페이스 | - 테이블이 저장되는 논리적인 영역 - 한 개의 테이블스페이스에 한 개 이상의 테이블을 저장할 수 있음 |
테이블 종류
종류 | 내용 |
일반 테이블 | - 대부분 DBMS에서 표준 테이블로 사용되는 테이블 - 데이터 정렬하지 않고 적절한 기억 장소에 저장한 후 임의의 방식으로 데이터를 관리하는 힙(Heap) 구조 테이블 |
클러스터드 인덱스 테이블 | - 기본키나 인덱스키의 순서에 따라 데이터가 저장되는 테이블 - 일반적인 인덱스를 사용하는 테이블에 비해 접근 경로가 단축됨 |
파티셔닝 테이블 | - 대용량의 테이블을 작은 논리적 단위인 파티션으로 나눈 테이블 |
외부 테이블 | - 데이터베이스에서 일반 테이블처럼 사용할 수 있는 외부 파일 - 데이터베이스 내에 객체로 존재 |
임시 테이블 | - 트랜잭션이나 세션별로 데이터를 저장하고 처리할 수 있는 테이블 - 임시 테이블에 저장된 데이터는 트랜잭션 종료 시 삭제됨 |
2-19. 트랜잭션 분석 / CRUD 분석
트랜잭션 (Transaction)
- 데이터베이스 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업 단위
- 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위로 사용된다.
- 사용자가 시스템에 대한 서비스 요구 시, 시스템이 응답하기 위한 상태 변환 과정의 작업 단위로 사용된다.
트랜잭션의 특성
⭐️ 원자성(Atomicity) : 트랜잭션의 연산은 데이터베이스에 모두 반영되도록 완료(Commit)되든지 전혀 반영되지 않도록 복구(Rollback)되어야 한다.
⭐️ 일관성(Consistency) : 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성있는 데이터베이스 상태로 변환된다.
⭐️ 독립성, 격리성(Isolation) : 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우, 어느 하나의 트랜잭션이 실행 중 다른 트랜잭션의 연산에 끼어들 수 없다.
⭐️ 영속성, 지속성(Durability) : 성공적으로 완료된 트랜잭션 결과는 시스템이 고장나도 영구적으로 반영되어야 한다.
CRUD 분석
- 프로세스와 테이블 간 CRUD 매트릭스를 만들어 트랜잭션을 분석
- CRUD 매트릭스
- 2차원 형태의 표로, 행에는 프로세스 열에는 테이블을 행과 열이 만나는 위치에는 프로세스가 테이블에 발생시키는 변화를 표시하여 프 로세스와 데이터 간의 관계를 분석하는 분석표
- 트랜잭션이 테이블에 수행하는 작업을 검증
- 기본적으로 C > D > U > R 의 우선순위를 가짐
트랜잭션 분석
- CRUD 매트릭스를 기반으로 테이블에 발생하는 트랜잭션 양을 분석
- 테이블에 저장되는 데이터의 양을 유추하고 이로 DB의 용량 산정 및 구조 최적화를 목적으로 한다.
- 구성요소 : 단위 프로세스, CRUD 연산, 테이블명, 컬럼명, 테이블 참조 횟수, 트랜잭션 수, 발생 주기 등
2-20. 인덱스 (Index)
인덱스
- 데이터 레코드를 빠르게 접근하기 위해 <키값, 포인터> 쌍으로 구성되는 데이터 구조
인덱스 종류
종류 | 내용 |
트리 기반 인덱스 | 인덱스를 저장하는 블록들이 트리 구조를 이룸 |
비트맵 인덱스 | 인덱스 컬럼의 데이터를 0 또는 1로 변환하여 인덱스 키로 사용 |
함수 기반 인덱스 | 컬럼의 값 대신 컬럼에 특정 함수나 수식을 적용하여 산출된 값을 사용 |
비트맵 조인 인덱스 | 다수의 조인된 객체로 구성된 인덱스 |
도메인 인덱스 | 개발자가 필요한 인덱스를 직접 만들어 사용 |
클러스터드 / 넌클러스터드 인덱스
종류 | 내용 |
클러스터드 인덱스 | 인덱스 키의 순서에 따라 데이터가 정렬되어 저장되는 방식 인덱스를 검색하지 않아도 원하는 데이터를 빠르게 검색 가능 |
넌클러스터드 인덱스 | 인덱스의 키 값만 정렬되어 있고 실제 데이터는 정렬되지 않은 방식 데이터 삽입, 삭제 발생 시 순서 유지를 위해 데이터를 재정렬해야 함 |
2-21. 뷰 / 클러스터
뷰(View)
- 사용자에게 접근이 허용된 것만 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 이름을 가지는 가상 테이블
- 저장장치 내에 물리적으로 존재하지 않지만 사용자에게는 있는 것처럼 보임
- 뷰 정의 시 CREATE 문, 제거 시 DROP 문을 사용
뷰의 장단점
장점 | 단점 |
- 논리적 데이터 독립성을 제공 - 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원 - 사용자의 데이터 관리를 간단하게 해줌 - 접근 제어를 통해 자동 보안 |
- 독립적인 인덱스를 가질 수 없음 - 뷰의 정의를 변경할 수 없음 - 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약이 따름 |
클러스터(Cluster)
- 데이터 저장 시 데이터 액세스의 효율을 증가시키기 위해 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 물리적 저장 방법
- 클러스터링 된 테이블은 데이터 조회 속도가 빠르지만 입력, 수정, 삭제 능력은 저하시킴
- 데이터의 분포도가 넓을수록 유리하다.
* 분포도 = (조건에 맞는 레코드 수 / 전체 릴레이션 레코드 수) * 100
조건에 맞는 레코드 수가 적을수록 분포도가 좋음
인덱스는 분포도가 좁은 테이블이 좋지만, 클러스터링은 넓은 테이블이 유리
- 처리 범위가 넓은 경우, 단일 테이블 클러스터링을 조인이 많이 발생하는 경우, 다중 테이블 클러스터링을 사용
2-22. 파티션 (Partition)
파티션
- 대용량의 테이블이나 인덱스를 작은 논리적 단위인 파티션으로 나누는 것
- 데이터 처리는 테이블 단위로 이뤄지고 데이터 저장은 파티션별로 수행된다.
파티션의 장단점
장점 | 단점 |
- 데이터 접근 시, 액세스 범위를 줄여 쿼리 성능이 향상됨 - 파티션별로 데이터가 분산 저장되어 디스크의 성능이 향상됨 - 파티션별로 백업 및 복구를 수행하므로 속도가 빠름 - 시스템 장애 시 데이터 손상 최소화 가능 - 데이터 가용성이 향상 - 파티션 단위로 입출력 분산 가능 |
- 하나의 테이블을 세분화하여 관리하므로 세심한 관리가 요구됨 - 테이블간 조인에 대한 비용 증가 - 용량이 작은 테이블에서는 성능이 저하됨 |
파티션의 종류
범위 분할 | - 지정한 열 값을 기준으로 분할 - 일별, 월별, 분기별 등 |
해시 분할 | - 해시함수를 적용한 결과값에 따라 데이터를 분할 - 특정 파티션에 데이터가 집중되는 것을 보완, 고른 데이터 분산 가능 - 특정 데이터가 어디 있는지 판단 가능 - 고객번호, 주민번호 같이 데이터가 고른 컬럼에 효과적 |
조합 분할 | - 범위 분할로 분할 후 해시 함수를 적용하여 다시 분할 - 범위 분할한 파티션이 너무 커서 관리가 어려울 때 유용함 |
2-23. 분산 데이터베이스 설계
데이터베이스 용량 설계
- 데이터가 저장될 공간을 정의
- 테이블에 저장될 데이터양과 인덱스, 클러스터 등의 공간을 예측하여 반영
- 데이터베이스의 용량을 정확히 산정하여 디스크의 저장공간을 효과적으로 사용하고 확장성 및 가용성을 높임
- 디스크의 입출력 부하를 분산시키고 채널의 병목 현상을 최소화
분산 데이터베이스 설계
- 논리적으로 하나의 시스템에 속하지만, 물리적으로는 네트워크를 통해 연결된 여러 개의 사이트에 분산된 데이터베이스를 말함
분산 데이터베이스의 목표
- 위치 투명성 : 액세스하려는 데이터베이스의 실제 위치를 알 필요 없이 단지 데이터베이스의 논리적인 명칭만으로 접근이 가능
- 중복 투명성 : 동일 데이터가 여러 곳에 중복되어도 사용자는 마치 하나의 데이터만 존재하는 것처럼 사용이 가능하다.
- 병행 투명성 : 분산 데이터베이스와 관련된 다수의 트랜잭션들이 동시에 실현되더라도 그 트랜잭션의 결과는 영향받지 않는다.
- 장애 투명성 : 트랜잭션, DBMS, 네트워크, 컴퓨터 장애에도 불구하고 트랜잭션을 정확하게 처리한다.
분산 설계 방법
방법 | 설명 |
테이블 위치 분산 | 데이터베이스의 테이블을 각기 다른 서버에 분산시켜 배치 |
분할 | - 테이블의 데이터를 분할하여 분산 - 분할 규칙 : 완전성, 재구성, 상호 중첩 배제 - 분할 방법 : 수평분할, 수직분할 |
할당 | - 동일한 분할을 여러 개의 서버에 생성하는 분산 방법 - 중복이 없는 할당 & 중복이 있는 할당 |
2-24. 데이터베이스 이중화 / 서버 클러스터링
데이터베이스 이중화(Database Replication)
- 시스템 오류에 대비하여 동일한 데이터베이스를 복제하여 관리하는 것
- 손쉽게 백업 서버 운영이 가능
데이터베이스 이중화 분류
- Eager : 트랜잭션 수행 중 데이터 변경이 발생하면 이중화된 모든 데이터베이스에 즉시 전달하여 변경내용이 즉시 적용
- Lazy : 트랜잭션 수행이 종료되면 변경 사실을 새로운 트랜잭션에 작성하여 각 데이터베이스에 전달
데이터베이스 이중화 구성 방법
- 활동-대기 : 한 DB가 활성 상태면 다른 DB는 대기하고 있다가 장애 발생 시 대기하던 DB가 자동으로 수행
구성 방법과 관리가 쉬워 기업에서 많이 사용됨
- 활동-활동 : 두 개의 DB가 서로 다른 서비스를 제공하다가 한 쪽이 문제가 생기면 나머지 다른 DB가 서비스를 제공
처리율이 높지만 구성 방법 및 설정이 복잡
클러스터링(Clustering)
- 두 대 이상의 서버를 하나의 서버처럼 운영하는 기술
- 클러스터링 종류
고가용성 클러스터링 | - 하나의 서버에 장애가 발생하면 다른 서버가 받아 처리 - 일반적으로 언급되는 클러스터링 |
병렬 처리 클러스터링 | 전체 처리율을 높이기 위해 하나의 작업을 여러 서버에서 분산하여 처리 |
RTO /RPO
RTO (Recovery Time Objective, 목표 복구 시간) | 비상사태 또는 업무 중단 시점으로부터 복구되어 가동될 때까지의 소요 시간 |
RPO (Recovery Point Objective, 목표 복구 시점) | 비상사태 또는 업무 중단 시점으로부터 데이터를 복구할 수 있는 기준점 |
2-25. 데이터베이스 보안
데이터베이스 보안
- 데이터베이스의 일부 또는 전체에 대해 권한이 없는 사용자가 액세스하는 것을 금지하도록 사용되는 기술
암호화(Encryption)
- 데이터 전송 시, 송신자가 지정한 수신자 이외에는 내용을 알 수 없도록 평문을 암호문을 변환하는 것
- 암호화 과정 : 평문 -> 암호문
- 복호화 과정 : 암호문 -> 평문
- 암호화 기법
- 개인키 암호화 방식
- 공개키 암호화 방식
접근 통제
- 데이터가 저장된 객체와 이를 사용하는 주체 사이의 정보 흐름을 제한하는 것
- 3요소
- 접근통제 정책
- 접근통제 매커니즘
- 접근통제 보안모델
- 접근통제 기술
2-26. 데이터베이스 백업
데이터베이스 백업
- 장애에 대비하여 데이터베이스에 저장된 데이터를 보호하고 복구하기 위한 작업
로그 파일
- 데이터베이스의 상태 변화를 시간의 흐름에 따라 모두 기록한 파일
- 데이터베이스 복구를 위한 가장 기본적인 자료
데이터베이스 복구 알고리즘
NO-UNDO / REDO | - 데이터베이스 버퍼의 내용을 비동기적으로 갱신한 경우의 복구 알고리즘 - NO-UNDO : 트랜잭션 완료 전에는 변경 내용이 데이터베이스에 기록되지 않으므로 취소할 필요가 없음 - REDO : 트랜잭션 완료 후 데이터베이스 버퍼에는 기록되어 있고 저장매체에는 기록되지 않았으므로 트랜잭션 내용을 다시 실행해야함 |
UNDO / NO-REDO | - 데이터베이스 버퍼의 내용을 동기적으로 갱신한 경우의 복구 알고리즘 - UNDO : 트랜잭션 완료 전에 시스템이 파손되었다면 변경된 내용을 취소함 - NO-REDO : 트랜잭션 완료 전에 데이터베이스 버퍼 내용을 저장 매체에 기록했으므로 트랜잭션 내용을 다시 실핼할 필요 없음 |
UNDO / REDO | - 데이터베이스 버퍼의 내용을 동기/비동기적으로 갱신한 경우의 복구 알고리즘 - 데이터베이스 기록 전에 트랜잭션이 완료될 수 있으므로, 완료된 트랜잭션이 데이터베이스에 기록되지 못했다면 다시 실행해야 함 |
NO-UNDO / NO-REDO | - 데이터베이스 버퍼의 내용을 동기적으로 저장 매체에 기록하지만, 데이터베이스와는 다른 영역에 기록한 경우의 복구 알고리즘 - NO-UNDO : 변경 내용은 데이터베이스와 다른 영역에 기록되어 있어 취소할 필요가 없음 - NO-REDO : 다른 영역에 이미 기록되어 있으므로 트랜잭션을 다시 실행할 필요가 없음 |
백업 종류
- 복구 수준에 따라 운영체제를 이용하는 물리 백업과 DBMS 유틸리티를 이용하는 논리백업으로 나뉨
물리 백업 | - 데이터베이스 파일을 백업 - 백업 속도가 빠르고 작업이 단순함 - 단, 문제 발생 시 원인 파악 및 문제 해결이 어려움 |
논리 백업 | - DB 내의 논리적 객체들을 백업 - 복원 시 데이터 손상을 막고 문제 발생 시 원인 파악 및 해결이 수월 - 단, 백업/복원 시간이 많이 소요됨 |
2-27. 스토리지(Storage)
스토리지
- 단일 디스크로 처리할 수 없는 대용량의 데이터를 저장하기 위해 서버와 저장장치를 연결하는 기술
- 스토리지 종류
DAS(Direct Attached Storage) | - 서버와 저장장치를 전용 케이블로 직접 연결하는 방식 - 속도가 빠르고 설치 및 운영이 쉽다. - 초기 구축 비용 및 유지보수 비용이 저렴하다. - 다른 서버에서 접근할 수 없고, 파일을 공유할 수 없다. - 확장성 및 유연성이 떨어진다. |
NAS(Network Attached Storage) | - 서버와 저장장치를 네트워크를 통해 연결하는 방식 - 장소에 구애받지 않고 저장장치에 쉽게 접근 - Ethernet 스위치를 통해 다른 서버에서도 스토리지에 접근 가능 - DAS에 비해 확장성 및 유연성이 우수하다. |
SAN(Storage Area Network) | - DAS의 빠른 처리와 NAS의 파일 공유를 혼합한 방식 - 서버와 저장장치를 연결하는 전용 네트워크를 별도로 구성하는 방식 - 파이버 채널(FC) 스위치를 이용하여 네트워크 구성 - 확장성, 유연성, 가용성이 우수하다. |
2.28 논리 데이터 모델의 변환
Entity를 테이블로 변환
- 논리 데이터 모델에서 정의된 엔티티를 물리 데이터 모델의 테이블로 변환
논리적 설계 (데이터 모델링) | 물리적 설계 |
엔티티 속성 주 식별자 외부 식별자 관계 |
테이블 칼럼 기본키 외래키 관계 |
슈퍼타입 / 서브타입을 테이블로 변환
변환 방법
슈퍼타입 기준 테이블 변환
- 서브타입을 슈퍼타입에 통합하여 하나의 테이블로 만듬
- 서브타입에 속성이나 관계가 적을 경우에 적용
서브타입 기준 테이블 변환
- 슈퍼타입 속성들을 각각의 서브타입에 추가하여 서브타입들을 개별적인 테이블로 만듬
- 서브타입에 속성이나 관계가 많을 경우 적용
개별타입 기준 테이블 변환
- 슈퍼타입과 서브타입들을 각각의 개별적인 테이블로 변환
- 슈퍼타입과 서브타입 테이블 사이에 1:1관계가 형성
속성을 컬럼으로 변환
- 논리적 데이터 모델에서 정의한 속성을 물리적 데이터 모델의 컬럼으로 변환
사원번호 |
부서번호(FK) 이름 주소 전화번호 이메일 |
⬇️
empnum | depnum | name | add | phon | |
AK2015 | Z01 | 홍길동 | 서울 | 02-*** | abc123 |
A003 | R01 | 이춘식 | 경기 | 032-*** | hello22 |
AK2018 | T01 | 성봉호 | 충남 | 041-*** | py231 |
일반 속성 변환 | 속성과 컬럼은 명칭이 반드시 일치할 필요는 없으나, 개발자와 사용자 간 의사소통을 위해 가능한 표준화된 약어를 사용하여 일치시킴 |
Primary UID를 기본키로 변환 | 논리 데이터 모델에서의 Primary UID는 물리 데이터 모델의 기본키로 만듬 |
Primary UID를 기본키로 변환 | 다른 엔티티와의 관계로 인해 생성된 Primary UID는 물리 데이터 모델의 기본키로 만듬 |
Secondary UID를 유니크키로 변환 | 논리 모델링에서 정의된 Secondary UID 및 Alternate Key는 물리 모델에서 유니크키로 만듬 |
관계를 외래키로 변환
- 논리 데이터 모델에서 정의된 관계는 기본키와 이를 참조하는 외래키로 변환
2.29 물리 데이터 모델 품질 검토
물리 데이터 모델 품질 검토
- 개발 단계로 넘어가기 전에 수행
=> 성능향상과 오류 예방
물리 데이터 모델 품질 기준
정확성 | 요구사항이나 업무 규칙, 표기법에 따라 정확하게 표현되었음 |
완전성 | 데이터 모델의 구성요소를 누락 없이 정의하고 요구사항이나 업무 영역을 누락 없이 반영하였음 |
준거성 | 데이터 표준, 표준화 규칙, 법적 요건 등을 정확하게 준수하였음 |
최신성 | 최근 이슈나 현행 시스템을 반영하고 있음 |
일관성 | 표현상의 일관성을 유지하고 있음 |
활용성 | 작성된 모델과 설명을 사용자가 충분히 이해할 수 있고, 업무 변화에 따른 데이터 구조 변경이 최소화할 수 있도록 설계되었음 |
2.30 자료구조
자료구조
- 자료를 기억장치 공간 내에 저장하는 방법과 자료 간의 관계, 처리 방법 등을 연구 분석하는 것
- 자료 구조의 분류
선형 구조
- 배열(Array)
- 선형 리스트(Linear list)
- 연속 리스트(Continuous list)
- 연결 리스트(Linked list)
- 스택(Stack)
- 큐(Queue)
- 데크(Deque)
비선형 구조
- 트리(Tree)
- 그래프(Graph)
배열(Array)
- 크기와 형이 동일한 자료들이 순서대로 나열된 자료의 집합
- 반복적인 데이터 처리 작업에 적합한 구조
- 정적인 자료 구조, 기억장소의 추가가 어려움
- 데이터 삭제 시, 기억장소가 빈 공간으로 남아 메모리 낭비 발생
선형 리스트(Linear list)
- 연속 리스트(Continuous list)
- 배열과 같이 연속되는 기억장소에 저장되는 자료 구조
- 중간에 데이터 삽입을 위해 연속된 빈 공간이 있어야 한다.
- 삽입, 삭제 시 자료의 이동이 필요
- 연결 리스트(Linked list)
- 자료들을 임의의 기억공간에 기억시키되, 자료 항목 순서에 따라 노드의 포인터 부분을 이용하여 서로 연결시킨 자료 구조
- 연결을 위한 링크(포인터) 부분이 필요하여 기억 공간 이용효율이 좋지 않음
- 접근 속도가 느리고 연결이 끊어지면 다음 노드 찾기 어려움
스택(Stack)
- 리스트 한쪽 끝으로만 자료의 삽입, 삭제가 이루어지는 자료구조
- 후입선출(LIFO : Last In First Out)
- 저장할 기억 공간이 없는 상태에서 데이터 삽입 : 오버플로우(Overflow)
- 삭제할 데이터가 없는 상태에서 데이터 삭제 : 언더플로우(Underflow)
큐(Queue)
- 리스트 한쪽에는 삽입, 다른 한쪽에서는 삭제가 이루어지는 자료구조
- 선입선출(FIFO : First In First Out)
- 시작을 표시하는 프런트(Front) 포인터, 끝을 표시하는 리어(Rear) 포인터 존재
그래프(Graph)
- 정점(Vertex)과 간선(Edge)의 두 집합으로 이루어지는 자료구조
- 사이클이 없는 그래프를 트리라고 한다
- 간선 방향성의 유무에 따라 분류
- 방향 그래프 : 최대 간선 수 n(n-1)
- 무방향 그래프 : 최대 간선 수 n(n-1)/2
* n : 정점의 개수
2.31 트리(Tree)
트리
- 정점(Node, 노드)과 선분(Branch, 가지)을 이용하여 사이클을 이루지 않도록 구성한 그래프의 특수한 형태
- 하나의 기억공간을 노드(Node)라고 하며, 노드와 노드를 연결하는 선을 링크(Link)라고 한다.
2.32 이진 트리
이진 트리
- 차수(Degree)가 2 이하인 노드들로 구성된 트리
- 자식이 둘 이하인 노드들로만 구성된 트리
- 레벨 i에서 최대 노드의 수 : 2^i-1
- 단말 노드 수가 n0, 차수가 2인 노드 수가 n2라 할때, n0 = n2 + 1
레벨 3에서 최대 노드의 수 : 2^3-1 = 4이다.
단말 노드의 개수가 4이고, 차수가 2인 노드가 3개 이므로 4 = 3 + 1에 의해 성립
트리의 운행법
- 트리를 구성하는 각 노드들은 찾아가는 방법
- 운행방법
- Preorder : Root -> Left -> Right (ABDCFG)
- Inorder : Left -> Root -> Right (DBEAFCG)
- Postorder : Left -> Right -> Root (DEBFGCA)
수식의 표기법
- 전위 표기법(PreFix)
- 중위 표기법(InFix)
- 후위 표기법(PostFix)
2.33 정렬(Sort)
삽입 정렬(Insertion Sort)
- 가장 간단한 정렬 방식
- 이미 순서화된 파일에 새로운 하나의 레코드를 순서에 맞게 삽입시켜 정렬
- 평균과 최악 수행 시간 복잡도는 O(n2)
예) 8,5,6,2,4 를 삽입 정렬로 정렬하시오.
5 | 8 | 6 | 2 | 4 |
두번째 값을 첫번째 값과 비교하여 5를 첫번재 자리에 삽입하고 8을 한칸 뒤로 이동
5 | 6 | 8 | 2 | 4 |
세번째 값을 첫번째, 두번째 값과 비교하여 6을 8자리에 삽입하고, 8은 한칸 뒤로 이동
2 | 5 | 6 | 8 | 4 |
네번째 값 2를 처음부터 비교하여 맨 처음에 삽입하고, 나머지를 한 칸씩 뒤로 이동
2 | 4 | 5 | 6 | 8 |
다섯번째 값 4를 처음부터 비교하여 5자리에 삽입하고, 나머지를 한 칸씩 뒤로 이동
선택 정렬(Selection Sort)
- n개의 레코드 중 최소값을 찾아 첫 번째 레코드 위치에 놓고, 나머지 n-1개 중 다시 최소값을 찾아 두 번째 레코드 위치에 놓는 방식을 반복하여 정렬
- 평균과 최악 수행 시간 복잡도는 O(n2)
예) 8,5,6,2,4 를 선택 정렬로 정렬하시오.
1회전
5 | 8 | 6 | 2 | 4 |
2 | 8 | 6 | 5 | 4 |
2회전
2 | 6 | 8 | 5 | 4 |
2 | 5 | 8 | 6 | 4 |
2 | 4 | 8 | 6 | 5 |
3회전
2 | 4 | 6 | 8 | 5 |
2 | 4 | 5 | 8 | 6 |
4회전
2 | 4 | 5 | 6 | 8 |
버블 정렬(Bubble Sort)
- 주어진 파일에서 인접한 2개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환하는 정렬 방식
- 평균과 최악 수행 시간 복잡도는 O(n2)
예) 8,5,6,2,4 를 버블 정렬로 정렬하시오.
1회전
5 | 8 | 6 | 2 | 4 |
5 | 6 | 8 | 2 | 4 |
5 | 6 | 2 | 8 | 4 |
5 | 6 | 2 | 4 | 8 |
2회전
5 | 2 | 6 | 4 | 8 |
5 | 2 | 4 | 6 | 8 |
3회전
2 | 5 | 4 | 6 | 8 |
2 | 4 | 5 | 6 | 8 |
4회전
2 | 4 | 5 | 6 | 8 |
쉘 정렬 (Shell Sort)
- 입력 파일을 어떤 매개변수 값으로 서브파일을 구성하고, 각 서브파일을 삽입(Insertion) 정렬 방식으로 순서 배열하는 과정을 반복
- 삽입 정렬을 확장한 개념
- 평균 수행 시간 복잡도 : O(n^1.5)
- 최악 수행 시간 복잡도 : O(n^2)
퀵 정렬(Quick Sort)
- 키를 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽 서브 파일에 분해시키는 과정을 반복하는 정렬 방식
- 코드의 많은 자료 이동을 없애고, 하나의 파일을 부분적으로 나누어 가며 정렬
- 평균 수행 시간 복잡도 : O(nlog2n)
- 최악 수행 시간 복잡도 : O(n^2)
힙 정렬(Heap Sort)
- 전이진 트리를 이용한 정렬 방식
- 구성된 전이진 트리를 힙 트리로 변환하여 정렬
- 평균과 최악 수행 시간 복잡도 : O(nlog2n)
2-Way 합병 정렬(Merge Sort)
- 이미 정렬되어 있는 2개의 파일을 1개의 파일로 합병하는 정렬 방식
- 평균과 최악 수행 시간 복잡도 : O(nlog2n)
기수 정렬(Radix Sort) = 버킷 정렬(Bucket Sort)
- 큐(Queue)를 이용하여 자릿수(Digit)별로 정렬하는 방식
- 레코드의 키 값을 분석하여 같은 수 또는 같은 문자끼리 그 순서에 맞는 버킷에 분배하였다가 버킷 순서대로 레코드를 꺼내어 정렬
- 평균과 최악 수행 시간 복잡도 : O(dn)
'자격증 > 정보처리기사' 카테고리의 다른 글
[정처기 실기] 8. SQL 응용 (1) | 2023.10.05 |
---|