18단원 '데이터 전환'의 네 레슨에서 6문제, 앞 단원(14·16)에서 2문제를 섞었고, 끝에 실기 꼴 3문제가 있습니다. 앞 단원 문제가 어느 레슨인지는 정답을 펼치면 보입니다. 문제의 SQL은 아래 네 표로 Oracle에서 돌린다고 보고 풀어 보세요. 실기 꼴은 종이에 답을 끝까지 쓴 뒤 펼치세요. 띄어쓰기만 다르면 같은 답입니다.
학과
| 학과코드 | 학과명 | 건물 |
|---|---|---|
| CS | 컴퓨터 | 공학관 |
| EE | 전자 | 공학관 |
| BA | 경영 | 경영관 |
학생
| 학번 | 이름 | 학년 | 학과코드 |
|---|---|---|---|
| 101 | 김민수 | 3 | CS |
| 102 | 이서준 | 2 | CS |
| 103 | 김지민 | 2 | CS |
| 104 | 박서연 | 1 | EE |
| 105 | 최민준 | 3 | EE |
| 106 | 정하윤 | 3 | EE |
| 107 | 강도현 | 1 | NULL |
과목
| 과목코드 | 과목명 | 학점 | 선수과목 |
|---|---|---|---|
| DS | 자료구조 | 3 | NULL |
| OS | 운영체제 | 3 | DS |
| NW | 네트워크 | 2 | OS |
수강
| 학번 | 과목코드 | 점수 |
|---|---|---|
| 101 | DS | 85 |
| 101 | OS | 75 |
| 101 | NW | 80 |
| 102 | DS | 70 |
| 102 | OS | 60 |
| 103 | DS | 65 |
| 103 | NW | 55 |
| 104 | OS | 75 |
| 104 | NW | 95 |
| 105 | DS | 100 |
| 105 | NW | 90 |
| 107 | NW | 50 |
문제 1
대학이 학사 시스템을 새로 만들어 옛 데이터를 옮깁니다. 계획을 세운 뒤 할 일 (가)~(라)를 차례대로 든 것을 고르세요.
-
(가) 전환 프로그램을 만들어 시험으로 돌려 본다
-
(나) 옛 표의 열을 새 표의 열에 맞추고 바꿀 규칙을 정한다
-
(다) 옮긴 데이터가 원천과 맞는지 확인한다
-
(라) 실제 데이터를 추출·변환·적재한다
-
① (가) → (나) → (라) → (다)
-
② (나) → (가) → (다) → (라)
-
③ (나) → (가) → (라) → (다)
-
④ (나) → (라) → (가) → (다)
정답
③ — 바꿀 규칙을 먼저 정해야 그 규칙대로 전환 프로그램을 만들 수 있고, 만든 프로그램을 돌려 본 뒤에 실제 데이터를 옮깁니다. 맞는지 확인하는 일은 옮긴 데이터가 생긴 다음입니다.
- ① 프로그램을 먼저 만든다고 봤습니다. 어느 열을 어떤 규칙으로 바꿀지 정하지 않으면 만들 것이 정해지지 않습니다.
- ② 확인을 전환 앞에 두었습니다. 옮긴 데이터가 있어야 원천과 맞춰 볼 것이 생깁니다.
- ④ 시험으로 돌려 보지 않고 실제 데이터를 옮긴다고 봤습니다. 전환 프로그램은 만든 뒤 돌려 보고 나서 실제 데이터에 씁니다.
다시 볼 레슨: 데이터 전환과 ETL
문제 2
어느 병원이 진료 기록을 새 시스템으로 옮기며, 업무를 멈추고 전체를 한 번에 옮기는 빅뱅 방식을 골랐습니다. 이 방식에서 (가) 업무를 멈추는 시간과 (나) 전환이 실패했을 때 되돌리는 범위로 알맞은 것을 고르세요.
- ① (가) 길지만 한 번뿐이다 · (나) 옮긴 토막만 되돌린다
- ② (가) 길지만 한 번뿐이다 · (나) 옮긴 것 전체를 되돌린다
- ③ (가) 짧게 여러 번이다 · (나) 옮긴 토막만 되돌린다
- ④ (가) 짧게 여러 번이다 · (나) 옮긴 것 전체를 되돌린다
정답
② — 전체를 한 번에 옮기므로 업무를 멈추는 시간이 길지만 한 번으로 끝납니다. 토막으로 나누지 않았으니 실패했을 때 되돌릴 범위도 옮긴 것 전체입니다.
- ① (나)를 단계적 방식의 것으로 봤습니다. 실패한 토막만 되돌릴 수 있는 쪽은 업무·기간으로 나누어 여러 번 옮기는 쪽입니다.
- ③ 두 자리를 모두 단계적 방식의 것으로 봤습니다. 짧게 여러 번 멈추는 것도 나누어 옮기는 쪽의 모습입니다.
- ④ (나)는 맞게 봤지만 (가)를 단계적 방식의 것으로 봤습니다. 한 번에 옮기면 멈추는 시간이 한 번으로 모입니다.
다시 볼 레슨: 데이터 전환과 ETL
문제 3
병원이 진료 기록을 환자번호 순으로 쌓은 색인 순차 파일로 둡니다. 기본 구역이 꽉 찬 뒤, 환자번호 순으로 보면 가운데 자리에 들어가야 하는 새 기록을 넣을 때 일어나는 일로 알맞은 것을 고르세요.
- ① 뒤에 있는 기록을 모두 한 칸씩 옮겨 쓴 뒤 그 자리에 넣는다
- ② 색인 구역에 그 기록을 적어 둔다
- ③ 들어갈 자리를 계산해 그 자리에 바로 넣는다
- ④ 미리 비워 둔 오버플로 구역에 적고, 원래 자리에서 그곳을 가리킨다
정답
④ — 색인 순차 파일은 기본 구역에 빈자리가 없을 때를 대비해 오버플로 구역을 미리 비워 둡니다. 넘친 기록을 그곳에 적고 원래 자리에서 가리키므로 뒤에 있는 기록을 옮겨 쓰지 않습니다. 다만 오버플로 구역이 쌓이면 찾는 데 걸리는 시간이 늘어나 파일을 다시 정리해야 합니다.
- ① 순차 파일에 끼워 넣을 때의 일입니다. 색인 순차 파일은 그 비용을 오버플로 구역으로 줄입니다.
- ② 색인 구역을 기록이 들어가는 자리로 봤습니다. 색인 구역에는 기본 구역 기록의 위치를 찾아가는 색인만 들어갑니다.
- ③ 직접 파일에 넣을 때의 일입니다. 색인 순차 파일은 자리를 계산하지 않고 키 값 순으로 쌓습니다.
다시 볼 레슨: 파일 처리 기술: 파일 편성
문제 4
학생이 100만 명인 학생 표에 이름으로 찾는 인덱스를 하나 만들어 두었습니다. 이름이 '김민수'인 학생의 학번과 학년을 찾는 쿼리를 돌릴 때 DBMS가 하는 일로 알맞은 것을 고르세요.
- ① 정렬된 인덱스를 따라 몇 칸만 읽어 행의 위치를 알아낸 뒤 그 행을 읽는다
- ② 표의 모든 행을 처음부터 읽으며 이름을 하나씩 견준다
- ③ 이름으로 저장 자리를 계산해 그 자리의 행을 바로 읽는다
- ④ 인덱스에 담긴 값만 읽고 표의 행은 읽지 않는다
정답
① — 인덱스는 열의 값과 그 값이 든 행의 위치를 정렬해 표와 따로 저장한 구조입니다. 정렬되어 있어 몇 칸만 내려가면 찾는 이름에 닿고, 거기 적힌 위치로 표의 행을 읽습니다.
- ② 인덱스가 있어도 전체를 훑는다고 봤습니다. 모든 행을 읽는 전체 테이블 스캔은 인덱스가 없을 때 하는 일입니다.
- ③ 키 값을 저장 자리로 바꾸는 계산으로 찾는다고 봤습니다. 그렇게 찾는 것은 사상 함수를 쓰는 직접 파일이고, 인덱스는 정렬된 구조를 따라 내려갑니다.
- ④ 인덱스가 행의 모든 값을 담고 있다고 봤습니다. 인덱스에는 이름과 행 위치만 있어, 학번과 학년을 보려면 표의 행을 읽어야 합니다.
다시 볼 레슨: 인덱스
문제 5
전환을 준비하며 데이터 전환 체크리스트를 만듭니다. 이 문서에 적는 것으로 알맞은 것을 고르세요.
- ① 옛 열을 새 열로 바꾸는 규칙과 코드 대응
- ② 오류마다 어느 행인지와 처리 상태·심각도
- ③ 작업 상세 항목과 예정 시작·종료 시각, 담당자
- ④ 원천과 목적 시스템의 환경 구성과 비상 계획
정답
③ — 체크리스트는 전환 작업을 잘게 나누어 작업 상세 항목과 예정 시작·종료 시각, 담당자를 적고 끝낼 때마다 표시하는 문서입니다. 전환을 하다 만나는 위험에 미리 대비하려고 만듭니다.
- ① 매핑 정의서에 적는 것입니다. 어느 열을 어느 열로, 어떤 규칙으로 바꿀지 미리 적어 두는 문서입니다.
- ② 오류 관리 목록에 적는 것입니다. 센 오류를 하나씩 적어 두는 쪽입니다.
- ④ 데이터 전환 계획서에 적는 것입니다. 대상·범위·일정과 함께 전환의 큰 그림을 적는 쪽입니다.
다시 볼 레슨: 데이터 전환 계획과 검증 · 데이터 전환과 ETL
문제 6
전환 프로그램이 오류 없이 끝났고 적재 로그에도 실패가 남지 않았습니다. 그런데 원천에 있던 회원 300명이 새 표에 들어가지 않았습니다. 이 빠짐을 알아내는 방법으로 알맞은 것을 고르세요.
- ① 원천의 건수와 적재된 건수를 양쪽에서 세어 맞춰 본다
- ② 적재 로그에 남은 처리 건수와 오류 메시지를 다시 읽는다
- ③ 새 시스템의 회원 조회 화면을 열어 자료가 보이는지 본다
- ④ 매핑 정의서에 적어 둔 규칙을 처음부터 다시 읽어 본다
정답
① — 프로그램이 알아채지 못한 누락은 로그에 남지 않습니다. 양쪽에서 건수를 세어 맞춰 보는 것은 프로그램이 남긴 말을 믿지 않고 데이터를 직접 세는 일이라, 300건이 모자란 것이 그대로 드러납니다.
- ② 프로그램이 남긴 말을 다시 읽는 것입니다. 짝을 찾지 못해 조용히 빠진 행은 실패로 적히지 않아 로그에서는 보이지 않습니다.
- ③ 들어간 자료가 화면에 보이는지만 봅니다. 남아 있는 회원이 제대로 보이면 넘어가게 되어 없는 300명은 드러나지 않습니다.
- ④ 규칙에 빠진 것이 없는지 다시 읽는 일입니다. 규칙이 제대로 적혀 있어도 짝이 없는 값은 빠지므로, 읽는 것만으로는 몇 건이 빠졌는지 알 수 없습니다.
다시 볼 레슨: 데이터 전환 계획과 검증
문제 7
원천에 있었는데 새 표에 짝이 없는 행을 찾는 꼴을 익혀 둡니다. 학생 표에서 수강 기록이 하나도 없는 학생을 찾으려고 다음 쿼리를 돌렸습니다. 결과로 알맞은 것을 고르세요.
SELECT S.학번,
S.이름
FROM 학생 S
LEFT JOIN 수강 E
ON E.학번 = S.학번
WHERE E.학번 IS NULL
ORDER BY S.학번;
- ① 한 행도 나오지 않는다
- ② 106 정하윤 한 행이 나온다
- ③ 106 정하윤과 107 강도현 두 행이 나온다
- ④ 학생 일곱 행이 모두 나온다
정답
② — LEFT JOIN은 왼쪽 학생 표의 행을 모두 남기고, 짝이 없는 행은 오른쪽 수강 표에서 오는 칸을 NULL로 채웁니다. 그 뒤 WHERE E.학번 IS NULL이 NULL로 채워진 행만 골라내므로 수강 표에 행이 하나도 없는 106번만 남습니다.
- ① 짝이 없는 행은 조인에서 버려진다고 봤습니다. 짝만 남기는 것은 내부 조인이고, 외부 조인은 짝 없는 행을 남깁니다.
- ③ 학과코드가 NULL인 107번까지 넣었습니다. 107번은 네트워크(NW)를 듣고 있어 수강 표에 행이 있습니다. 여기서 보는 NULL은 조인이 채운 칸입니다.
- ④
LEFT JOIN이 왼쪽 행을 모두 남기니 결과도 일곱 행이라고 봤습니다. 조인한 뒤의 WHERE가 다시 골라냅니다.
| 학번 | 이름 |
|---|---|
| 106 | 정하윤 |
다시 볼 레슨: 조인
문제 8
도서관이 옛 대출 시스템의 기록을 새 시스템으로 옮기다 두 가지가 걸렸습니다.
- (가) 옛 기록 300건에 반납일이 비어 있습니다. 반납일은 꼭 있어야 하는 값입니다.
- (나) 옛 기록의 대출 상태는
'대출중'·'연체'로 바르게 들어 있는데, 전환 프로그램에 이 글자를 새 시스템의 코드로 바꾸는 규칙이 빠져 있습니다.
(가)·(나)의 정제 방법으로 알맞은 것을 고르세요.
- ① (가) 전환을 고친다 · (나) 전환을 고친다
- ② (가) 전환을 고친다 · (나) 원천을 고친다
- ③ (가) 원천을 고친다 · (나) 원천을 고친다
- ④ (가) 원천을 고친다 · (나) 전환을 고친다
정답
④ — 데이터 자체가 틀렸으면 원천을, 데이터는 맞는데 새 시스템이 받을 꼴로 바꾸지 못했으면 전환 프로그램을 고칩니다. (가)의 반납일은 옛 시스템에 값이 아예 없으니 원천에서 채워야 합니다. (나)의 상태 값은 바르게 들어 있고 빠진 것이 바꾸는 규칙이라 전환 프로그램에 그 규칙을 넣습니다.
- ① (가)도 전환에서 메울 수 있다고 봤습니다. 전환은 있는 데이터를 옮기는 일이라 없는 값을 만들어 내지 못합니다.
- ② 두 자리를 거꾸로 봤습니다. 빈 값은 원천에서 채우고, 바꾸는 규칙은 전환 프로그램에 넣습니다.
- ③ (나)도 원천을 고친다고 봤습니다. 옛 시스템은 아직 돌고 있어 그 글자를 쓰는 화면과 보고서가 함께 깨집니다.
다시 볼 레슨: 데이터 정제와 품질
문제 9 (실기)
데이터 전환의 세 걸음 가운데 (가)의 이름을 영문 원어로, (나)를 영문 약어로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 쓰던 시스템의 데이터를 고치지 않고 읽어 내어 파일로 받아 두는 걸음
- (나) 세 걸음을 묶어 부르는 이름
정답
받는 답: (가) Extraction · (나) ETL
(가)의 실마리는 '원천을 고치지 않고 읽어 낸다'이고, (나)는 세 걸음의 머리글자를 이은 이름입니다.
- 같은 이름의 다른 꼴: (가) 추출 — 한글 이름입니다. 문제가 영문 원어로 물었습니다. Extract처럼 명사형이 아닌 꼴도 받지 않습니다.
- 틀리는 꼴 Transformation — (가)에: 새 시스템의 구조·코드·형식에 맞게 값을 바꾸는 걸음입니다. (가)에서는 값을 바꾸지 않습니다.
- 틀리는 꼴 Loading — (나)에: 세 걸음 가운데 마지막 걸음 하나의 이름입니다. 묶어 부르는 이름은 머리글자 셋을 이은 것입니다.
다시 볼 레슨: 데이터 전환과 ETL
문제 10 (실기)
어느 통신사가 가입자 기록을 파일로 둡니다. 가입자번호를 저장 자리로 바꾸는 계산을 두고, 넣을 때도 찾을 때도 그 계산으로 자리를 구해 다른 기록을 거치지 않고 바로 읽습니다. 이 파일 편성의 이름을 한글 이름과 영문으로 함께 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
정답
받는 답: 직접 파일(Direct File)
실마리는 '키 값을 계산해 자리를 정하고, 다른 기록을 거치지 않고 바로 읽는다'입니다.
- 같은 이름의 다른 꼴: 한글 이름만, 또는 영문만 쓴 꼴 — 문제가 둘을 함께 쓰라고 했습니다.
- 틀리는 꼴 색인 순차 파일(Indexed Sequential File): 키 값 순으로 쌓아 두고 색인을 먼저 보아 묶음을 골라 건너뜁니다. 자리를 계산하지 않습니다.
- 틀리는 꼴 순차 파일(Sequential File): 처리할 순서대로 이어 붙여 두어, 하나를 찾으려면 앞에서부터 차례로 읽습니다.
다시 볼 레슨: 파일 처리 기술: 파일 편성
문제 11 (실기)
어느 쇼핑몰 데이터베이스가 주마다 월요일 새벽에 저절로 깨어나, 지난주 주문을 모아 집계 표에 넣습니다. 표의 데이터가 바뀌지 않아도 때가 되면 돌고, 어느 한 표에 매여 있지도 않습니다. 이것의 이름을 한글 이름과 영문으로 함께 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
정답
받는 답: 이벤트(Event)
실마리는 '정해진 때가 되면 돈다'와 '어느 한 표에 매여 있지 않다'입니다.
- 같은 이름의 다른 꼴: 한글 이름만, 또는 영문만 쓴 꼴 — 문제가 둘을 함께 쓰라고 했습니다.
- 틀리는 꼴 트리거(Trigger): 표의 데이터가 바뀔 때 깨어납니다. 데이터가 그대로면 돌지 않습니다.
- 틀리는 꼴 저장 프로시저(Stored Procedure): 누군가 EXECUTE나 CALL로 불러야 돕니다. 때가 되어 저절로 돌지 않습니다.
다시 볼 레슨: 트리거와 이벤트