1 논리 데이터 저장소 확인
1 자료 구조
1 개념
자료를 효율적으로 저장하기 위해 만들어진 논리적인 구조
2 분류
선형 구조
- 배열
- 연결 리스트
- 스택
- 큐
비선형 구조
- 트리
- 그래프
3 리스트
- 선형 리스트: 배열, 빠른 접근, 삽입 삭제 시 기존 자료의 이동
- 연결 리스트: 노드, 느린 접근, 노드의 삽입 삭제가 편리
4 스택 / 큐 / 데크
스택
LIFO 형식
PUSH, POP, TOP
큐
FIFO 형식
ENQUEUE, DEQUEUE
데크
큐의 양 끝에서 삽입 삭제
5 트리
1 개념
데이터를 계층화시킨 자료 구조
노드 간 링크로 구성
2 용어
- 루트 노드: 부모가 없는 노드
- 단말 노드: 자식이 없는 노드
- 레벨: 루트 노드로부터의 경로의 길이+1
- 조상 노드: 루트에 이르는 경로상 모든 노드
- 자식 노드: 다음 레벨의 노드
- 부모 노드: 이전 레벨의 노드
- 형제 노드: 같은 부모를 가진 노드
- 깊이: 최대 레벨
- 차수: 자식 노드 수
3 트리 순회방법
- 전위 순회: Root -> Left -> Right
- 중위 순회: Left -> Root -> Right
- 후위 순회: Left -> Right -> Root
4 이진 트리
1 개념
차수가 2 이하인 노드로 구성된 트리
2 유형
- 포화 이진 트리: 모든 레벨에서 노드가 꽉 채워진 트리
- 완전 이진 트리: 마지막 레벨을 제외하고 노드가 채워진 트리
- 편향 이진 트리: 노드가 한 방향으로만 존재하는 트리
6 그래프
1 개념
노드와 간선을 모아놓은 자료 구조
2 유형
- 방향 그래프
- 무방향 그래프
3 표현방법
그래프 G = (V, E)
V(G) = 정점(Vertices)
E(G) = 간선(Edges)
4 용어
- 경로: 임의의 정점에서 다른 정점으로 이르는 길
- 경로 길이: 경로상 있는 간선의 수
- 단순 경로: 한 경로의 모든 간선이 다를 때의 경로
- 사이클: 동일 정점에서 시작과 끝이 이어지는 경로
2 논리 데이터 저장소
1 개념
데이터를 추상화한 저장소
구조
- 개체: 관리할 대상이 되는 실체
- 속성: 관리할 정보의 구체적 항목
- 관계: 개체 간의 대응 관계
2 검증 절차
- 개체 확인: 입출력 데이터 식별, 연계 데이터 식별, 신규 데이터 요구사항 식별
- 속성 확인: 데이터 속성, 공통코드 파악 수준 점검, 외부 연계 데이터 속성 파악 수준 점검
- 관계 확인: 개체 간 관계의 적절성 확인, 무결성 보장 여부 확인
- 데이터베이스 요구사항 확인: 데이터베이스 백업 및 복구 정책, 초기 데이터 구축 방안 요구사항 확인
- 데이터 흐름 확인: 프로세스별 입출력 데이터 정의 수준 확인
- 데이터 설계 기준 확인: 데이터베이스 설계 표준 지침 작성 여부 및 적절성 확인
- 데이터 접근권한 확인: 데이터 접근권한 및 통제 분석 적정성 확인
2 물리 데이터 저장소 설계
1 물리 데이터 저장소
1 개념
논리 데이터 모델을 데이터베이스 저장 구조로 변환하기 위한 데이터 저장소
2 모델 변환
절차
- 개체(Entity) -> 테이블
- 속성 -> 컬럼
- UID -> 기본키
- 관계를 외래키로 변환
- 컴럼 유형과 길이 정의
- 반 정규화(De-normalization)
반 정규화 수행 방법
- 중복 테이블 추가
- 테이블 조합: 1:1 관계 테이블 조합 / 1:M 관계 테이블 조합 / 슈퍼 타입 서브 타입 테이블 조합
- 테이블 분할: 수직 분할 / 수평 분할
- 테이블 제거: 접근하지 않는 테이블 제거
- 컬럼 중복화: 조인 성능 향상
3 구성
- 테이블 제약조건 설계
- 삭제 제약조건
- 연쇄: 외부키와 일치하는 모든 Row 삭제
- 제한: 외부키에 없는 것만 삭제 가능
- 무효: 외부키와 일치한 것을 Null로 수정
- 갱신 제약조건
- 연쇄: 외부키와 일치하는 모든 Row 수정
- 제한: 외부키에 없는 것만 수정 가능
- 무효: 외부키와 일치하는 것을 Null로 수정
- 삭제 제약조건
- 인덱스 설계
- 인덱스 적용 기준
- 조회 및 출력 조건으로 사용되는 컬럼인 경우 적용
- 인덱스 자동생성 기본키와 Unique키의 제약조건을 사용할 경우 적용
- 인덱스 컬럼 선정
- 분포도가 좋은 컬럼은 단독적으로 생성
- 자주 조합되어 사용되는 컬럼은 결합 인덱스로 생성
- 수정이 빈번하지 않은 컬럼 선정
- 고려사항
- 지나치게 많은 인덱스는 오버헤드로 작용
- 인덱스는 추가적인 저장 공간 필요
- 넓은 범위 인덱스 처리 시 오히려 전체 처리보다 많은 오버헤드 발생 가능
- 인덱스 적용 기준
- 뷰 설계
- 뷰 속성
- REPLACE: 뷰가 이미 존재하는 경우 재생성
- FORCE: 기본 테이블의 존재 여부에 관계 없이 뷰 생성
- NOFORCE: 기본 테이블이 존재할 때만 뷰 생성
- WITH CHECK OPTION: 서브 쿼리 내의 조건을 만족하는 행만 변경
- WITH READ ONLY: DML 작업 불가
- 고려사항
- 수행속도 문제
- 뷰 SELECT 문의 조건은 최적의 엑세스 경로 사용
- 뷰 속성
- 클러스터 설계
- 적용 기준
- 인덱스의 단점을 해결, 분포도가 넓을수록 유리
- 액세스 효율 향상을 위한 물리적 저장 방법(액세스 기법 X)
- 분포도 넓은 테이블의 클러스터링은 저장 공간의 절약 가능
- 대량 범위를 자주 액세스하는 경우 적용
- 여러 개의 테이블이 빈번하게 조인을 일으킬 때 활용
- 고려사항
- 입력, 수정, 삭제 시 부하가 증가
- UNION, DISTINCT, ORDER BY, GROUP BY가 빈번한 컬럼은 검토 대상
- 수정이 자주 발생하지 않는 컬럼은 검토 대상
- 처리 범위가 넓어 문제가 발생하는 경우 단일 테이블 클러스터링을 고려
- 조인이 많아 문제가 발생하는 경우 다중 테이블 클러스터링 고려
- 적용 기준
- 파티션 설계
- 파티션 종류
- 레인지 파티셔닝: 지정한 열의 값을 기준으로 분할
- 해시 파티셔닝: 해시 함수에 따라 데이터 분할
- 리스트 파티셔닝: 미리 정해진 그룹핑 기준에 따라 데이터 분할
- 컴포지트 파티셔닝범위 분할 이후 해시 함수를 적용하여 재분할
- 파티션 장점
- 성능 향상: 데이터 액세스 범위 감소
- 가용성 향상: 훼손 가능성 감소
- 백업 가능: 분할 영역 독립적 백업 및 복구 가능
- 경합 감소: 디스크 스트라이핑으로 입출력 성능 향상
* 디스크 스트라이핑: 성능 향상을 위해 데이터를 1개 이상의 디스크 드라이브에 저장하여 병렬로 사용
- 파티션 종류
- 디스크 구성 설계
- 정확한 용량 산정 -> 효율 향상
- 업무량이 집중되어 있는 디스크를 분리하여 설계
- 입출력 경합 최소화 -> 데이터 접근 성능 향상
2 ORM 프레임워크
1 개념
관계형 데이터베이스와 객체지향 프로그래밍 언어 간 호환되지 않는 데이터를 변환하는 프로그래밍 기법
객체지향 언어에서 사용하는 객체를 관계형 데이터베이스로 변환하여 테이블을 구성하는데 활용
2 유형
- SQL Mapping 기반 기술
- iBatis: SQL에 기반한 데이터베이스와 자바, 닷넷, 루비 등을 연결시켜 주는 역할을 하는 개발 프레임워크
- Mybatis: 자바의 관계형 DB 프로그래밍을 쉽게 할 수 있도록 도와주는 개발 프래임워크
- OR Mapping 기반 기술
- Hibernate: 자바 언어를 위한 객체 관계 매핑 프레임워크
3 매핑 기법
- 객체 - 테이블
- 속성 - 컬럼
- 오퍼레이션 - 프로시저/함수
4 절차
절차
- 클래스 -> 테이블: 클래스의 인스턴스를 테이블의 레코드로 변환
- 애트리뷰트 -> 컬럼: 클래스 인스턴스의 애트리뷰트를 테이블 컬럼으로 변환
- 클래스 간 관계 -> 테이블 간 관계: 클래스 간 관계를 테이블 제약사항으로 변환
논리 데이터 저장소 구조
구분 | 부분적 ORM | 완전 ORM |
---|---|---|
개요 | SQL을 특정 이름으로 정의하여 사용 | 내부 엔진에서 SQL 자동생성 |
매퍼 사용 | SQL Mapper | Object Relation Mapper |
방법 | iBatis, MyBatis, Embeded SQL | Hibernate |
장점 | 데이터 전송 방식의 효율성 | 효율적인 매핑 기법 |
3 트랜잭션 인터페이스
1 개념
데이터베이스 트랜잭션의 골격 및 인터페이스를 정의
2 특징
ACID 원칙 기반
- 원자성: 트랜잭션 연산을 모두 반영 or 모두 반영 X(All or Nothing)
- 일관성: 트랜잭션이 성공적으로 완료 시 일관성 있는 데이터베이스 상태 유지
- 독립성: 둘 이상 트랜잭션 동시 실행 시 한 개의 트랜잭션만 접근 가능(간섭 불가)
- 영속성: 성공적으로 완료된 트랜잭션 결과는 영구 반영
3 설계
데이터 접근 방법 및 인터페이스를 절차적으로 명세
트랜잭션 인터페이스는 주로 프로그래밍 언어로 구현
사례: JDBC, ODBC
3 데이터 조작 프로시저 작성
1 프로시저
1 개념
SQL을 이용해 생성된 데이터를 조작하는 프로그램
데이터베이스 내부에 저장, 일정 조건에 따라 자동 수행
2 절차형 데이터 조작 프로시저
Oracle PL/SQL
개념
표준 SQL을 기본으로 Oracle에서 개발한 데이터 조작 언어
장점
- 컴파일 불필요
- 모듈화 가능
- 절차적 언어 사용
- 에러 처리
구성
- 선언부
- 실행부
- 예외부
활용
- 저장된 프로시저
- 저장된 함수
- 저장된 패키지
- 트리거
2 프로그램 디버깅
1 개념
프로시저에 대한 검증 작업
2 도구
SQL Plus
명령어
- 파일 명령어
- 편집 명령어
- 실행 명령어
- 환경 명령어
- 형식 명령어
- 대화 명령어
3 단위 테스트 도구
1 개념
구현된 프로시저의 적합성을 확인하는 도구
2 PL/SQL 테스트
DBMS_OUTPUT 패키지 활용: 메시지를 버퍼에 저장, 버퍼로부터 메시지를 읽어오기 위한 패키지
DBMS_OUTPUT 패키지 기능
- DISABLE: 메시지 버퍼 내용 삭제
- ENABLE: 메시지 버퍼 내용 할당
- PUT: 메시지 마지막 라인 끝에 신규라인 문자 추가
- GET_LINE: 호출 시 한 줄 읽기
- GET_LINES: 지정된 라인 모두 읽기
4 데이터 조작 프로시저 최적화
1 쿼리 성능 측정
1 개념
프로시저에 있는 SQL 실행 계획은 분석, 수정 -> 최소 시간으로 원하는 결과를 얻오록 프로시저 수정
2 실행계획 기반 쿼리 성능 측정
SQL문을 분석 및 해석 -> 실행 계획 수립, 연관 테이블에 저장하도록 지원하는 도구
3 실행계획 실행
- 자동추적 모드 on
- 연관 테이블 확인
- 연관 테이블 결과 항목 정보
4 SQL 성능 개선 절차
- 문제 있는 SQL 식별
- 옵티마이저 통계 확인
- SQL문 재구성
- 인덱스 재구성
- 실행계획 유지관리
2 소스 코드 인스펙션
1 개념
프로시저 코드를 보면서 성능 개선
2 SQL 코드 인스펙션 대상
- 미사용 변수
- 미사용 서브쿼리
- Null 값 비교
- 과거 테이터 타입 사용
3 SQL 코드 인스펙션 절차
- 계획
- 개관: 문제점 공유
- 준비
- 검사
- 재작업
- 추적
'자격증 > 정보처리기사' 카테고리의 다른 글
정보처리기사 필기 2. 소프트웨어 개발 - Chapter 3. 제품 소프트웨어 패키징 (0) | 2020.08.18 |
---|---|
정보처리기사 필기 2. 소프트웨어 개발 - Chapter 2. 통합 구현 (0) | 2020.08.18 |
정보처리기사 필기 1. 소프트웨어 설계 - Chapter 4. 인터페이스 설계 (0) | 2020.08.18 |
정보처리기사 필기 1. 소프트웨어 설계 - Chapter 3. 애플리케이션 설계 (0) | 2020.08.17 |
정보처리기사 필기 1. 소프트웨어 설계 - Chapter 2. 화면 설계 (0) | 2020.04.20 |