2020년 정보처리기사실기 4회차 기출문제 정답·해설 페이지
- 안쪽 for는 end=''라 줄을 바꾸지 않고 원소를 이어 붙인다.
- 한 행이 끝나면 print()가 줄을 바꾼다.
- 중앙 관리자 없이 P2P 네트워크의 참여자들이 같은 거래 장부를 나누어 보관하는 분산 원장 기술이다.
- 거래 기록을 묶은 '블록'을 앞 블록의 해시값과 이어 사슬 형태로 저장하므로, 한 곳을 고치면 뒤따르는 연결이 모두 깨져 위·변조가 사실상 불가능하다.
- 기록은 참여자 누구나 열람할 수 있다.
- n ≤ 1(음수 포함)이면 1: calc(1)=1, calc(0)=1, calc(-1)=1
- calc(2) = calc(0) + 2×calc(-1) = 3
- calc(3) = calc(1) + 2×calc(0) = 3
- calc(4) = calc(2) + 2×calc(1) = 5
- calc(6) = calc(4) + 2×calc(3) = 5 + 6 = 11
- 32비트 주소 체계의 한계로 주소가 부족해지는 문제를 풀기 위해 등장한 차세대 IP이다.
- 주소 길이를 128비트로 늘렸고, 인증·암호화(보안)와 이동 단말 지원을 기본 설계에 포함하였다.
- 유효 구간 다섯 개에서 하나씩: 42(가), 66(양), 73(미), 84(우), 97(수)
- 무효 구간 두 개에서 하나씩: -20(0 미만), 125(100 초과)
- 반복 조건 num > 0: 몫이 0이 되면 더 만들 자릿수가 없으므로 반복을 멈춘다.
- 저장할 값 num % 2: 지금 자리의 비트(0 또는 1)이다.
- 준비(Ready): 메모리에 올라와 CPU를 배정받기만 기다리는 상태이며, 할당 시간이 끝난 프로세스도 이 상태로 돌아온다.
- 실행(Running): 디스패치로 CPU를 받아 명령을 수행하는 상태이다.
- 대기(Waiting): 입출력 같은 사건이 끝나기를 기다리며 멈춰 있는 상태로, Blocked라고도 한다.
- 1970년 무렵 벨 연구소에서 켄 톰슨과 데니스 리치 등이 개발하였다.
- 대부분이 C 언어로 작성되어 있어 다른 하드웨어로 옮기기(이식) 쉽다.
- 커널과 셸로 나뉜 모듈 구조이며, 다중 사용자·다중 작업을 지원한다.
- 파일 시스템이 루트(/)에서 뻗어 나가는 계층적 트리 구조라 파일 관리가 편하다.
- 커널은 하드웨어·프로세스·메모리를 관리하는 핵심 부분이다.
- 셸은 사용자가 입력한 명령을 해석해 커널에 전달하는 명령 해석기이다.
- 가능한 모든 입력이 아니라, 미리 골라 둔 일부 입력값에 대해서만 올바른 기대 결과를 제공한다.
- 그 밖의 입력값에 대해서는 결과를 판정해 주지 않는다.
- 참(True) 오라클: 모든 입력값에 대해 기대 결과를 제공해 모든 오류를 검출할 수 있다.
- 추정(Heuristic) 오라클: 샘플링 오라클을 개선해, 나머지 입력에는 추정으로 결과를 제공한다.
- 일관성(Consistent) 검사 오라클: 변경 전후 결과가 같은지를 확인한다.
- 기밀성(Confidentiality): 인가된 사용자만 정보에 접근할 수 있다.
- 무결성(Integrity): 인가된 사용자만 정보를 정해진 방법으로 고칠 수 있다.
- 가용성(Availability): 인가된 사용자가 필요할 때 쓸 수 있다.
- 라우터가 패킷을 중계하면서, 내부망에서 쓰는 사설 IP 주소(와 포트)를 외부에 보이는 공인 IP 주소(와 포트)로 바꾸어 기록하고, 돌아오는 패킷은 반대로 되바꾼다.
- 공인 IP 주소 하나로 여러 내부 호스트가 인터넷을 쓸 수 있어 주소 부족을 덜고, 내부 구조를 숨기는 효과도 있다.
- WHERE 절은 쓰지 않는다.
- GROUP BY 절을 사용한다.
- 집계 함수를 사용하고, 그 결과 열에는 AS로 별칭을 붙인다.
- 대소문자는 구분하지 않으며, 끝의 세미콜론(;)은 생략해도 된다.
- 생성 패턴: 객체를 만드는 과정을 캡슐화한다.
- 구조 패턴: 클래스와 객체를 조합해 더 큰 구조를 만든다.
- ( ) 패턴: 객체들이 서로 상호작용하고 책임을 나누는 방법을 다룬다.
- 생성: Singleton, Factory Method, Abstract Factory, Builder, Prototype
- 구조: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
- 행위: Observer, Strategy, Command, Iterator, State, Template Method, Visitor 등
- Java로 작성된 오픈 소스 분산 처리 플랫폼이다.
- 값싼 범용 서버 여러 대를 묶어 하나의 거대한 가상 저장소(HDFS)를 만들고, 그 안의 대용량 데이터를 MapReduce로 나누어 병렬 처리한다.
- 야후, 페이스북 등 대형 인터넷 기업이 빅데이터 처리에 도입하였다.
- HDFS: 데이터를 블록으로 쪼개 여러 노드에 복제 저장하는 분산 파일 시스템
- MapReduce: 작업을 Map(분할 처리)과 Reduce(결과 취합)로 나누는 병렬 처리 모델
- YARN: 클러스터 자원을 관리·배분하는 계층
- s + 2 — 인덱스 2부터 끝까지 출력해 LAXY.
- *(s + 4) — 인덱스 4의 문자 X.
- s — 문자열 전체인 GALAXY.
- *s + 3 — 'G'에 3을 더한 문자 J.
- *s — 첫 글자 G.
- 삽입 이상: 원치 않는 값(NULL 등)까지 함께 넣어야 저장이 가능하다.
- 삭제 이상: 한 튜플을 지우면 남겨야 할 다른 정보까지 함께 사라진다(연쇄 삭제).
- 갱신 이상: 중복된 값 중 일부만 바뀌어 데이터가 서로 어긋난다(불일치).
- 위쪽에 작은 탭이 붙은 폴더 모양 사각형 세 개가 있고, 각각 [주문], [가격], [상품]이라는 이름이 적혀 있다.
- [주문]에서 [가격]으로 점선 화살표가 그어져 있다.
- [주문]에서 [상품]으로도 점선 화살표가 있으며, 화살표 옆에 ≪import≫라고 표기되어 있다.
- 트랜잭션이 실행되는 도중에도, 커밋을 기다리지 않고 변경 내용을 즉시 데이터베이스에 기록한다.
- 장애가 나면 로그를 바탕으로, 완료된 트랜잭션은 Redo하고 완료되지 않은 트랜잭션은 Undo한다. 즉 Redo와 Undo를 모두 사용한다.
20-4
아래 Python 프로그램을 실행했을 때 출력 결과를 적으시오.
grid = [[5, 8], [2, 4, 6, 1], [9, 3, 7]]
print(grid[2])
print(grid[1][2])
for row in grid:
for v in row:
print(v, end='')
print()[9, 3, 7]
6
58
2461
937
[해설]
grid[2]는 세 번째 리스트 자체이므로 리스트 형식 그대로 [9, 3, 7]이 찍힌다.
grid[1][2]는 두 번째 리스트 [2, 4, 6, 1]의 인덱스 2 원소인 6이다.
그래서 행마다 58, 2461, 937이 한 줄씩 출력된다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
네트워크 보안 위협 중 스니핑(Sniffing)이 무엇인지 간단히 서술하시오.
네트워크를 오가는 패킷을 몰래 엿들어(도청) 정보를 빼내는 수동적 공격
[해설]
스니핑은 네트워크로 전송되는 패킷을 도청해 계정·비밀번호 등을 가로채는 공격이다.
데이터를 바꾸지 않고 엿보기만 하므로 수동적 공격에 속하며, 이 때문에 탐지가 어렵다.
랜카드를 무차별 모드(Promiscuous Mode)로 두어 자기 앞이 아닌 패킷까지 수집하는 방식이 대표적이다. 대응책은 SSL/TLS·SSH 같은 암호화 통신 사용이다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
다음 설명에 해당하는 기술을 적으시오.
블록체인(Blockchain)
[해설]
중앙 관리자 없이 참여자가 같은 장부를 나눠 갖는 분산 원장 기술의 대표가 블록체인(Blockchain)이다.
각 블록은 앞 블록의 해시값을 담아 사슬처럼 이어진다. 그래서 과거 블록 하나를 고치면 뒤따르는 모든 해시가 어긋나 위·변조가 드러난다.
새 블록은 참여 노드들의 합의(작업증명 PoW, 지분증명 PoS 등)를 거쳐 붙으므로 탈중앙화된 신뢰가 만들어진다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
아래 Java 프로그램의 출력 결과를 적으시오.
class Base {
int calc(int n) {
if (n <= 1) return n;
return calc(n - 1) + calc(n - 2);
}
}
class Sub extends Base {
@Override
int calc(int n) {
if (n <= 1) return 1;
return calc(n - 2) + 2 * calc(n - 3);
}
}
public class Main {
public static void main(String[] args) {
Base obj = new Sub();
System.out.print(obj.calc(6));
}
}11
[해설]
obj는 Base 타입이지만 실제 객체가 Sub이므로, calc 호출과 그 안의 재귀 호출이 모두 Sub의 calc로 연결된다(동적 바인딩).
따라서 출력은 11이다. Base의 피보나치식 calc(6)=8로 계산하면 틀린다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
다음 설명에 해당하는 인터넷 프로토콜의 이름을 적으시오.
IPv6
[해설]
128비트 주소를 쓰는 차세대 인터넷 프로토콜은 IPv6(Internet Protocol version 6)이다.
IPv4는 32비트라 약 43억 개의 주소밖에 만들 수 없다. IPv6는 16비트씩 8구간을 콜론(:)으로 나누어 16진수로 표기한다.
IPv6 주소 유형은 유니캐스트·멀티캐스트·애니캐스트 세 가지이며, IPv4의 브로드캐스트는 없다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
시험 점수에 따라 등급을 매기는 프로그램을 검사하려 한다. 등급 기준과 준비한 테스트 입력값이 다음과 같을 때, 적용된 블랙박스 테스트 기법의 이름을 적으시오.
| 점수 구간 | 등급 |
|---|---|
| 0 이상 60 미만 | 가 |
| 60 이상 70 미만 | 양 |
| 70 이상 80 미만 | 미 |
| 80 이상 90 미만 | 우 |
| 90 이상 100 이하 | 수 |
[테스트 입력값] -20, 42, 66, 73, 84, 97, 125
동치 분할 테스트(Equivalence Partitioning)
[해설]
입력값이 각 구간의 경계가 아니라 구간 안쪽의 대표값이므로 동치(동등) 분할 테스트이다.
입력을 결과가 같은 묶음(동치 클래스)으로 나누고, 묶음마다 대표값 하나만 시험하는 방식이다.
59·60·89·90처럼 구간의 끝값을 고르면 경계값 분석이 된다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
아래 Java 프로그램은 정수 45를 6자리 2진수로 바꾸어 출력한다. 실행 결과가 101101이 되도록 빈칸 ①, ②에 알맞은 식을 적으시오.
public class Main {
public static void main(String[] args) {
int[] bits = new int[6];
int num = 45;
int pos = 0;
while ( ① ) {
bits[pos] = ( ② );
num = num / 2;
pos++;
}
for (int k = bits.length - 1; k >= 0; k--)
System.out.print(bits[k]);
}
}① num > 0
② num % 2
[해설]
10진수를 2진수로 바꾸려면 2로 나눈 나머지를 아래 자리부터 모으고, 몫이 0이 될 때까지 이를 되풀이한다.
45→1, 22→0, 11→1, 5→1, 2→0, 1→1 순서로 bits[0]~bits[5]가 채워진다. 뒤의 for 문이 bits[5]부터 거꾸로 출력하므로 101101이 된다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
운영체제의 프로세스 상태 전이를 표로 정리하였다. 빈칸 ①~③에 알맞은 상태의 이름을 적으시오.
| 현재 상태 | 사건 | 다음 상태 |
|---|---|---|
| 생성 | 승인(메모리 적재) | ( ① ) |
| ( ① ) | 디스패치(CPU 할당) | ( ② ) |
| ( ② ) | 할당 시간 만료(타이머 런아웃) | ( ① ) |
| ( ② ) | 입출력 요청 등 사건 대기 | ( ③ ) |
| ( ③ ) | 입출력 완료(웨이크업) | ( ① ) |
| ( ② ) | 작업 끝 | 완료(종료) |
① 준비(Ready)
② 실행(Running)
③ 대기(Waiting)
[해설]
프로세스는 생성 → 준비 → 실행 → 완료 순서로 진행하는 것이 기본이고, 실행 중 일어나는 사건에 따라 준비 상태나 대기 상태로 옮겨 간다.
혼동 주의: 대기 상태의 프로세스는 입출력이 끝나도 곧바로 실행 상태로 가지 않는다. 먼저 웨이크업으로 준비 상태에 들어간다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
다음 설명에 해당하는 운영체제를 적으시오.
유닉스(UNIX)
[해설]
벨 연구소에서 개발했고 C 언어로 작성해 이식성이 높은 운영체제는 유닉스(UNIX)이다.
파일 시스템은 루트(/)에서 뻗어 나가는 계층적 트리 구조이다. 리눅스와 macOS가 이 설계를 이어받았다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
테스트 오라클의 종류 중 다음 설명에 해당하는 것을 적으시오.
샘플링 오라클(Sampling Oracle)
[해설]
선택한 일부 입력에 대해서만 기대 결과를 주는 것은 샘플링 오라클(Sampling Oracle)이다.
테스트 오라클은 테스트 결과가 맞는지 판단하는 기준, 곧 참값을 대입해 비교하는 기법이다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
아래 Java 프로그램의 [실행 결과]를 참고해 빈칸 ①, ②에 들어갈 값을 적으시오. (단, 배열은 반복문이 접근하는 범위에 꼭 맞는 최소 크기로 선언한다.)
public class Main {
public static void main(String[] args) {
int[][] tbl = new int[ ① ][ ② ];
for (int r = 0; r < 4; r++) {
for (int c = 0; c < 3; c++) {
tbl[r][c] = c * 4 + r + 1;
System.out.print(tbl[r][c] + " ");
}
System.out.println();
}
}
}[실행 결과]
1 5 9
2 6 10
3 7 11
4 8 12① 4
② 3
[해설]
바깥 반복 r이 0~3(4회), 안쪽 반복 c가 0~2(3회) 돌며 tbl[r][c]에 접근하므로 배열은 4행 3열이어야 한다.
값은 c×4 + r + 1이라 열이 하나 넘어갈 때마다 4씩 커진다. 예컨대 r=1, c=2이면 2×4+1+1=10이다.
따라서 ①은 4, ②는 3이다. 크기를 더 작게 잡으면 ArrayIndexOutOfBoundsException이 난다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
정보보안의 3대 요소 중 가용성(Availability)의 의미를 간단히 서술하시오.
인가된 사용자가 필요할 때 언제든 정보와 서비스를 이용할 수 있도록 보장하는 성질
[해설]
가용성은 권한 있는 사용자가 원할 때 서비스·자원을 중단 없이 쓸 수 있게 보장하는 특성이다.
가용성을 해치는 대표 공격은 DoS·DDoS이며, 이중화·백업·부하 분산으로 대비한다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
다음 설명에 해당하는 기술을 적으시오.
NAT
[해설]
사설 IP와 공인 IP를 서로 바꿔 주는 기술은 NAT(Network Address Translation, 네트워크 주소 변환)이다.
라우터는 나가는 패킷의 출발지 주소를 공인 IP로 바꿔 기록하고, 돌아오는 패킷은 그 기록을 보고 내부 사설 IP로 되돌린다. 외부에서는 내부 호스트 주소가 보이지 않아 내부 구조를 숨기는 효과도 있다.
혼동 주의: 포트 번호까지 바꿔 공인 IP 하나를 여러 호스트가 나눠 쓰는 방식은 NAT의 한 형태인 PAT(NAPT)다. 답은 상위 개념인 NAT로 쓴다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
[사원] 테이블에서 부서마다 사원(튜플)이 몇 명인지 구하는 SQL 문을 [조건]에 맞게 작성하시오.
[사원]
| 부서 | 이름 |
|---|---|
| 영업 | 김하준 |
| 기획 | 최서연 |
| 영업 | 정민호 |
| 개발 | 윤지아 |
| 영업 | 한도현 |
| 개발 | 서예린 |
[조건]
SELECT 부서, COUNT(*) AS 인원수 FROM 사원 GROUP BY 부서;
[해설]
부서별로 묶어야 하므로 GROUP BY 부서, 행 수를 세야 하므로 COUNT(*)를 쓴다.
COUNT(*) 대신 COUNT(부서)나 COUNT(이름)도 NULL이 없으니 같은 결과이며, 별칭 이름은 자유다.
| 부서 | 인원수 |
|---|---|
| 개발 | 2 |
| 기획 | 1 |
| 영업 | 3 |
그룹에 조건을 걸어야 할 때는 WHERE가 아니라 HAVING을 쓴다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
GoF(Gang of Four) 디자인 패턴을 목적에 따라 나누면 세 가지 유형이 된다. 빈칸에 알맞은 유형을 적으시오.
행위(Behavioral)
[해설]
객체 간 상호작용과 책임 분배를 다루는 유형은 행위(Behavioral) 패턴이다.
GoF 패턴은 이렇게 목적 기준 세 유형, 총 23개로 정리된다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
다음 설명에 해당하는 소프트웨어 프레임워크를 적으시오.
하둡(Hadoop)
[해설]
HDFS와 MapReduce를 핵심으로 하는 오픈 소스 분산 처리 프레임워크는 하둡(Hadoop)이다.
관계형 DB와 하둡 사이 데이터 이동에는 스쿱(Sqoop)을 쓴다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
아래 C 프로그램의 실행 결과를 적으시오.
#include <stdio.h>
int main(void) {
const char *s = "GALAXY";
printf("%s\n", s + 2);
printf("%c\n", *(s + 4));
printf("%s\n", s);
printf("%c\n", *s + 3);
printf("%c\n", *s);
return 0;
}LAXY
X
GALAXY
J
G
[해설]
s는 문자열 "GALAXY"의 첫 글자를 가리키는 포인터이고, 인덱스는 G0·A1·L2·A3·X4·Y5다. %s는 그 주소부터 널 문자 전까지, %c는 문자 하나만 출력한다.
혼동 주의: *s + 3은 연산자 우선순위상 (*s) + 3이지 *(s + 3)이 아니다. 그래서 인덱스 3의 'A'가 아니라 G→H→I→J가 찍힌다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
정규화가 덜 된 릴레이션에서 데이터 중복 때문에 조작 시 예기치 않은 문제가 생기는 것을 이상(Anomaly) 현상이라 한다. 이상 현상의 종류 세 가지를 적으시오.
① 삽입 이상
② 삭제 이상
③ 갱신 이상
[해설]
이상 현상은 데이터를 넣을 때, 지울 때, 고칠 때 각각 생기므로 삽입 이상·삭제 이상·갱신 이상의 세 가지다.
이런 이상은 함수 종속을 분석해 릴레이션을 분해하는 정규화로 없앤다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
온라인 쇼핑몰 시스템을 UML로 모델링한 다이어그램을 글로 옮긴 것이다. 이 다이어그램의 명칭을 적으시오.
패키지 다이어그램(Package Diagram)
[해설]
위쪽에 탭이 달린 폴더 모양은 UML의 패키지 기호다. 따라서 이 그림은 패키지 다이어그램(Package Diagram)이다.
패키지 다이어그램은 모델 요소를 묶은 패키지들 사이의 의존 관계를 점선 화살표로 나타내는 구조 다이어그램이다. ≪import≫는 대상 패키지의 공개 요소를 가져와 쓴다는 뜻의 스테레오타입이다.
혼동 주의: ≪access≫도 같은 점선 화살표로 그린다. 다만 가져온 요소를 그 패키지 안에서만 비공개로 쓴다는 점이 ≪import≫와 다르다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
20-4
데이터베이스 장애 회복 기법 중 다음 설명에 해당하는 것을 적으시오.
즉각 갱신 회복 기법(Immediate Update)
[해설]
갱신을 곧바로 DB에 반영하므로 즉각 갱신(Immediate Update) 회복 기법이다.
커밋 전의 변경이 이미 디스크에 있을 수 있어 Undo가 필요하고, 커밋된 변경이 반영 전에 유실될 수도 있어 Redo도 필요하다.
반대로 지연 갱신(Deferred Update)은 커밋 시점까지 반영을 미루므로 Redo만 쓰고 Undo는 필요 없다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
2020년 정보처리기사실기 4회차 시험지 PDF 다운로드·인쇄 →
전 회차를 한 권으로 — 정보처리기사 실기 기출문제 PDF 전자책(문제집·정답해설집) →
2020년 정보처리기사실기 4회차 정답과 해설은 무료인가요?
이 페이지의 20문항 정답과 해설은 로그인 없이 무료로 볼 수 있습니다. 무제한 풀이·실전 모의고사·PDF 출력·전자책 다운로드는 베이직 플랜에 포함됩니다.
이 회차를 CBT 로 직접 풀어볼 수 있나요?
정보처리기사 실기 기출문제 암기장에서 이 회차를 회차별·랜덤으로 풀고 오답노트에 자동으로 모을 수 있습니다. 정보처리기사 실기 기출문제 풀러 가기 →
시험지 PDF 나 전자책으로도 볼 수 있나요?
이 회차의 인쇄용 시험지 PDF 와, 전 회차를 문제집·정답해설집으로 묶은 PDF 전자책을 제공합니다. 정보처리기사 실기 기출문제 PDF 전자책 보기 →