본문으로 건너뛰기

2과목 모의 문제

정보처리기사 목차데이터 전환문제 20개

11~18단원(52레슨)을 섞은 20문제로, 시험의 2과목과 같은 필기 꼴입니다. 30분 안에 풀어 보세요. 시험에서는 과목마다 20문제 가운데 8문제 이상 맞혀야 합니다. 8문제보다 적게 맞혔다면 틀린 문제의 레슨부터 다시 보세요. 문제가 어느 레슨인지는 정답을 펼치면 보입니다. 하루 이상 지나 다시 풀면 더 오래 남습니다. 다만 두 번째 점수에는 문제를 기억해서 오른 몫이 섞여 있습니다.

SQL 문제는 아래 네 표로 Oracle에서 돌린다고 보고 풉니다. 블록마다 처음 데이터에서 시작합니다. 학생의 학과코드는 학과를, 수강의 학번은 학생을, 수강의 과목코드와 과목의 선수과목은 과목을 가리킵니다. 학생의 학과코드는 비워 둘 수 있고, 학년에는 1부터 4까지만 들어갑니다.

학과

학과코드학과명건물
CS컴퓨터공학관
EE전자공학관
BA경영경영관

학생

학번이름학년학과코드
101김민수3CS
102이서준2CS
103김지민2CS
104박서연1EE
105최민준3EE
106정하윤3EE
107강도현1NULL

과목

과목코드과목명학점선수과목
DS자료구조3NULL
OS운영체제3DS
NW네트워크2OS

수강

학번과목코드점수
101DS85
101OS75
101NW80
102DS70
102OS60
103DS65
103NW55
104OS75
104NW95
105DS100
105NW90
107NW50

문제 1

어느 택배 회사가 부서마다 따로 두던 배송 기록을 데이터베이스 하나로 모았습니다. 다음 가운데 데이터베이스의 모습으로 옳지 않은 것을 고르세요.

  • ① 접수·배차·고객 센터 직원이 같은 송장을 같은 시각에 함께 연다
  • ② 송장 한 건의 정보는 부서마다 따로 적지 않고 한곳에 한 번만 적는다
  • ③ 송장 한 건을 찾으려면 그 기록이 저장된 자리를 먼저 알아야 한다
  • ④ 배송을 마치면 상태가 바뀌고 새 접수가 더해져 늘 지금 모습을 담는다
정답

③ — 데이터베이스는 저장된 자리가 아니라 값으로 찾습니다. 송장번호나 받는 사람 같은 내용을 조건으로 주면 DBMS가 찾아 주고, 이것을 내용에 의한 참조라 합니다. 자리를 알아야 찾는 쪽은 부서마다 파일을 따로 두던 파일 처리입니다.

  • ① 맞습니다. 여럿이 같은 데이터를 같은 때 쓰는 동시 공용입니다.
  • ② 맞습니다. 같은 데이터를 한곳에 한 번만 두는 통합된 데이터입니다. 특징이 아니라 정의 쪽 말이라 헷갈리지만, 데이터베이스의 모습이 맞습니다.
  • ④ 맞습니다. 넣고 고치고 지워 늘 최신 상태를 담는 계속적인 변화입니다.

다시 볼 레슨: 데이터베이스와 DBMS

문제 2

데이터 모델에 표시해야 할 요소 셋으로 알맞은 것을 고르세요.

  • ① 개체 · 속성 · 관계
  • ② 구조 · 연산 · 제약 조건
  • ③ 구조 · 연산 · 접근 경로
  • ④ 외부 스키마 · 개념 스키마 · 내부 스키마
정답

② — 데이터 모델에는 무엇을 어떤 짜임으로 담고 어떻게 잇는지(구조), 담은 데이터로 무엇을 처리하는지(연산), 데이터가 지킬 규칙이 무엇인지(제약 조건)를 적습니다.

  • ① E-R 다이어그램을 이루는 셋과 섞었습니다. 개체·속성·관계는 구조를 그리는 재료일 뿐이고, 처리와 규칙이 빠져 있습니다. 자료에 따라 이 셋을 데이터 모델의 구성 요소라고 부르기도 합니다. 표시해야 할 요소를 물으면 구조·연산·제약 조건을 고릅니다.
  • ③ 물리적 설계에서 정하는 것을 넣었습니다. 접근 경로는 저장된 데이터를 찾아가는 길이고, 데이터가 지킬 규칙인 제약 조건이 빠졌습니다.
  • ④ 스키마 3단계와 섞었습니다. 셋은 데이터베이스를 보는 관점(사용자·조직 전체·저장 장치)으로 나눈 층입니다.

다시 볼 레슨: 데이터베이스 설계 단계

문제 3

학생 릴레이션(학번, 이름, 학년, 학과코드)에는 지금 학생 일곱 명이 들어 있습니다. 학년에는 1부터 4까지만 들어오게 정해 두었고, 지금 들어 있는 학년은 1·2·3뿐입니다. 이 릴레이션에 대한 설명으로 알맞은 것을 고르세요.

  • ① 학년 속성의 도메인은 지금 들어 있는 값 1·2·3이다
  • ② 차수는 7이고 카디널리티는 4이다
  • ③ 학번 순으로 늘어놓은 것과 이름 순으로 늘어놓은 것은 다른 릴레이션이다
  • ④ 학생이 새로 들어오면 인스턴스는 바뀌지만 릴레이션 스키마는 그대로다
정답

④ — 릴레이션 스키마는 릴레이션 이름과 속성으로 짜인 틀이고, 인스턴스는 그 틀에 지금 담긴 튜플 전체입니다. 학생이 들어오면 튜플이 늘어 인스턴스는 달라지지만, 속성은 그대로라 스키마는 바뀌지 않습니다.

  • ① 도메인을 지금 들어 있는 값으로 봤습니다. 도메인은 그 속성에 들어올 수 있는 값의 모임이라 1·2·3·4입니다. 4학년이 한 명도 없어도 4는 도메인에 듭니다.
  • ② 차수와 카디널리티를 거꾸로 봤습니다. 속성이 넷이라 차수가 4, 튜플이 일곱이라 카디널리티가 7입니다.
  • ③ 튜플에 정해진 순서가 있다고 봤습니다. 릴레이션은 순서가 없는 모임이라 어떤 차례로 늘어놓아도 같은 릴레이션입니다.

다시 볼 레슨: 관계 데이터 모델: 릴레이션

문제 4

회원(회원번호, 이메일, 이름, 추천인번호) 표가 있습니다. 회원번호와 이메일은 회원마다 다르고 비는 일이 없으며, 둘 가운데 회원번호를 기본키로 골랐습니다. 추천인번호에는 이 회원을 추천한 회원의 회원번호를 적습니다. 이 표의 키에 대한 설명으로 옳지 않은 것을 고르세요.

  • ① (회원번호, 이메일)은 후보키다
  • ② (회원번호, 이름)은 슈퍼키다
  • ③ 이메일은 대체키다
  • ④ 추천인번호는 같은 표의 회원번호를 가리키는 외래키다
정답

① — 회원번호 하나만으로도 회원을 모두 가려내므로, 이메일을 빼도 유일성이 남습니다. 최소성이 없어 후보키가 아니라 슈퍼키입니다. 후보키 둘을 묶는다고 더 강한 후보키가 되지는 않습니다.

  • ② 맞습니다. 회원번호가 들어 있어 행마다 다르니 유일성이 있습니다. 슈퍼키는 최소성을 따지지 않아, 없어도 되는 이름이 덧붙어 있어도 슈퍼키입니다.
  • ③ 맞습니다. 이메일은 혼자서 회원을 가려내고 더 뺄 것이 없는 후보키인데, 기본키로 고르지 않았으니 대체키입니다.
  • ④ 맞습니다. 외래키는 다른 표뿐 아니라 자기 표의 기본키를 가리킬 수도 있습니다. 외래키는 비어 있어도 되니, 추천한 회원이 없으면 비워 둡니다.

다시 볼 레슨: 키의 종류

문제 5

시험감독(시험일, 교실, 감독관) 표의 값은 모두 원자값입니다. 한 날 한 교실은 감독관 한 명이 맡습니다. 감독관은 여러 날 감독하지만 맡는 교실은 늘 같은 하나이고, 한 교실은 날마다 다른 감독관이 맡을 수 있습니다. 이 표가 만족하는 가장 높은 정규형을 고르세요.

  • ① 2정규형
  • ② 3정규형
  • ③ BCNF
  • ④ 4정규형
정답

② — 후보키는 (시험일, 교실)과 (시험일, 감독관) 둘입니다. 세 속성이 모두 어느 후보키에 들어 있어, 키가 아닌 속성이 하나도 없으니 부분·이행 함수 종속이 생길 자리가 없습니다. 그래서 3정규형까지는 지킵니다. 그런데 감독관 → 교실의 결정자 감독관은 혼자서는 후보키가 아니라 BCNF를 지키지 못합니다.

  • ① 감독관 → 교실을 키가 아닌 속성을 거쳐 딸려 오는 이행 함수 종속으로 봤습니다. 교실은 후보키 (시험일, 교실)에 드는 속성이라, 3정규형이 따지는 '키가 아닌 속성'이 아닙니다.
  • ③ 부분·이행 함수 종속이 없으니 BCNF라고 봤습니다. BCNF는 결정자를 하나씩 보아 모두 후보키여야 합니다. 감독관은 여러 날 감독해 혼자서는 행을 가려내지 못합니다.
  • ④ 다치 종속이 없으니 4정규형이라고 봤습니다. 4정규형은 BCNF를 지킨 표에서 따지는 단계라, BCNF에서 걸리면 4정규형도 아닙니다.

다시 볼 레슨: BCNF·4NF·5NF · 키의 종류

문제 6

논리 데이터 모델의 품질 검증 기준과 그 기준으로 보는 것을 짝지었습니다. 짝이 잘못된 것을 고르세요.

  • ① 완전성 — 업무에 필요한 데이터가 모델에서 빠지지 않았는가
  • ② 준거성 — 회사 표준이나 법규에서 정한 대로 만들었는가
  • ③ 최신성 — 같은 뜻의 데이터를 표마다 같은 이름과 자료형으로 두었는가
  • ④ 활용성 — 쓰는 사람이 불편 없이 쓰고 고치기 쉬운가
정답

③ — 같은 뜻의 데이터를 어느 표에서나 같은 이름과 자료형으로 두었는지는 일관성이 봅니다. 최신성은 바뀐 업무가 모델에 반영되어 지금 업무와 같은지를 봅니다.

  • ① 맞습니다. 요구한 데이터가 빠지면 완전성에 걸립니다.
  • ② 맞습니다. 표준·법규·내부 규정을 어기면 준거성에 걸립니다.
  • ④ 맞습니다. 틀린 곳은 없어도 쓰기 불편하면 활용성에 걸립니다.

다시 볼 레슨: 논리 데이터 모델링과 품질 검증

문제 7

다음 표를 만든 뒤 INSERT INTO 사물함 뒤에 아래 보기를 붙여 행을 하나 넣습니다. 보기마다 처음 데이터에서 따로 넣습니다. 오류 없이 들어가는 것을 고르세요.

CREATE TABLE 사물함 (
  번호 INT,
  학번 INT,
  층 INT DEFAULT 1,
  PRIMARY KEY (번호),
  FOREIGN KEY (학번)
    REFERENCES 학생 (학번),
  CHECK (층 BETWEEN 1 AND 3)
);
  • ① VALUES (1, 108, 2)
  • ② VALUES (2, NULL, 4)
  • ③ VALUES (NULL, 101, 1)
  • ④ (번호, 학번) VALUES (3, 107)
정답

④ — 층을 적지 않았으니 기본값 1이 들어가고, 1은 CHECK의 1~3 안입니다. 학번 107은 학생 표에 있어 외래키를 지키고, 번호 3은 처음 들어가는 값이라 기본키도 지킵니다.

  • ① 외래키 칸에는 아무 값이나 넣을 수 있다고 봤습니다. 학생 표에 108번 학생이 없어 ORA-02291 오류로 막힙니다.
  • ② 학번을 비운 것만 따졌습니다. 외래키는 비워 둘 수 있지만, 층 4가 CHECK의 1~3을 벗어나 ORA-02290 오류로 막힙니다.
  • ③ 기본키를 비워도 된다고 봤습니다. 기본키는 비울 수 없어 ORA-01400 오류로 막힙니다.

다시 볼 레슨: DDL: CREATE·ALTER·DROP · 무결성 제약 조건

문제 8

학생 표에서 학과코드가 있는 여섯 명을 학과코드와 학년으로 묶어 인원을 셉니다. 다음은 GROUP BY 뒤에 오는 부분을 두 개씩 짝지은 것입니다. 두 쿼리의 결과가 행의 차례만 다르고 똑같은 짝을 고르세요.

  • ① ROLLUP(학과코드, 학년)과 ROLLUP(학년, 학과코드)
  • ② CUBE(학과코드, 학년)과 CUBE(학년, 학과코드)
  • ③ ROLLUP(학과코드, 학년)과 CUBE(학과코드, 학년)
  • ④ GROUPING SETS(학과코드, 학년)⁠과 학과코드, 학년
정답

② — CUBE는 적은 열로 만들 수 있는 묶음을 모두 만듭니다. (학과코드, 학년)·(학과코드)·(학년)·() 네 가지라 열의 순서를 바꿔도 같은 묶음이 나옵니다. 여섯 명으로 세면 둘 다 10행이고 값도 같습니다.

  • ① ROLLUP도 열 순서와 상관없다고 봤습니다. ROLLUP은 오른쪽 열부터 하나씩 빼며 묶어, 앞쪽은 학과별 소계를 내고(7행) 뒤쪽은 학년별 소계를 냅니다(8행).
  • ③ 열이 둘이면 ROLLUP과 CUBE가 같다고 봤습니다. ROLLUP(학과코드, 학년)에는 학년만으로 묶은 소계가 없어 CUBE보다 세 행이 적습니다.
  • ④ GROUPING SETS 괄호 안의 열을 함께 묶는다고 봤습니다. GROUPING SETS(학과코드, 학년)⁠은 학과별과 학년별을 따로 내어 5행이고, 두 열로 함께 묶은 쪽은 4행입니다.

다시 볼 레슨: 그룹 함수: ROLLUP·CUBE

문제 9

학생 일곱 명에게 학년으로 순위를 매겼더니 다음 결과가 나왔습니다. 순위 열을 만든 식으로 알맞은 것을 고르세요.

이름학년순위
김민수31
최민준31
정하윤31
이서준24
김지민24
박서연16
강도현16
  • ① RANK() OVER (ORDER BY 학년 DESC)
  • ② RANK() OVER (ORDER BY 학년)
  • ③ DENSE_RANK() OVER (ORDER BY 학년 DESC)
  • ④ ROW_NUMBER() OVER (ORDER BY 학년 DESC)
정답

① — 3학년 셋이 함께 1을 받고, 2학년은 앞에 세 명이 있어 4를 받습니다. 동점에 같은 순위를 주고 그 수만큼 다음 순위를 건너뛰는 함수는 RANK이고, 학년이 높은 쪽이 1이니 DESC입니다.

  • ② 차례를 거꾸로 봤습니다. 오름차순이면 1학년 둘이 1을 받고, 3학년은 5가 됩니다.
  • ③ 건너뛰는 쪽을 DENSE_RANK로 봤습니다. DENSE_RANK는 건너뛰지 않아 2학년이 2, 1학년이 3을 받습니다.
  • ④ ROW_NUMBER도 동점에 같은 값을 준다고 봤습니다. ROW_NUMBER는 동점이어도 서로 다른 번호를 주어 1부터 7까지 하나씩입니다.
SELECT 이름,
  학년,
  RANK() OVER (
    ORDER BY 학년 DESC
  ) AS 순위
FROM 학생
ORDER BY 순위, 학번;
이름학년순위
김민수31
최민준31
정하윤31
이서준24
김지민24
박서연16
강도현16

다시 볼 레슨: 윈도우 함수

문제 10

다음 쿼리의 결과로 알맞은 것을 고르세요.

SELECT D.학과명,
  S.이름
FROM 학과 D
  RIGHT OUTER JOIN 학생 S
  ON S.학과코드 = D.학과코드
ORDER BY S.학번;
  • ① 6행 — 짝이 없는 줄은 결과에 없다
  • ② 7행 — 강도현 줄이 더해지고 그 줄의 학과명이 NULL이다
  • ③ 7행 — 경영 줄이 더해지고 그 줄의 이름이 NULL이다
  • ④ 8행 — 강도현 줄과 경영 줄이 모두 더해진다
정답

② — RIGHT OUTER JOIN은 JOIN 키워드 오른쪽에 쓴 표의 행을 모두 남깁니다. 이 쿼리의 오른쪽은 학생 표라, 학과코드가 NULL이어서 짝이 없는 강도현도 남고 그 줄의 학과명은 NULL로 채워집니다. 학생이 없는 경영 학과는 왼쪽 표에 있어 나오지 않습니다.

  • ① 외부 조인도 짝이 있는 행만 낸다고 봤습니다. 짝이 있는 6행만 내는 것은 내부 조인입니다.
  • ③ RIGHT를 '학과 쪽을 남긴다'로 외웠습니다. 남는 쪽은 표 이름이 아니라 JOIN 키워드의 오른쪽 자리로 정해집니다. 학과를 남기려면 학과를 오른쪽에 씁니다.
  • ④ 양쪽의 짝 없는 행을 모두 남기는 FULL OUTER JOIN으로 봤습니다.
학과명이름
컴퓨터김민수
컴퓨터이서준
컴퓨터김지민
전자박서연
전자최민준
전자정하윤
NULL강도현

다시 볼 레슨: 조인

문제 11

다음 쿼리의 결과는 몇 행인지 고르세요.

SELECT E.학번,
  E.과목코드,
  E.점수
FROM 수강 E
WHERE E.점수 > (
  SELECT AVG(I.점수)
  FROM 수강 I
  WHERE I.과목코드 = E.과목코드
)
ORDER BY E.학번, E.과목코드;
  • ① 4행
  • ② 5행
  • ③ 7행
  • ④ 서브쿼리가 여러 행을 돌려줘 오류가 난다
정답

③ — 서브쿼리가 바깥 행의 E.과목코드를 받아, 바깥 행마다 다시 실행됩니다. 그래서 행마다 그 과목의 평균과 견줍니다. 과목 평균은 DS 80 · NW 74 · OS 70이고, 이보다 높은 행은 DS 둘, NW 셋, OS 둘로 7행입니다.

  • ① 과목 평균 셋 모두보다 커야 한다고 봤습니다. 그러면 가장 큰 80을 넘는 4행인데, 이 서브쿼리는 한 번 돌 때 그 과목의 평균 하나만 돌려줍니다.
  • ② 서브쿼리가 표 전체의 평균 75 하나를 돌려준다고 봤습니다. WHERE I.과목코드 = E.과목코드⁠가 평균을 낼 행을 바깥 행의 과목으로 좁힙니다.
  • ④ 과목마다 평균이 하나씩 나와 여러 행이 된다고 봤습니다. GROUP BY가 없고, 한 번 돌 때 바깥 행의 과목 하나만 보므로 값 하나입니다.
학번과목코드점수
101DS85
101NW80
101OS75
104NW95
104OS75
105DS100
105NW90

다시 볼 레슨: 서브쿼리 · 그룹과 집계: GROUP BY·HAVING

문제 12

CHOI에게 준 학생 표의 SELECT 권한을 거두려 합니다. 알맞은 문장을 고르세요.

  • ① REVOKE SELECT ON 학생 TO CHOI;
  • ② REVOKE SELECT TO CHOI ON 학생;
  • ③ REVOKE SELECT FROM CHOI ON 학생;
  • ④ REVOKE SELECT ON 학생 FROM CHOI;
정답

④ — 거두는 문장은 REVOKE 권한 ON 표 FROM 사용자 꼴입니다. 무엇을(SELECT), 어느 표에서(ON 학생), 누구에게서(FROM CHOI) 거두는지 차례로 적습니다.

  • ① 주는 문장의 TO를 그대로 썼습니다. 줄 때는 TO, 거둘 때는 FROM입니다.
  • ② 사용자를 표보다 먼저 적었고, TO도 주는 문장의 것입니다.
  • ③ 사용자를 표보다 먼저 적었습니다. ON 표가 권한 바로 뒤에 옵니다.

다시 볼 레슨: DCL: GRANT·REVOKE

문제 13

절차형 SQL 블록을 이루는 네 자리입니다.

  • (가) DECLARE로 시작하는 선언부
  • (나) BEGIN으로 시작하는 실행부
  • (다) EXCEPTION으로 시작하는 예외 처리부
  • (라) 블록의 끝을 알리는 END;

이 가운데 빠지면 블록이 되지 않는 자리만 모은 것을 고르세요.

  • ① (나) · (라)
  • ② (가) · (나) · (라)
  • ③ (나) · (다) · (라)
  • ④ (가) · (나) · (다) · (라)
정답

① — 블록은 실행부만 있어도 됩니다. BEGIN으로 시작해 END;로 닫으면, 쓸 변수가 없고 받을 오류를 정하지 않아도 블록이 돕니다.

  • ② 블록이 늘 DECLARE로 시작해야 한다고 봤습니다. 쓸 변수가 없으면 선언부를 뺍니다.
  • ③ 오류를 받는 자리가 꼭 있어야 한다고 봤습니다. 예외 처리부가 없어도 블록으로는 그대로 성립하고, 난 오류가 밖으로 나갈 뿐입니다.
  • ④ 네 자리를 모두 갖춰야 한다고 봤습니다. 선언부와 예외 처리부는 빠져도 됩니다.

다시 볼 레슨: 절차형 SQL의 구조

문제 14

학생 표의 학년에는 1부터 4까지만 들어가게 정해 두었습니다. 다음 블록을 돌리면 어떻게 되는지 고르세요.

SET SERVEROUTPUT ON
BEGIN
  INSERT INTO 학생
  VALUES (108, '한소율',
      5, 'CS');
  DBMS_OUTPUT.PUT_LINE(
      '넣음');
EXCEPTION
  WHEN DUP_VAL_ON_INDEX THEN
    DBMS_OUTPUT.PUT_LINE(
        '겹침');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(
        '그 밖');
END;
/
  • ① 넣음이 찍힌다
  • ② 겹침이 찍힌다
  • ③ 그 밖이 찍힌다
  • ④ 아무것도 찍히지 않고 ORA-02290 오류가 난다
정답

③ — 학년 5가 CHECK 제약 조건을 어겨 INSERT에서 오류가 납니다. 그 아래 '넣음' 줄은 실행되지 않고 흐름이 예외 처리부로 뜁니다. 값이 겹친 오류가 아니어서 WHEN DUP_VAL_ON_INDEX⁠는 지나가고, 앞에서 받지 못한 오류를 모두 받는 WHEN OTHERS가 받습니다. 받아 처리했으니 블록은 정상으로 끝납니다.

  • ① 학년 5가 들어간다고 봤거나, 오류가 난 뒤에도 아래 줄이 실행된다고 봤습니다. 오류가 난 자리 아래 문장은 지나가지 않습니다.
  • ② 제약 조건을 어기면 모두 DUP_VAL_ON_INDEX라고 봤습니다. 그 예외는 기본키처럼 겹치면 안 되는 칸에 같은 값을 넣었을 때 납니다. 학번 108은 처음 쓰는 값입니다.
  • ④ 이름이 붙은 WHEN에 맞지 않으면 오류가 밖으로 나간다고 봤습니다. WHEN OTHERS가 있으면 그것이 받습니다. WHEN OTHERS까지 없을 때 ORA-02290이 그대로 나옵니다.
그 밖

다시 볼 레슨: 절차형 SQL의 오류 처리 · 무결성 제약 조건

문제 15

파티셔닝에 대한 설명으로 옳지 않은 것을 고르세요.

  • ① 범위 파티셔닝은 날짜·금액처럼 순서가 있는 값을 구간으로 나눌 때 쓴다
  • ② 해시 파티셔닝은 값마다 들어갈 파티션을 사람이 목록으로 정해 둔다
  • ③ 한 파티션이 망가져도 나머지 파티션의 데이터는 읽을 수 있다
  • ④ 기준 열을 쓰지 않는 조건으로 찾으면 모든 파티션을 읽어야 한다
정답

② — 해시 파티셔닝은 파티션 수만 정해 두면, 기준 열의 값을 계산한 결과로 DBMS가 파티션을 고릅니다. 어느 행이 어디로 갈지 사람이 정하지 않는 것이 해시의 특징이고, 값마다 받을 파티션을 적어 두는 쪽은 목록 파티셔닝입니다.

  • ① 맞습니다. 순서가 있는 값을 '얼마 이상 얼마 미만'처럼 구간으로 적습니다.
  • ③ 맞습니다. 파티션마다 따로 저장되어 얻는 가용성입니다.
  • ④ 맞습니다. 파티셔닝으로 치르는 것입니다. 그래서 질의가 가장 자주 쓰는 조건을 기준 열로 고릅니다.

다시 볼 레슨: 파티셔닝

문제 16

어느 쇼핑몰이 상품 표를 서울과 부산 두 서버에 똑같이 두고 씁니다.

  • (가) 사용자는 상품 표가 몇 벌 있는지 모른 채, 표가 하나뿐인 것처럼 질의합니다. 분산 데이터베이스가 이렇게 숨겨 주는 성질입니다.
  • (나) 서울에서 가격을 고치면 커밋이 바로 끝나고, 부산 서버의 값은 몇 초 뒤에 따라 바뀝니다. 이렇게 변경을 옮기는 이중화 방식입니다.

(가)·(나)에 맞는 이름으로 알맞은 것을 고르세요.

  • ① (가) 분할 투명성 · (나) Eager 방식
  • ② (가) 분할 투명성 · (나) Lazy 방식
  • ③ (가) 중복 투명성 · (나) Eager 방식
  • ④ (가) 중복 투명성 · (나) Lazy 방식
정답

④ — (가)는 같은 데이터의 복제본이 몇 개 어디에 있는지를 숨기는 중복 투명성입니다. (나)는 커밋을 먼저 마치고 복제 서버에는 나중에 반영해, 잠깐 두 서버의 값이 어긋나는 Lazy 방식입니다.

  • ① 두 오해가 겹쳤습니다. 표를 통째로 두 곳에 둔 것을 쪼갠 것으로 봤고, 바로 끝난 커밋을 두 서버에 함께 반영한 것으로 봤습니다.
  • ② 두 서버에 있다는 것을 표가 쪼개진 것으로 봤습니다. 분할 투명성은 한 표를 조각으로 나눠 흩어 둔 것을 숨깁니다. 여기서는 같은 표가 통째로 두 벌입니다.
  • ③ 커밋이 바로 끝난 것을 Eager로 봤습니다. Eager는 복제 서버에 반영한 뒤에 커밋해, 커밋이 끝나면 두 서버의 값이 늘 같습니다.

다시 볼 레슨: 분산 데이터베이스 · 데이터베이스 이중화

문제 17

일요일 밤에 데이터베이스를 한 벌 통째로 뜨고, 월요일부터 목요일까지 밤마다 백업을 하나씩 뜹니다. 로그 백업은 따로 뜨지 않습니다. 금요일 낮에 디스크가 망가졌습니다. 되살리는 데 쓰는 백업의 수가 밤 백업을 (가) 증분으로 떴다면 몇 개이고 (나) 차등으로 떴다면 몇 개인지 고르세요. 통째로 뜬 백업도 셉니다.

  • ① (가) 2개 · (나) 2개
  • ② (가) 2개 · (나) 5개
  • ③ (가) 5개 · (나) 2개
  • ④ (가) 5개 · (나) 5개
정답

③ — 증분은 바로 앞 백업 뒤에 바뀐 것만 담아, 전체 백업 위에 월·화·수·목 넷을 뜬 차례대로 모두 되돌려야 합니다(1 + 4 = 5개). 차등은 마지막 전체 백업 뒤에 바뀐 것을 모두 담아, 전체 백업과 가장 최근인 목요일 것 하나면 됩니다(1 + 1 = 2개).

  • ① 증분도 가장 최근 하나면 된다고 봤습니다. 목요일 증분에는 목요일에 바뀐 것만 들어 있습니다.
  • ② 두 방식을 거꾸로 봤습니다. 날마다 뜨는 양이 적은 증분이, 되살릴 때는 쓰는 백업이 많습니다.
  • ④ 차등도 뜬 것을 모두 되돌려야 한다고 봤습니다. 목요일 차등이 월요일부터의 변경을 모두 품고 있습니다.

다시 볼 레슨: 데이터베이스 백업

문제 18

어느 헬스장 업무의 CRUD 매트릭스입니다. 이 매트릭스를 읽은 것으로 알맞은 것을 고르세요.

프로세스회원이용권출입기록강사
회원 등록C
이용권 구매RC
출입 확인RRC
이용권 환불D
  • ① 강사 표는 아무 업무도 쓰지 않는 표다
  • ② 출입기록 표는 R이 없어 아무 업무도 쓰지 않는 표다
  • ③ 이용권 환불은 C·R이 없어 쓸 표가 없는 프로세스다
  • ④ 이용권 표는 U가 없어 값을 넣는 프로세스가 빠졌다
정답

① — 강사 열은 위에서 아래까지 통째로 비어 있습니다. 어느 프로세스도 강사 표를 만들지도 읽지도 고치지도 지우지도 않으니, 업무에 정말 필요한 표인지 되물어야 합니다.

  • ② 조회가 없으면 쓰지 않는 표라고 봤습니다. 출입 확인이 C로 출입기록 행을 만들고 있어 쓰는 표입니다. 그 열에 빠진 R·U·D는 읽고 고치고 지우는 프로세스가 없다는 뜻입니다.
  • ③ C나 R이 없는 행을 빈 행으로 봤습니다. 이용권 환불은 이용권 표에 D를 하니 쓸 표가 있습니다. 통째로 빈 행이어야 쓸 표가 없는 프로세스입니다.
  • ④ U를 넣는 일로 봤습니다. 넣는 것은 C이고 U는 고치는 것입니다. 이용권 표에는 이용권 구매의 C가 있고, U가 없다는 것은 이용권을 고치는 프로세스가 없다는 뜻입니다.

다시 볼 레슨: 물리 E-R 다이어그램과 CRUD 분석

문제 19

색인 순차 파일에서 색인 구역을 이루는 것이 아닌 것을 고르세요.

  • ① 마스터 색인
  • ② 실린더 색인
  • ③ 트랙 색인
  • ④ 기본 구역
정답

④ — 기본 구역은 실제 레코드를 키 값 순으로 담는 구역으로, 색인 구역과 나란히 있는 다른 구역입니다. 색인 구역은 레코드를 찾아가는 색인만 담고, 마스터 색인 → 실린더 색인 → 트랙 색인 차례로 층을 이룹니다. 색인 순차 파일은 기본 구역·색인 구역·오버플로 구역 셋으로 나뉩니다.

  • ① 맞습니다. 실린더 색인이 커질 때 그 위에 두어, 볼 실린더 색인을 알려 줍니다.
  • ② 맞습니다. 한 실린더 안의 트랙 색인을 가리킵니다.
  • ③ 맞습니다. 한 트랙 안 레코드의 키를 가리킵니다.

다시 볼 레슨: 파일 처리 기술: 파일 편성

문제 20

쇼핑몰이 회원 데이터를 새 시스템으로 옮긴 뒤 두 가지를 확인했습니다.

  • (가) 새 쇼핑몰의 '내 정보' 화면을 열어, 옮긴 회원의 주소와 등급이 제대로 보이는지 봤습니다.
  • (나) 매핑 정의서에 '옛 등급 금·은은 새 코드 G·S로 바꾼다'고 적은 대로 등급 값이 바뀌었는지 봤습니다.

(가)·(나)의 검증 방법으로 알맞은 것을 고르세요.

  • ① (가) 응용 프로그램 검증 · (나) 응용 데이터 검증
  • ② (가) 응용 프로그램 검증 · (나) 응용 프로그램 검증
  • ③ (가) 응용 데이터 검증 · (나) 응용 데이터 검증
  • ④ (가) 응용 데이터 검증 · (나) 응용 프로그램 검증
정답

① — 사람이 쓰는 프로그램인 화면으로 옮긴 결과를 보는 것이 응용 프로그램 검증이고, 미리 정해 둔 업무 규칙대로 값이 바뀌었는지 보는 것이 응용 데이터 검증입니다.

  • ② (나)도 전환 프로그램이 바꾼 결과를 보는 일이라 응용 프로그램 검증으로 봤습니다. 화면을 거치지 않고 규칙에 맞는지 값을 보는 것이라 응용 데이터 검증입니다.
  • ③ (가)도 데이터가 보이는지 보는 일이라 응용 데이터 검증으로 봤습니다. 화면이라는 프로그램을 거쳐 보는 것이 응용 프로그램 검증입니다.
  • ④ 두 이름을 거꾸로 짝지었습니다. 시험이 자주 바꿔 놓는 함정입니다 — 프로그램으로 보는 쪽이 응용 프로그램, 규칙에 맞는지 보는 쪽이 응용 데이터입니다.

다시 볼 레슨: 데이터 전환 계획과 검증

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

정보처리기사 목차로