목적
정보시스템 감리를 수행할 전문인력의 확보
정보시스템 감리체계의 확립 지원
민간부문 정보시스템 감리의 활성화 유도
 
개요
최근 급증하고 있는 감리수요의 충족과 민간부문의 감리활성화를 위하여 한국정보화진흥원에서 2001년부터 국가공인 정보시스템감리사 자격검정으로 매년 1회 실시하고 있습니다.
본 자격검정은 정보통신 분야의 고급기술자 이상의 자격을 갖춘 지원자를 선발하여 2주간의 감리 이론교육 및 개인별 1주간의 감리 실무교육을 실시한 후 정보시스템 감리관련 전문가로 구성된 정보시스템감리사 평가위원회의 심사를 거쳐 최종적으로 정보시스템 감리사 자격증을 수여하게 됩니다.
자격검정홍보, 지원서 배포 및 접수는 한국정보화진흥원 홈페이지에 응시원서접수 1~2개월전부터 관련내용을 게재하게 되며, 지원서는 한국정보화진흥원 정보시스템 감리사 홈페이지(http://auditor.nia.or.kr)를 통해 접수를 받고 있습니다.
 
자격검정절차
 
공고방법
 - 한국정보화진흥원 홈페이지 및 정보시스템 감리사
- 홈페이지(http://auditor.nia.or.kr)를 통하여 자격검정 공고
 
접수방법
 - 정보시스템 감리사 홈페이지(http://auditor.nia.or.kr)를통하여 접수
 
시험과목(5개 과목)
 - 감리 및 사업관리
- 소프트웨어공학
- 데이터베이스
- 시스템 구조 및 보안
- 보안
필기전형 합격자 선정 방법
 - 전형 과목별 100점 만점에 과목별 40점 이상인자 중
- 고득점자 순으로 합격자 선정(40점 미만 과락)
- 필기전형 총점의 동일 점수 취득자가 다수인 경우 아래 순으로 순위 부여
* 감리 및 사업관리 과목 우수자 → 소프트웨어공학 과목 우수자 → 데이터베이스 과목 
우수자 → 시스템 구조 및 보안 과목 우수자 → 생년월일 연소자
필기전형 합격자 통보
 - 한국정보사회진흥원 홈페이지 및 정보시스템 감리사 홈페이지(http://auditor.nia.or.kr)
에 합격자 명단 게재
- 합격자에 한하여 개별통보(전화, E-Mail 등)
 
면접전형 대상자
 - 해당 회차의 필기전형 합격자 
- 이전 회차의 면접전형 탈락자로 1회의 면접전형 기회 부여자
면접전형 합격자 선정
 - 면접전형 평가에 따라 합격자 선정
 
이론교육 대상자
 - 해당 회차 면접전형 합격자 
- 이전 이론교육 탈락자로 차회 1회에 한하여 재교육 기회 부여자
이론교육 방법 및 과목
 - 이론강의 및 감리사례 실습을 병행하여 실시 
- 이론강의 : 정보시스템 감리를 위해 필수적인 감리관련 
전문지식을 중점적으로 교육 
- 사례실습 : 각 과목별로 사례 중심으로 팀별 또는 개인별 
실습교육 시행 및 보고서 작성 
이론교육 합격자의 선정 
- 이론강의 평가, 사례실습평가, 출석결과를 토대로 결정
 
현장 실무교육 대상자
 - 해당 회차의 이론교육 합격자 
- 이전 회차의 현장 실무교육 탈락자로 1회의 재교육 기회 부여자
교육방법
 - 개인의 희망분야 및 전문분야를 고려하여 감리가능 분야를 선정 
- 감리실무교육 기간중 개인별로 현장실무 결과보고서 작성 및 제출
현장실무교육 합격자 선정
 - 현장실무교육 평가에 따라 합격자 선정
 
자격증 수여대상자
 - 각 단계별 교육과정을 모두 합격한 자 
- 특별한 결격 사유가 없는 자
 




감리원 :행정안전부장관에게 감리원증을 교부받은 자.
감리원증 교부 절차 
감리교육을 이수한 후 관련 서류를 행정안전부장관에게 제출
감리원 자격 기준
등급자격기준제출서류
자격증명서류경력증명서류
수석감리원- 정보기술 직무분야 기술사
  ∙ 정보관리기술사
  ∙ 컴퓨터시스템응용기술사
    (구 전자계산기조직운용기술사)
자격증 사본 또는 한국산업인력공단에서 발급한 자격취득사항 확인서정보처리 관련 경력증명서. 다만, 해당자격 취득시 경력요건을 확인한 경우에는 제출한 것으로 갈음
- 국가 공인 정보시스템 감리사자격증 사본 또는 한국정보화진흥원에서 발급한 자격취득 증명서
감리원- 정보처리 직무분야 기사 자격을 취득한 후 7년 이상 정보처리분야 업무를 수행한 자 
- 정보처리 직무분야 산업기사 자격을 취득한 후 10년 이상 정보처리분야 업무를 수행한 자
자격증 사본 또는 한국산업인력공단에서 발급한 자격취득사항확인서자격기준에 따른 기간의 경력을 증명할 수 있는 정보처리분야 업무 경력증명서
정보시스템 감리 유사자격 취득자
정보통신기술사 
한국전산원의 『정보시스템 감리인 인정서』자격을 취득한 자 
한국정보보호진흥원의 『국가공인 정보보호전문가(SIS) 1급』자격을 취득한 자(다만, 정보처리분야 업무 경력이 5년 이상인 자에 한한다)
정보시스템감사통제협회(Information Systems Audit and Control Association)의 『CISA(Certified Information Systems Auditor) 정식자격』을 취득한 자(다만, 정보처리분야 업무 경력이 5년 이상인 자에 한한다)
자격증 사본 또는 해당 자격 관리기관에서 발급한 자격취득증명서자격기준에 따른 기간의 경력을 증명할 수 있는 정보처리분야 업무 경력증명서(해당자에 한함)
정보처리 경력 인정 방법
정보처리분야 경력의 종류제출 서류
1. 정보시스템 감리 업무를 수행한 경력
가. 감리법인에서 감리원으로 근무한 경력
나. 법 제11조제3항에 따라 감리를 수행한 기관에서 감리업무를 수행한 경력
감리법인 또는 해당 기관에서 발급한 경력증명서(담당 업무 내용 포함)
2. 다음 각 목의 어느 하나에 해당하는 업체 또는 기관에서 정보시스템의 구축, 운영, 
   유지보수 등의 업무를 수행한 경력

가. 「소프트웨어산업진흥법」에 따른 소프트웨어사업자
나. 「엔지니어링기술진흥법」에 따라 통신/정보처리 기술부문으로 신고한 엔지니
       어링활동주체

다. 「법인세법」또는「부가가치세법」에 따라 정보처리 및 기타 컴퓨터 운영 관련
       업종으로 등록한 사업자

라. 공공기관 또는 상법상의 주식회사에서 내부 정보시스템에 대한 구축/운영, 사업
       관리 등의 업무를 수행한 경력
해당 업체 또는 기관에서 발급한 경력증명서(근무부서 또는 업무내용 포함)
3. 정보화관련 연구, 기술자문, 강의 등을 수행한 경력
가. 공공기관에서 정보화 관련 분야의 연구, 기술자문 등의 업무를 수행한 경력
나. 「초·중등교육법」, 「고등교육법」, 「근로자직업능력개발법」, 「기능대학법」,
      「학원의 설립/운영 및 과외교습에 관한 법률」에 따른 교육기관에서 정보처리
       관련 학과 또는 분야의 교사 또는 교수로서 근무한 경력
해당 공공기관 또는 교육기관에서 발행한 경력증명서(담당 분야 또는 업무 내용 포함)
4. 그 밖에 정보처리 관련 분야의 업무로 인정되는 경력
가. 「공무원임용령」또는「지방공무원임용령」에 따른 정보통신직군의 "전산직
       렬"로서 국가 또는 지방 공무원으로 근무한 경력

나. 「병역법」에 따라 전산관련 병과 또는 주특기를 부여받고 군복무를 한 경력(대체
       복무 경력 포함)

다. 제1호 내지 제3호에 해당하는 업무를 수행한 것으로 인정되는 외국에서의 경력

국가, 지방자치단체의 경력증명서(직렬 포함)
병적증명서 또는 현역경력증명서

공증된 경력증명서




아미스(Armis) 연구진이 블루투스 프로토콜의 취약점을 악용하는 공격인 블루본(BlueBorne)을 시연하면서 공격자가 대상 기기에 대한 원격 제어 권한을 아주 쉽게 획득할 수 있다는 오싹한 사실이 드러났다.

우선 기기에 저장되어 있는 모든 파일 보기가 가능하다. 그뿐만 아니라 해당 파일을 간단히 암호화해 랜섬웨어 공격도 할 수 있다. 카메라 켜기 또한 간단하다. 아무도 모르게 회의 내용을 도청하고 대화를 모니터링할 수 있다. 악성코드는 클릭 한번이면 설치할 수 있다. 아무도 눈치채지 못하게 말이다.

하지만 필자가 무엇보다 두려움을 느낀 점은 블루본이 블루투스 기반 공격에서 빙산의 일각에 불과하다는 사실이다.

사물인터넷 보안 업체 아미스의 연구진은 안드로이드, 마이크로소프트 윈도우, 리눅스, iOS용 블루투스 구현에서 8개의 취약점을 발견했다. 사실상 블루투스 기능이 있는 거의 모든 기기가 공격에 취약하다는 이야기다. 스마트폰, 태블릿, 노트북 외에도 TV, 시계, 엔터테인먼트 기기, 어린이용 장난감, 심지어 자동차와 홈 오토메이션 시스템도 해당된다.

블루투스 기능이 있는 모든 기기가 취약한 것이다. 아미스 연구진은 위험에 노출된 기기의 수가 53억 개를 넘을 것으로 추산했다.

아미스 연구진은 "블루본 공격 특징은 사용자 동작이 필요없고 모든 소프트웨어 버전과 호환된다. 블루투스가 활성화되어 있어야 한다는 점을 제외하면 어떠한 사전 조건이나 구성도 필요 없다"고 밝혔다.

상시 가동, 상시 수신의 위험
블루본은 블루투스를 지원하는 기기는 연결 가능한 다른 기기의 신호를 항상 수신 대기한다는 점을 이용한다. 첫 무선 연결을 위해서는 일반적으로 수동 페어링이 필요하지만 일단 페어링되면 이후 해당 기기들은 서로 거리가 근접해지면 자동으로 재연결된다.

블루본은 취약점을 이용해 이 페어링 프로세스를 거치지 않고 근처의 기기와 블루투스 연결을 설정한다. 일부러 블루투스 기기 목록을 확인하지 않는 한 블루본을 사용한 연결이 발각될 가능성은 거의 없다.

아미스 CTO이자 공동 창업자인 나디르 이즈라엘은 "블루본은 지금은 존재하지 않는 프로토콜의 약점 또는 취약한 PIN 코드와 관련된 인증 기반 문제를 이용했던 과거의 블루투스 기반 악용과는 다르다. 사용자가 뭔가를 해야 한다는 조건이 없다"고 말했다.

어디선가 들어본 이야기다. 코드를 실행하고 이 기기에서 저 기기로 전파되는 악성코드는 바로 웜이다. 즉, 블루본은 블루투스를 통해 확산되는 IoT 웜의 기반이 된다.

이 취약점을 무기화할 수 있는 방법은 많다. 스포츠 경기를 관람한다고 생각해 보자. 경기장 내의 모든 블루투스 지원 기기가 하나의 기기에서 실행되는 공격에 취약한 채로 노출된다. 공격자는 악성코드가 설치된 기기를 들고 건물 안으로 들어가서 가까이 접근하는 것만으로 로비에 있는 다른 기기를 감염시킬 수 있다.

로비를 오가는 사람들이 휴대한 모든 취약한 기기는 감염 위험에 노출되며, 이렇게 감염된 기기들이 건물 안을 여기저기 돌아다니면서 감염은 더욱 확산되고 악성코드는 회사 네트워크에 깊숙이 자리잡게 된다. 모든 악성 활동이 블루투스를 통해 발생하므로 일부러 조사를 하기 전까지는 누구도 악성코드의 확산을 눈치챌 수 없다.

블루투스의 자동 연결 특성, 그리고 거의 모든 기기에서 기본적으로 블루투스가 활성화된다는 사실이 결합되어 이런 취약점의 심각성과 확산 능력을 배가시킨다. 일단 악성코드에 감염되면 해당 기기는 사무실 안에서든 공공 장소에서든 근처의 다른 블루투스 기기로 손쉽게 악성코드를 전파할 수 있다.

가능한 또 다른 시나리오는 기기를 블루투스 파인애플로 만들어 중간자(man-in-the-middle) 공격을 실행, 기기 간 전송되는 트래픽을 가로채거나 정상적 기기를 스푸핑해서 연결을 하이재킹하고 트래픽 경로를 재설정하는 것이다. 공격자는 MAC 주소를 식별하는 일반적인 툴을 사용해 근처의 블루투스 기기를 보고 특정 기기를 목표로 삼아 공격할 수 있다.

아미스 연구진은 "공격자는 기기를 탐색해 운영체제를 알아내 그에 따라 적절히 수법을 조정할 수 있다. 그런 다음 해당 플랫폼의 블루투스 프로토콜 취약점을 이용해 악의적인 목표를 달성하는 데 필요한 접근 권한을 획득할 수 있다"고 설명했다.

블루투스는 여러 시스템 수준 프로세스와 엮여 있기 때문에 일반적으로 기기에서 높은 권한을 갖는다. 블루투스가 해킹된다는 것은 악성코드 역시 이런 높은 권한으로, 때로는 루트 권한으로 실행됨을 의미한다.

블루투스의 스테이지프라이트
블루투스에서의 블루본은 2015년 발견된 안드로이드 버전의 스테이지프라이트(Stagefright) 취약점과 비슷한 면이 있다. 짐퍼리움(Zimperium) 연구원들이 안드로이드에서 문자 메시지를 통해 전송된 악성 동영상을 사용해 악성코드를 실행할 수 있는 스테이지프라이트 취약점을 발견한 이후 업계에서는 동영상 및 기타 멀티미디어 파일을 처리하는 미디어서버(mediaserver) 구성 요소와 립스테이지프라이트(libstagefright) 라이브러리에 이와 관련된 다른 취약점이 있는지 더 세심하게 살피게 됐다.

구글은 1년 넘게 월별 보안 업데이트를 통해 매달 꼬박꼬박 미디어서버 픽스를 내놨다. 대부분의 취약점은 최초의 스테이지프라이트 결함과는 관계가 없었지만 코드 내에서의 위치가 비슷했으며 조사의 강도가 높아진 덕분에 발견됐다.

블루투스에 필요한 것도 마찬가지다. 아미스 랩스 수석 연구원 벤 세리는 "블루본으로 분류되는 취약점 집합을 발견하는 것은 어렵지 않았다. 제로데이 취약점을 찾는 것은 연구팀의 일상적인 작업도 아니다"고 말했다. 세리는 "원격 코드 실행 취약점을 주로 다루는 사람이라면 누구나 결함을 찾을 수 있을 것"이라고 말했다.

세리와 이즈라엘이 우려하는 점은 블루투스에 잠재한 다른 취약점의 수다. 그동안 블루투스 프로토콜의 내부 작동에 대해 진지하게 관심을 기울인 사람이 없었기 때문에 그 수가 몇 개나 될지도 아무도 모른다는 것이다.

연구진은 "블루투스를 사용하는 다양한 플랫폼에서 아직 발견되지 않은 취약점이 많을 것으로 짐작된다. 연구에서 입증된 바와 같이 이런 취약점을 악용한 공격은 충분히 가능하다"고 전했다.

주요 업체들의 블루투스 구현 외에 맞춤형 블루투스 구현도 있다. 세리는 "주요 스택에 취약점이 있다면 맞춤형 구현에도 있을 가능성이 높다"고 말했다.

대부분의 기기는 패치 불가
구글과 마이크로소프트는 각각 안드로이드와 윈도우를 위한 9월 보안 업데이트에서 취약점을 수정하는 업데이트를 내놨으며 주요 리눅스 배포판도 수정 작업을 진행 중이다.

마이크로소프트는 윈도우 폰은 취약점에 해당되지 않는다고 밝혔고, 애플은 iOS 10에서 블루투스의 구현 방식을 변경해 아미스가 문제를 보고할 시기에는 이미 취약점이 제거된 상태였다. 아직 위험에 노출된 iOS 기기는 iOS 10 이전 버전을 실행하는 기기로, 아미스는 그 수를 약 1억 3,000만 개로 추산했다.

8가지 취약점은 다음과 같다.
- 리눅스 커널 RCE 취약점 – CVE-2017-1000251
- 리눅스 블루투스 스택(BlueZ) 정보 유출 취약점 – CVE-2017-1000250
- 안드로이드 정보 유출 취약점 – CVE-2017-0785
- 안드로이드 RCE 취약점 CVE-2017-0781 및 CVE-2017-0782
- 안드로이드의 블루투스 파인애플 – 논리 결함 CVE-2017-0783
- 윈도우의 블루투스 파인애플 – 논리 결함 CVE-2017-8628
- 애플 로우 에너지 오디오 프로토콜 ECE 취약점 – CVE 보류 중

다만 이러한 기기 가운데 상당수는 앞으로도 패치나 업데이트를 받지 못한다는 점도 감안해야 한다. 예를 들어 아미스의 추산에 따르면, 안드로이드 기기 가운데 업데이트가 가능한 비율은 45%(약 9억 6,000만 대)에 불과하다. 즉, 현재 전 세계적으로 약 11억 대의 안드로이드 기기가 취약한 상태로 사용되고 있다. 패치할 방법이 없거나 업데이트 과정이 너무 복잡해서 보편적인 사용자는 업데이트를 시도할 엄두도 내기 어려운 변형 리눅스를 실행하는 기기도 상당수다.

아미스는 꼭 필요한 경우가 아니라면 기기의 블루투스를 비활성화할 것을 권장한다. 필요하더라도 그때만 사용하고 일을 마치면 꺼야 한다. 결함을 수정하는 패치가 나와 기기가 업데이트되면 블루투스를 다시 켜 놓아도 안전하겠지만 필자 개인적으로는 사용하지 않을 때는 꺼두는 것이 보안 측면에서 좋은 습관이라고 생각한다. 불필요하게 공격 표면을 늘릴 이유가 없다.

미라이(Mirai)와 같은 블루본 봇넷 또는 블루본 웜, 둘 중에 어느 쪽이 잠재적으로 더 불안한 요소인지 필자는 잘 판단이 서지 않는다. 어느 쪽이든 블루투스를 지원하는 물건을 만드는 것보다 사용자 허락 없이는 기기가 상호 연결되기 어렵게 하는 것이 더 급선무인 것으로 보인다. editor@itworld.co.kr  

원문보기: 
http://www.itworld.co.kr/news/106402#csidx1ba696fa1f529eaa23bb14f9529e93f 





다음 문제를 풀어보세요.


17.70 트랜잭션 T1, T2, T3에 대하여 스케줄 s1, s2 중에서 충돌 직렬 가능한 (conflict serializable) 것은?


T1: r1(x); r1(z); w1(x);

T2: r2(z); r2(y); w2(z);

T3: r3(x); r3(y); w3(y);


s1: r1(x); r2(z); r1(z); r3(x); r3(y); w1(x); w3(y); r2(y); w2(z);

s2: r1(x); r2(z); r3(x); r1(z); r2(y); r3(y); w1(x); w2(z); w3(y);



1. s1  

2. s2  

3. s1, s2  

4. 없음




충돌직렬(Conflict serializability)


충돌직렬가능성의 정의는 아래와 같습니다.


동일한 데이터 Q에 대해 접근하는 트랜잭션 Ti, Tj의 내부의 연속적인 연산이 Ii, Ij일 경우


Ii = read(Q), Ij = read(Q) : 비충돌

Ii = read(Q), Ij = write(Q) : 충돌

Ii = write(Q), Ij = read(Q) : 충돌

Ii = write(Q), Ij = write(Q) : 충돌


즉, 서로 다른 트랜잭션에서 동일한 자원에 대해 연속적으로 읽기 / 읽기를 제외한 쓰기(write)가 하나라도 발생하면 충돌입니다. (읽기/쓰기, 쓰기/읽기, 쓰기/쓰기) 이런 충돌이 순환 사이클을 그리는 경우을 말합니다.




낮은 단계(하위 수준) 고립성 수준에서 발생하는 현상들


부정판독(Dirty Read)


다른 트랜잭션에 의해 커밋(commit)되지 않은 수정된 데이터를 참조하는 것을 의미한다. 수정을 가한 트랜잭션이 롤백(Rollback)되면 그 데이터를 참조한 트랜잭션은 일관되지 않은 상태에 놓이게 된다.



비반복 가능 판독(Non-Repeatable Reads)


한 트랜잭션에서 같은 데이터를 두번 이상 읽을 때, 그 중간에 다른 트랜잭션이 값을 갱신하거나 삭제함으로 읽은 값들이 서로 다르게 되는 현상이다.



팬텀판독(Phantom Read)


한 트랜잭션에서 같은 데이터를 두번 이상 읽을때, 그 중간에 다른 트랜잭션이 값을 추가함으로써 처음 데이터를 읽을때 없던 유령(Phantom) 레코드가 나타나는 현상이다. 

 




트랜잭션 고립성 수준(Transaction Isolation Level) - ANSI/ISO SQL 표준으로 정의



판독 비완료(Read Uncommitted)


커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다.



판독 완료(Read Committed)


트랜잭션이 커밋되어 완료된 데이터만 다른 트랜잭션이 읽도록 허용함으로써 부정판독(Dirty Read)를 방지해 준다.


반복 가능 판독(Repeatable Read)


오직 완료된 레코드만이 읽혀질 수 있으며, 같은 레코드의 반복적인 판독은 동일한 값을 반환한다. 즉, 첫번째 있던 레코드가 삭제되거나 값이 갱신되는 현상을 방지함으로써 비반복 가능판독(Non-Repeatable Read)를 방지해 준다.


직렬 가능(Serializable)


오직 완료된 레코드만이 읽혀질 수 있으며, 같은 레코드의 반복적인 판독은 동일한 값을 반환한다. 즉, 첫번째 있던 레코드가 삭제되거나 값이 갱신되는 현상을 방지함으로써 비반복 가능판독(Non-Repeatable Read)를 방지해 준다. 또한 새로운 레코드가 나타나지도 않음으로써, 팬텀 판독(Phantom Read)도 방지해 준다.


 

감리사문제)

SQL 1992(SQL2) 4가지 격리 수준(isolation level) 중에서 한 트랜잭션 내에서 동일한 데이터를 두 번 읽을 때서로 다른 값을 읽는 경우가 발생할 수 있는 격리 수준을 모두 고르시오. (2개 선택)


1. Read committed            

2. Serializable     

3. Repeatable read           

4. Read uncommitted




다음 문제를 풀어보세요.


17.69. 사용자 U1이 생성한 EMPLOYEE(Eno, Name, Salary) 테이블에 대해 다음의 SQL 명령을 순서대로 실행할 때, 권한 부여 에러가 발생하는 위치를 모두 모아놓은 것은?


 1

 U1: GRANT INSERT, DELETE ON EMPLOYEE TO U2;

 2

 U1: GRANT SELECT ON EMPLOYEE TO U3 WITH GRANT OPTION;

 3

 U2: GRANT INSERT ON EMPLOYEE TO U4;

 4

 U3: GRANT SELECT ON EMPLOYEE TO U5;

 5

 U5: GRANT SELECT ON EMPLOYEE TO U6;

 6

 U1: GRANT SELECT ON EMPLOYEE TO U6;

 7

 U1: REVOKE SELECT ON EMPLOYEE FROM U3;

 8

 U6: SELECT * FROM EMPLOYEE;

 9

 U5: SELECT * FROM EMPLOYEE;

 10

 U6: UPDATE EMPLOYEE SET Salary = Salary * 1.1;


1. 2, 3, 5

2. 3, 5, 10

3. 3, 5, 9, 10

4. 3, 5, 8, 9, 10



[풀이]


1. U1 → U2 (INSERT/DELETE)

2. U1 → U3 (SELECT) GRANT OPTION

3. U2 → U4 (INSERT) : [ERROR] 권한없음

4. U3 → U5 (SELECT)

5. U5 → U6 (SELECT) : [ERROR] 권한없음

6. U1 → U6 (SELECT)

7. U1 → U3 (SELECT) REVOKE

8. U6 

9. U5

10. U6 (UPDATE)  : [ERROR] 권한없음




다음 문제를 풀어보세요.


17.68. 질의 최적화 기법에 대한 설명으로 틀린 것은?


1. 주기억장치보다 더 큰 용량의 데이터에 대하여 SQL의 order by 절을 수행하기 위해서는 정렬-합병 전략의 외부 정렬을 수행해야 한다.


2. 관계대수의 실렉트 연산을 수행하기 위해서는 데이터베이스 전체를 읽어들이는 파일 스캔 탐색이나 인덱스를 활용한 인덱스 스캔 탐색을 수행한다.


3. 두 릴레이션 R과 S에 대하여 조인 연산을 수행할 때, R과 S의 레코드들이 조인 애트리뷰트 A와 B값에 물리적으로 정렬되어 있으면 분할-해시 조인이 가장 효율적으로 구현될 수 있다.


4. 외부 조인은 중첩 루프 조인이나 단일 루프 조인 알고리즘 중 하나를 수정하여 구현할 수 있다.



내부정렬과 외부정렬



○ 내부정렬 (internal sorting)


→ 데이터가 적어서 메인 메모리 내에 모두 저장시켜 정렬 가능할 때 사용함

→ 레코드의 판독(read)및 기록(write)에 걸리는 시간이 문제가 되지 않음



○ 외부정렬 (external sorting)


→ 데이터가 많아서 메인 메모리의 용량을 초과하여 보조기억장치(디스크, 테이프)에 저장된 파일을 정렬할 때 사용함

 레코드 판독 및 기록에 걸리는 시간이 중요한 요소임

 정렬/합병 (sort/merge)




조인 방식



○ 중첩반복 (Nested Loops) 조인


프로그래밍의 중첩 반복문과 유사한 방식으로 조인을 수행한다.


FOR 선행 테이블 읽음 -> 외부 테이블

FOR 후행 테이블 읽음 -> 내부 테이블

(선행 테이블과 후행 테이블 조인)


→ 동작 방법

1. 선행 테이블에서 주어진 조건을 만족하는 행을 찾음

2. 선행 테이블의 조인 키 값을 가지고 후행 테이블에서 조인 수행

3. 선행 테이블의 조건을 만족하는 모든 행에 대해 1번 작업 반복 수행



○ 정렬병합 (Sort Merge) 조인


조인 컬럼을 기준으로 데이터를 정렬하여 조인을 수행한다. 


→ 동작 방법

1. 선행 테이블에서 주어진 조건에 만족하는 행을 찾음

2. 선행 테이블의 조인 키를 기준으로 정렬 작업을 수행

3. 1~2번 작업을 선행 테이블의 조건을 만족하는 모든 행에 대해 반복 수행

4. 후행 테이블에서 주어진 조건에 만족하는 행을 찾음

5. 후행 테이블의 조인 키를 기준으로 정렬 작업을 수행

6. 3~4번 작업을 선행 테이블의 조건을 만족하는 모든 행에 대해 반복 수행

7. 정렬된 결과를 이용하여 조인을 수행하며 조인에 성공하면 추출버퍼에 넣음


Sort Merge Join은 대량의 정렬작업이 필요로 하므로 Hash Join이 성능상 더 유리하다고 한다.



○ 해시(Hash) 조인


해싱기법을 이용하여 조인을 수행한다. 


→ 동작 방법

1. 선행 테이블에서 주어진 조건을 만족하는 행을 찾음

2. 선행 테이블의 조인키를 기준으로 해쉬 함수를 적용하여 해쉬 테이블을 생성

3. 1~2번 작업을 선행 테이블의 조건을 만족하는 모든 행에 대해 반복 수행

4. 후행 테이블에서 주어진 조건을 만족하는 행을 찾음

5. 후행 테이블의 조인키를 기준으로 해쉬 함수를 적용하여 해당 버킷을 찾음 (조인키를 이용하여 실제 조인될 데이터를 찾음)

6. 조인에 성공하면 추출버퍼에 넣음

7. 3~5번 작업을 후행 테이블의 조건을 만족하는 모든 행에 대해서 반복 수행


Hash Join은 작은 테이블을 선행 테이블로 사용하는 것이 성능 관점에서 좋다고 한다. 

Hash Join은 해싱 함수의 특성상 동등 조인에만 사용할 수 있다.



다음 문제를 풀어보세요.


17.67. 물리적 데이테베이스 설계 단계에서 색인 구조를 결정하는데 도움이 되는 지침으로 틀린것은?


1. 한 애트리뷰트에 들어 있는 상이한 값들의 개수가 전체 레코드의 수와 비슷하고 검색에서 해당 애트리뷰트에 대한 동등 조건이 사용된다면 비 클러스터링(non-clustering) 색인을 생성하는 것이 좋다.


2. 갱신이 빈번하게 이루어지는 릴레이션에 대해서 색인을 많이 생성하여 갱신의 효율성을 증진할 수 있다.


3. 가능하면 정수형 애트리뷰트에 색인을 만드는 것이 좋고 반대로 VARCHAR 데이터 타입을 갖는 애트리뷰트에는 색인을 만드는 것을 피해야 한다.


4. 대량의 데이터를 사입할 때는 모든 색인들을 제거하고 데이터 삽입이 끝난 후에 색인들을 다시 생성하는 것이 효율적이다.



 

쿼리(Query) 종류


포인트쿼리 (Point query) 


조회되는 데이터가 한두개

select * from member where id='ryu'


범위쿼리 (Range query)
 

조회되는 데이터가 다수 
select * from member where date='2008/06/19'


커버드쿼리 (Covered query)

조회의 대상과 조회의 결과가 컬럼이 일치하는 상태. 인덱스 측면에서 제일 빠른 성능을 냄


Point query : select * from member where id='ryu' and pw='1234'

Covered query: select id from member where id='ryu' and pw='1234'




인덱스의 개념


인덱스는 데이터를 찾을 때(SELECT) 때 빨리 찾기 위해서 사용한다. 인덱스가 없다면 특정한 값을 찾기 위해 모든 데이터 페이지를 다 뒤져야 한다. 이것을 Table Scan 이라고 한다. 인덱스가 찾고자 하는 컬럼이나 표현식에 대해 존재하고, 인덱스를 사용하는 것이 더 효과적이라면, SQL 서버는 모든 페이지를 뒤지지 않고 인덱스 페이지를 찾아서 쉽게 데이터를 가져온다. 이것을 Index Seek라고 한다.

 인덱스의 단점

- 만드는데 시간이 걸린다.

- 만드는데 많은 공간이 필요하고, 만들고 난 후에도 추가적인 공간이 필요하다.

- 데이터를 수정(INSERT, UPDATE, DELETE)하는 시간, 특히 INSERT 작업은 오히려 더 많이 걸린다.


☞ 인덱스를 걸어야 할 컬럼

- WHERE 절에서 자주 사용되는 컬럼

- 자주 검색되는 컬럼(SELECT 절에서)

- 기본 키는 자동적으로 클러스터 인덱스가 만들어 진다.

- 참조 키(Foreign Key)에 인덱스를 걸면 조인 사용할 때에 조인의 속도를 향상시킨다. 색인이 자동적으로 만들어지지 않는다.

- 자주 JOIN으로 사용하는 컬럼(참조 키가 아닐 때)

- 정렬된 순서로 자주 사용되는 컬럼(가능하다면 클러스터 인덱스를 만드는 것이 좋다)

- 범위를 주고 찾는 컬럼(가능하다면 클러스터 인덱스를 만드는 것이 좋다)


인덱스를 걸지 않아야 할 컬럼

- 좀처럼 검색되지 않는 컬럼

- 전체 중 상당 부분을 가져오는 질의에 사용되는 컬럼

- 유일성, 또는 같은 값이 많은 컬럼

SELECT 속도보다 데이터의 변경 속도가 훨씬 중요할 때(되도록 색인의 수를 최소화 한다.)




인덱스의 종류


클러스터 인덱스 (Clustered Index)


① 테이블마다 단 한개의 클러스터 인덱스가 존재한다. 
② 물리적인 행(데이터)의 순서가 인덱스의 순서와 동일하다.
③ 인덱스의 맨 마지막 단계인 리프 레벨(Leaf Level)이 곧 데이터 페이지이다.
④ 실제 데이터의 순서와 인덱스의 순서가 일치하기 때문에 일정한 범위를 주고 찾는 경우 속도 향상에 도움이 된다.
⑤ Non-Clustered Index에 비해 색인의 단계가 한 단계 적기 때문에 색인의 크기도 작고 그만큼 빨리 찾을 수 있다.
⑥ 새로운 데이터가 입력되면 항상 물리적 순서를 색인의 순서에 맞추어야 하기 때문에 많은 데이터가 자신의 자리를 찾는 작업을 해야 하므로 이 부분에서는 오히려 넌클러스터드 인덱스보다 느리다.


넌-클러스터 인덱스 (Non-Clustered Index)

① 물리적인 행의 순서가 색인의 순서와 동일하지 않다. 

② 리프 레벨은 데이터 페이지가 아니다.

③ 리프 레벨에서 한 단계 더 내려가야만 데이터 페이지이다. 따라서 클러스터 색인보다 한 단계를 더 거쳐야 실제 찾고자 하는 데이터에 도달할 수 있다.

'정보시시스템감리사 > 데이터베이스' 카테고리의 다른 글

권한부여 (GRANT, REMOKE)  (0) 2017.09.07
질의 최적화 기법  (0) 2017.09.01
조인 선택률(join selectivity)  (0) 2017.08.31
데이터 마이닝 분석기법 종류  (0) 2017.08.29
교착상태 (deadlock)  (0) 2017.08.29


다음 문제를 풀어보세요.


17.66 다음 두 릴레이션 R과 S에 대해 조인 연산을 수행했다고 할 때, 이 연산의 조인 선택률(join selectivity)은?


그림 삽입 예정


1. 1

2. 4/9

3. 5/9

4. 5



선택률(selectivity)


(조건을 만족하는 투플수) / (릴레이션의 전체 투플수)



다음 문제를 풀어보세요.


데이터 마이닝 분석기법과 관련된 이론을 가장 적절하게 연결한 것은?


1. 지지도(support) - 인공신경망

2. 시그모이드(sigmoid) 함수 - 의사결정트리

3. 맨하튼 거리(manhattan distance) - 군집분석

4. 엔트로피(entropy) - 연관분석



데이터 마이닝의 기법


① 의사결정나무 (Decision Tree)

주어진 데이터를 분류(Classification) 하는 목적으로 사용된다. 예측(Prediction)하는 목적으로 사용할 수 없다.


 인공신경망 (Artificial Neural Network)

자신이 가진 데이터로부터 반복적인 학습 과정을 거쳐 패턴을 찾아내고 이를 일반화함으로써 예측(Prediction) 가능한 기법


 연관성 규칙 발견 (Association Rule Discovery)

상품 혹은 서비스간의 관계를 살펴보고 이로부터 유용한 규칙을 찾아내고자 할 때 이용될 수 있는 기법이다. 상품간의 연관성 정도를 측정하여 관성이 많은 상품들을 그룹화하는 클러스터링(clustering)의 일종


 사례 기반 추론 

사례기반 추론 기법(CBR)은 한마디로 주어진 새로운 문제를 과거의 유사한 사례를 바탕으로 주어진 문제의 상황에 맞게 응용하여 해결해 가는 기법을 말한다.


 군집분석

대용량의 데이터가 너무 복잡할 때는 이를 구성하고 있는 몇개의 군집을 나누어 살펴봄으로써 전체에 대한 윤곽을 잡을수 있다. 










다음 문제를 풀어보세요.


트랜잭션 T1은 x와 y에 100을 더하고, 트랜잭션 T2는 y와 x에 2를 곱하는 트랜잭션이다. 두 트랜잭션이 다음과 같은 순서로 실행이 되었을 때 발생한 상황은?


시간1: T1 lock(x); read(x);

시간2: T2 lock(y); read(y);

시간3: T1 x = x + 100

시간4: T2 y = y * 2

시간5: T1 write(x)

시간6: T2 write(y)

시간7: T1 lock(y)

시간8: T2 lock(x)


1. 갱신 손실(lost update)

2. 교착 상태(deadlock)

3. 오손 읽기(dirty read)

4. 철회(rollback)


+ Recent posts