[SQL Developer] 제 32회 SQLD 자격검정 시험 후기
-. 일시: 2019.03.16(토) 10:00
-. 장소: 동국대학교 (서울)
사내에서 Database 설계업무를 진행하면서, 동시에 자격증도 같이 준비하였다.
다급하게 준비하느라 공부를 많이 못했지만, 공부하면서 실무에 바로바로 적용하다보니 이해하는데 도움이 많이 됐다.
아래는 SQLD 과목1의 내용 요약이며, 이번 32회 시험에 나온 개념은 빨간색으로 표기했다.
< 과목 1. 데이터 모델링의 이해 (10문제) >
1. 데이터 모델링의 이해
1-1. 데이터 모델의 이해
1-1-1. 모델링의 이해
가. 모델링의 정의: 현실 세계를 추상화, 단순화, 명확화하기 위해 일정한 표기법에 의해 표현하는 기법
나. 모델링의 특징:
①. 추상화: 일정한 형식에 맞추어 표현
②. 단순화: 약속된 규약에 의해 제한된 표기법으로 쉽게 표현
③. 명확화: 애매모호함 제거, 정확하게 기술
다. 모델링의 세 가지 관점
①. 데이터관점: what, 데이터가 뭔지, 데이터간 관계는 무엇인지
②. 프로세스 관점: how, 일은 뭔지, 무엇을 해야하는지
③. 데이터와 프로세스의 상관관점: 처리하는 일이 데이터에 어떤 영향을 주는지
1-1-2. 데이터 모델의 기본 개념의 이해
가. 모델링의 정의
①. 정보시스템을 구축하기 위한 데이터관점의 업무 분석 기법
②. 현실세계의 데이터에 대해 약속된 표기법에 의해 표현하는 과정
③. 데이터베이스를 구축하기 위한 분석, 설계의 과정
나. 데이터 모델이 제공하는 기능
- 시스템을 현재 또는 원하는 모습으로 가시화하도록 도움
- 시스템의 구조와 행동을 명세화할 수 있게 함
- 시스템을 구축하는 구조화된 틀을 제공
- 시스템을 구축하는 과정에서 결정한 것을 문서화
- 다양한 영역에 집중하기 위해 다른 영역의 세부사항을 숨기는 다양한 관점을 제공
- 특정 목표에 따라 구체화된 상세 수준의 표현방법을 제공
1-1-3. 데이터 모델링의 중요성 및 유의점
가. 파급효과: 데이터 구조의 변경으로 인한 일련의 변경작업은 전체 시스템 구축 프로젝트에서 큰 위험요소
나. 복잡한 정보 요구사항의 간결한 표현: DataModel-구축할 시스템의 정보 요구사항과 한계를 가장 명확하고 간결하게 표현할 수 있는 도구
다. 데이터 품질
라. 데이터 모델링을 할 때 유의점
①. 중복: 여러 장소에 같은 정보를 저장
②. 비유연성: 데이터 모델이 수시로 변경되어 유지보수의 어려움 가중→데이터의 정의를 데이터의 사용 프로세스와 분리
③. 비일관성: 데이터의 중복이 없어도 비일관성 발생→데이터 모델링을 할 때 데이터와 데이터간 상호 연관 관계에 대한 명확한 정의는 사전에 예방 가능
1-1-4. 데이터 모델링의 3단계 진행
①. 개념적 데이터 모델링: 추상화 수준이 높고, 업무중심적이고 포괄적인 수준의 모델링 진행. 전사적 데이터 모델링, EA수립시 많이 이용.
②. 논리적 데이터 모델링: 시스템으로 구축하고자 하는 업무에 대해 Key, 속성, 관계 등을 정확하게 표현, 재사용성이 높음. 정규화
③. 물리적 데이터 모델링: 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계
1-1-5. 프로젝트 생명주기에서 데이터 모델링
1-1-6. 데이터 모델링에서 데이터 독립성의 이해
가. 데이터 독립성의 필요성:
① 유지보수 비용증가, ② 데이터 복잡도 증가, ③ 데이터 중복성 증가, ④ 요구사항 대응 저하
-> 데이터 독립성의 효과: 각 View의 독립성을 유지하고 계층별 View에 영향을 주지 않고 변경이 가능하다.
-> 단계별 스키마에 따라 DDL, DML가 다름을 제공한다.
나. 데이터베이스 3단계 구조(ANSI/SPARC)
- 데이터 독립성 모델: 외부단계, 개념적 단계, 내부적 단계로 서로 간섭되지 않는 모델
다. 데이터독립성 요소
①. 외부스키마: 뷰단계. 여러 개의 사용자관점으로 구성, 개개 사용자가 보는 개인적 DB스키마
②. 개념스키마: 개념단계. 하나의 개념적 스키마로 구성. 모든 응용시스템들이 사용자들이 필요로 하는 데이터를 통합한 조직 전체의 DB를 기술
③. 내부스키마: 내부단계. 내부 스키마로 구성. DB가 물리적으로 저장된 형식
라. 두 영역의 데이터 독립성
①. 논리적 독립성: 개념 스키마가 변경 되어도 외부 스키마에는 영향을 미치지 않음, 논리적 구조가 변경돼도 응용 프로그램에 영향 없음
②. 물리적 독립성: 내부 스키마가 변경되어도 외부, 개념스키마는 영향없음
마. 사상(맵핑)
①. 외부적/개념적 사상(논리적 사상): 외부적 뷰와 개념적 뷰의 상호 관련성을 정의함, 외부화면이나 사용자에게 인터페이스하기 위한 스키마 구조는 전체가 통합된 개념적 스키마와 연결
②. 개념적/내부적 사상(물리적 사상): 개념적 뷰와 저장된 데이터베이스의 상호관련성 정의함, 통합된 개념적 스키마 구조와 물리적으로 저장된 구조의 물리적인 테이블 스페이스와 연결되는 구조.
1-1-7. 데이터 모델링의 중요한 세 가지 개념
가. 데이터 모델링의 세 가지 요소 데이터 모델링을 구성하는 중요한 개념 세가지
개념 |
복수/집합개념 타입/클래스 |
개별/단수개념 어커런스/인스턴스 |
어떤 것 (Thing) |
엔터티 타입(Entity Type) |
엔터티(Entity) |
엔터티(Entity) |
인스턴스(Instance) 어커런스(Occurrence) |
|
어떤 것 간의 연관 (Association between Things) |
관계(Relationship) |
페어링(Pairing) |
어떤 것의 성격 (Characteristic of a Thing) |
속성(Attribute) |
속성값(Attribute Value) |
1-1-8. 데이터 모델의 표기법인 ERD의 이해
가. 데이터 모델 표기법: 1976년 피터첸, IE표기법, 바커 표기법(읽는법 학습)
나. ERD 표기법을 이용하여 모델링하는 방법
1-1-9. 좋은 데이터 모델의 요소: 완전성, 중복배제, 업무규칙, 데이터 재사용, 의사소통, 통합성
1-2. 엔터티
1-2-1. 엔터티의 개념
①. 엔터티는 사람, 장소, 물건, 사건 개념 등의 명사에 해당한다.
②. 엔터티는 업무상 관리가 필요한 관심사에 해당한다.
③. 엔터티는 저장이 되기 위한 어떤 것이다.
1-2-2. 엔터티와 인스턴스에 대한 내용과 표기법
- 엔터티는 인스턴스의 집합
1-2-3. 엔터티의 특징
①. 반드시 해당 업무에서 필요하고 관리하고자 하는 정보
②. 유일한 식별자에 의해 식별이 가능해야 한다
③. 영속적으로 존재하는 인스턴스의 집합: 인스턴스가 한 개 밖에 없는 엔터티는 집합이 아니므로 엔터티 성립이 안됨
④. 엔터티는 업무 프로세스에 의해 이용되어야 한다.
⑤. 엔터티는 반드시 속성이 있어야 한다. 예외로 관계엔터티의 경우는 주식별자 속성만 가지고 있어도 엔터티로 인정
⑥. 엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다. 관계를 생략하여 표현해야하는 경우는 통계성 엔터티, 코드성 엔터티, 시스템 처리시 내부 필요에 의한 엔터티 도출과 같은 경우다.
1-2-4. 엔터티의 분류
가. 유무형에 따른 분류: 유형엔터티, 개념엔터티, 사건 엔터티
나. 발생시점에 따른 분류: 기본/키 엔터티, 중심엔터티, 행위엔터티
1-2-5. 엔터티의 명명
①. 현업업무에서 사용하는 용어를 사용한다.
②. 약어를 사용하지 않는다.
③. 단수명사를 사용한다.
④. 모든 엔터티에서 유일하게 이름을 부여한다.
⑤. 엔터티 생성의미대로 이름을 부여한다.
1-3. 속성
1-3-1. 속성의 개념
①. 업무에서 필요로 한다.
②. 의미상 더 이상 분리되지 않는다.
③. 엔터티를 설명하고 인스턴스의 구성요소가 된다.
1-3-2. 엔터티 인스턴스와 속성, 속성값에 대한 내용과 표기법
가. 엔터티, 인스턴스, 속성, 속성값의 관계
①. 1개의 엔터티는 2개 이상의 인스턴스의 집합
②. 1개의 엔터티는 2개 이상의 속성을 갖는다.
③. 1개의 속성은 1개의 속성값을 갖는다
나. 속성의 표기법: 엔터티 내에 이름을 포함하여 표현하면 된다.
1-3-3. 속성의 특징
①. 해당 업무에서 필요하고 관리하고자 하는 정보
②. 정규화 이론에 근간하여 정해진 주식별자에 함수적 종속성을 가져야 한다
③. 하나의 속성에는 1개의 값만 가진다. 하나의 속성에 다중값일 경우 별도의 엔터티를 이용하여 분리한다.
1-3-4. 속성의 분류
가. 속성의 특성에 따른 분류
①. 기본 속성: 업무로부터 추출한 모든 속성이 여기에 해당.
②. 설계 속성: 데이터 모델링을 위해 업무를 규칙화하기 위해 속성을 만든 것. 코드성 속성.
③. 파생 속성: 다른 속성에 영향을 받아 발생하는 속성으로서 보통 계산된 값들이 해당
나. 엔터티 구성방식에 따른 분류
①. PK속성: 엔터티를 식별할 수 있는 속성
②. FK속성: 다른 엔터티와의 관계에서 포함된 속성
③. 일반속성: 위 두 개에 포함되지 않는 속성
1-3-5. 도메인: 각 속성이 가질 수 있는 값의 범위. 엔터티 내에 속성에 대한 데이터타입과 크기, 제약사항을 지정하는 것.
1-3-6. 속성의 명명
①. 해당 업무에서 사용하는 이름을 부여
②. 서술식 속성명을 사용하지 않는다.
③. 약어사용은 가급적 제한한다.
④. 전체 데이터모델에서 유일성 확보하는 것이 좋다.
1-4. 관계
1-4-1. 관계의 개념
가. 관계의 정의: 인스턴스 사이의 논리적인 연관성으로서 존재 또는 행위로서 서로에게 연관성이 부여된 상태
나. 관계의 페어링: 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것을 페어링이라 하고 개별 인스턴스가 각각 다른 종류의 관계를 가지고 있다면 두 엔터티 사이에 두 개 이상의 관계가 형성될 수 있다.
1-4-2. 관계의 분류
①. 존재에 의한 관계
②. 행위에 의한 관계
1-4-3. 관계의 표기법
①. 관계명: 관계시작점, 관계끝점
②. 관계차수: 1:1, 1:M, M:N
③. 관계선택사양: 필수관계(모든 참여자가 반드시 관계갖는), 선택관계(할수도 있고 안할수도있고)
1-5. 식별자
1-5-1. 식별자 개념
①. 식별자는 엔터티를 구분짓는 논리적인 이름
②. 식별자는 엔터티를 대표할 수 있는 속성
③. 엔터티에는 반드시 하나의 유일한 식별자가 존재
1-5-2. 식별자의 특징
①. 유일성: 주식별자에 의해 엔터티 내에 모든 인스턴스들이 유일하게 구분되야 한다.
②. 최소성: 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.
③. 불변성: 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다.
④. 존재성: 주식별자가 지정이 되면 반드시 값이 들어와야 한다.
1-5-3. 식별자 분류 및 표기법
분류 |
식별자 |
설명 |
대표성 여부 |
주식별자 |
엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조관계를 연결할 수 있는 식별자 |
보조식별자 |
엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계 연결을 못함 |
|
스스로 생성 여부 |
내부 식별자 |
엔터티 내부에서 스스로 만들어지는 식별자 |
외부 식별자 |
타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자 |
|
속성의 수 |
단일 식별자 |
하나의 속성으로 구별된 식별자 |
복합 식별자 |
둘 이상의 속성으로 구성된 식별자 |
|
대체 여부 |
본질 식별자 |
업무에 의해 만들어지는 식별자 |
인조 식별자 |
업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자 |
1-5-4. 주식별자 도출기준
①. 해당 업무에서 자주 이용되는 속성을 지정한다
②. 명칭, 내역 등과 같이 이름으로 기술되는 것들을 피한다
③. 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.
1-5-5. 식별자 관계와 비식별자 관계에 따른 식별자
- 식별자 관계로만 설정할 경우의 문제점: 식별자 관계로만 연결된 모델의 경우 주식별자 속성이 지속적으로 증가한다. 복잡성과 오류가능성을 유발시킬 수 있다.
- 비식별자 관계로만 설정할 경우의 문제점: 비식별자 관계로 설정할 경우 속성이 자식엔터티로 상속되지 않는다. 불필요한 조인이 발생되고 SQL구문도 길어져 성능 저하 현상이 발생.
2. 데이터 모델과 성능
2-1. 성능 데이터 모델링의 개요
2-1-1. 성능 데이터 모델링의 정의: DB 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 한다. 정규화, 반정규화를 통해서 한다
2-2. 정규화와 성능
2-2-1. 정규화를 통한 성능 향상 전략
- 정규화란 다양한 유형의 검사를 통해 데이터 모델을 좀더 구조화하고 개선시켜 나가는 절차에 관련된 이론이다. 정규화를 수행한다는 것은 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것이다.
2-2-2. 정규화 방법
- 제 1 정규화 / 제 2 정규화 / 제 3 정규화
2-3. 반정규화와 성능
2-3-1. 반정규화를 통한 성능향상 전략
- 데이터를 조회할 때 디스크I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 컬럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행
2-3-2. 반정규화 기법
기법분류 |
기법 |
내용 |
테이블 병합 |
1:1 관계 테이블병합 |
1:1 관계를 통합하여 성능향상 |
1:M 관계 테이블병합 |
1:M 관계 통합하여 성능향상 |
|
슈퍼/서브타입 테이블병합 |
슈퍼/서브 관계를 통합하여 성능향상 |
|
테이블 분할 |
수직분할 |
컬럼단위의 테이블을 디스크 I/O를 분산처리 하기 위해 테이블을 1:1로 분리하여 성능향상(트랜잭션의 처리되는 유형을 파악이 선행되어야 함) |
수평분할 |
로우 단위로 집중 발생되는 트랜잭션을 분석하여 디스크 I/O 및 데이터접근의 효율성을 높여 성능을 향상하기 위해 로우단위로 테이블을 쪼갬(관계가 없음) |
|
테이블 추가 |
중복테이블 추가 |
다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격조인을 제거하여 성능을 향상 |
통계테이블 추가 |
SUM, AVG 등을 미리 수행하여 계산해 둠으로써 조회 시 성능을 향상 |
|
이력테이블 추가 |
이력테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력테이블에 존재하는 방법은 반정규화의 유형 |
|
부분테이블 추가 |
하나의 테이블의 전체 컬럼 중 자주 이용하는데 자주 이용하는 집중화된 컬럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 컬럼들을 모아놓은 별도의 반정규화된 테이블을 생성 |
2) 컬럼 반정규화
반정규화 기법 |
내용 |
중복컬럼 추가 |
조인에 의해 처리할 때 성능저하를 예방하기 위해 즉, 조인을 감소시키기 위해 중복 된 칼럼을 위치시킴 |
파생컬럼 추가 |
트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능저하를 예방하기 위해 미리 값을 계산하여 갈럼에 보관함. Derived Column이라고 함 |
이력테이블 컬럼 추가 |
대량의 이력데이터를 처리할 때 불특정 날 조회나 최근 값을 조회할 때 나타날 수있는 성능저하를 예방하기 위해 이력테이블에 기능성 칼럼 (최근값 여부. 시작과 종료일자 등)을 추가함 |
PK에 의한 컬럼 추가 |
복합의미를 갖는 PK를 단일 속성으로 구성하였을 정우 발생됨. 단일 PK안에서 특정값을 별도로 조회하는 경우 성능저하가 발생될 수 있음 이 때 이미 PK안에 데이터가 존재하지만 성능향상을 위해 일반속성으로 포함하는 방법이 PK의한 칼럼추가 반정규화임 |
응용시스템 오작동을 위한 컬럼 추가 |
업무적으로는 의미가 없지만 사용자가 데이터처리를 하다가 잘못 처리하여 원래 값으로 복구하기를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법. 컬럼으로 이것을 보관하는 방법은 오작동 처리를 위한 임시적인 기법이지만 이것을 이력데이터 모델로 풀어내면 정상적인 데이터 모델의 기법이 될 수 있음 |
3) 관계 반정규화
반정규화 기법 |
내용 |
중복관계 추가 |
데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만 이 때 발생할 수 있는 성능저하를 예방하기 위해 추가적인 관계를 맺는 방법이 관계의 반정규화임 |
2-4. 대용량 데이터에 따른 성능
2-4-1. 대량 데이터 발생에 따른 테이블 분할 개요: 수평분할, 수직분할
2-4-2. 한 테이블에 많은 수의 칼럼을 가지고 있는 경우
2-4-3. 대량 데이터 저장 및 처리로 인해 성능이 저하되는 경우
- 파티셔닝: 범위 파티션, 리스트 파티션, 해쉬 파티션
- pk에 의한 테이블 분할
2-4-4. 테이블에 대한 수평분할/수직분할의 절차
2-5. DB 구조와 성능
2-5-1. 슈퍼/서브타입 모델의 성능고려 방법
① 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성 (One to One)
② 슈퍼타입 + 서브타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼타입 + 서브타입 테이블로 구성 (Plus)
③ 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성 (Single)
2-6. 분산DB 데이터에 따른 성능
2-6-1. 데이터베이스 분산 설계시 효과
- 성능이 중요한 사이트에 적용
- 공통코드, 기준정보, 마스터 데이터 등에 대해 분산환경을 구성
- 실시간 동기화가 요구되지 않을 떄, 실시간의 업무적인 특징을 가지고 있을 때 분산 환경 구성
- 특정 서버에 부하가 집중이 될 때 부하를 분산할 때
- 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성