2020년-정보처리기사실기-4회차
정보처리기사 실기 기출문제

2020년 정보처리기사실기 4회차

총 20문항 · 주관식 · A4 약 1장

1 / 1
A4정답 포함
정보처리기사 실기 기출문제모두CBT · moducbt.com

2020년 정보처리기사실기 4회차

총 20문항 · 주관식 · 정답·해설 포함
문제 1

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이다.

  • 안쪽 for는 end=''라 줄을 바꾸지 않고 원소를 이어 붙인다.
  • 한 행이 끝나면 print()가 줄을 바꾼다.

그래서 행마다 58, 2461, 937이 한 줄씩 출력된다.

문제 2

20-4

네트워크 보안 위협 중 스니핑(Sniffing)이 무엇인지 간단히 서술하시오.

정답 및 해설

네트워크를 오가는 패킷을 몰래 엿들어(도청) 정보를 빼내는 수동적 공격


[해설]

스니핑은 네트워크로 전송되는 패킷을 도청해 계정·비밀번호 등을 가로채는 공격이다.

데이터를 바꾸지 않고 엿보기만 하므로 수동적 공격에 속하며, 이 때문에 탐지가 어렵다.

랜카드를 무차별 모드(Promiscuous Mode)로 두어 자기 앞이 아닌 패킷까지 수집하는 방식이 대표적이다. 대응책은 SSL/TLS·SSH 같은 암호화 통신 사용이다.

문제 3

20-4

다음 설명에 해당하는 기술을 적으시오.

  • 중앙 관리자 없이 P2P 네트워크의 참여자들이 같은 거래 장부를 나누어 보관하는 분산 원장 기술이다.
  • 거래 기록을 묶은 '블록'을 앞 블록의 해시값과 이어 사슬 형태로 저장하므로, 한 곳을 고치면 뒤따르는 연결이 모두 깨져 위·변조가 사실상 불가능하다.
  • 기록은 참여자 누구나 열람할 수 있다.
정답 및 해설

블록체인(Blockchain)


[해설]

중앙 관리자 없이 참여자가 같은 장부를 나눠 갖는 분산 원장 기술의 대표가 블록체인(Blockchain)이다.

각 블록은 앞 블록의 해시값을 담아 사슬처럼 이어진다. 그래서 과거 블록 하나를 고치면 뒤따르는 모든 해시가 어긋나 위·변조가 드러난다.

새 블록은 참여 노드들의 합의(작업증명 PoW, 지분증명 PoS 등)를 거쳐 붙으므로 탈중앙화된 신뢰가 만들어진다.

문제 4

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로 연결된다(동적 바인딩).

  • 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

따라서 출력은 11이다. Base의 피보나치식 calc(6)=8로 계산하면 틀린다.

문제 5

20-4

다음 설명에 해당하는 인터넷 프로토콜의 이름을 적으시오.

  • 32비트 주소 체계의 한계로 주소가 부족해지는 문제를 풀기 위해 등장한 차세대 IP이다.
  • 주소 길이를 128비트로 늘렸고, 인증·암호화(보안)와 이동 단말 지원을 기본 설계에 포함하였다.
정답 및 해설

IPv6


[해설]

128비트 주소를 쓰는 차세대 인터넷 프로토콜은 IPv6(Internet Protocol version 6)이다.

IPv4는 32비트라 약 43억 개의 주소밖에 만들 수 없다. IPv6는 16비트씩 8구간을 콜론(:)으로 나누어 16진수로 표기한다.

IPv6 주소 유형은 유니캐스트·멀티캐스트·애니캐스트 세 가지이며, IPv4의 브로드캐스트는 없다.

문제 6

20-4

시험 점수에 따라 등급을 매기는 프로그램을 검사하려 한다. 등급 기준과 준비한 테스트 입력값이 다음과 같을 때, 적용된 블랙박스 테스트 기법의 이름을 적으시오.

점수 구간등급
0 이상 60 미만가
60 이상 70 미만양
70 이상 80 미만미
80 이상 90 미만우
90 이상 100 이하수

[테스트 입력값] -20, 42, 66, 73, 84, 97, 125

정답 및 해설

동치 분할 테스트(Equivalence Partitioning)


[해설]

입력값이 각 구간의 경계가 아니라 구간 안쪽의 대표값이므로 동치(동등) 분할 테스트이다.

  • 유효 구간 다섯 개에서 하나씩: 42(가), 66(양), 73(미), 84(우), 97(수)
  • 무효 구간 두 개에서 하나씩: -20(0 미만), 125(100 초과)

입력을 결과가 같은 묶음(동치 클래스)으로 나누고, 묶음마다 대표값 하나만 시험하는 방식이다.

59·60·89·90처럼 구간의 끝값을 고르면 경계값 분석이 된다.

문제 7

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이 될 때까지 이를 되풀이한다.

  • 반복 조건 num > 0: 몫이 0이 되면 더 만들 자릿수가 없으므로 반복을 멈춘다.
  • 저장할 값 num % 2: 지금 자리의 비트(0 또는 1)이다.

45→1, 22→0, 11→1, 5→1, 2→0, 1→1 순서로 bits[0]~bits[5]가 채워진다. 뒤의 for 문이 bits[5]부터 거꾸로 출력하므로 101101이 된다.

문제 8

20-4

운영체제의 프로세스 상태 전이를 표로 정리하였다. 빈칸 ①~③에 알맞은 상태의 이름을 적으시오.

현재 상태사건다음 상태
생성승인(메모리 적재)( ① )
( ① )디스패치(CPU 할당)( ② )
( ② )할당 시간 만료(타이머 런아웃)( ① )
( ② )입출력 요청 등 사건 대기( ③ )
( ③ )입출력 완료(웨이크업)( ① )
( ② )작업 끝완료(종료)
정답 및 해설

① 준비(Ready)

② 실행(Running)

③ 대기(Waiting)


[해설]

프로세스는 생성 → 준비 → 실행 → 완료 순서로 진행하는 것이 기본이고, 실행 중 일어나는 사건에 따라 준비 상태나 대기 상태로 옮겨 간다.

  • 준비(Ready): 메모리에 올라와 CPU를 배정받기만 기다리는 상태이며, 할당 시간이 끝난 프로세스도 이 상태로 돌아온다.
  • 실행(Running): 디스패치로 CPU를 받아 명령을 수행하는 상태이다.
  • 대기(Waiting): 입출력 같은 사건이 끝나기를 기다리며 멈춰 있는 상태로, Blocked라고도 한다.

혼동 주의: 대기 상태의 프로세스는 입출력이 끝나도 곧바로 실행 상태로 가지 않는다. 먼저 웨이크업으로 준비 상태에 들어간다.

문제 9

20-4

다음 설명에 해당하는 운영체제를 적으시오.

  • 1970년 무렵 벨 연구소에서 켄 톰슨과 데니스 리치 등이 개발하였다.
  • 대부분이 C 언어로 작성되어 있어 다른 하드웨어로 옮기기(이식) 쉽다.
  • 커널과 셸로 나뉜 모듈 구조이며, 다중 사용자·다중 작업을 지원한다.
  • 파일 시스템이 루트(/)에서 뻗어 나가는 계층적 트리 구조라 파일 관리가 편하다.
정답 및 해설

유닉스(UNIX)


[해설]

벨 연구소에서 개발했고 C 언어로 작성해 이식성이 높은 운영체제는 유닉스(UNIX)이다.

  • 커널은 하드웨어·프로세스·메모리를 관리하는 핵심 부분이다.
  • 셸은 사용자가 입력한 명령을 해석해 커널에 전달하는 명령 해석기이다.

파일 시스템은 루트(/)에서 뻗어 나가는 계층적 트리 구조이다. 리눅스와 macOS가 이 설계를 이어받았다.

문제 10

20-4

테스트 오라클의 종류 중 다음 설명에 해당하는 것을 적으시오.

  • 가능한 모든 입력이 아니라, 미리 골라 둔 일부 입력값에 대해서만 올바른 기대 결과를 제공한다.
  • 그 밖의 입력값에 대해서는 결과를 판정해 주지 않는다.
정답 및 해설

샘플링 오라클(Sampling Oracle)


[해설]

선택한 일부 입력에 대해서만 기대 결과를 주는 것은 샘플링 오라클(Sampling Oracle)이다.

  • 참(True) 오라클: 모든 입력값에 대해 기대 결과를 제공해 모든 오류를 검출할 수 있다.
  • 추정(Heuristic) 오라클: 샘플링 오라클을 개선해, 나머지 입력에는 추정으로 결과를 제공한다.
  • 일관성(Consistent) 검사 오라클: 변경 전후 결과가 같은지를 확인한다.

테스트 오라클은 테스트 결과가 맞는지 판단하는 기준, 곧 참값을 대입해 비교하는 기법이다.

문제 11

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이 난다.

문제 12

20-4

정보보안의 3대 요소 중 가용성(Availability)의 의미를 간단히 서술하시오.

정답 및 해설

인가된 사용자가 필요할 때 언제든 정보와 서비스를 이용할 수 있도록 보장하는 성질


[해설]

가용성은 권한 있는 사용자가 원할 때 서비스·자원을 중단 없이 쓸 수 있게 보장하는 특성이다.

  • 기밀성(Confidentiality): 인가된 사용자만 정보에 접근할 수 있다.
  • 무결성(Integrity): 인가된 사용자만 정보를 정해진 방법으로 고칠 수 있다.
  • 가용성(Availability): 인가된 사용자가 필요할 때 쓸 수 있다.

가용성을 해치는 대표 공격은 DoS·DDoS이며, 이중화·백업·부하 분산으로 대비한다.

문제 13

20-4

다음 설명에 해당하는 기술을 적으시오.

  • 라우터가 패킷을 중계하면서, 내부망에서 쓰는 사설 IP 주소(와 포트)를 외부에 보이는 공인 IP 주소(와 포트)로 바꾸어 기록하고, 돌아오는 패킷은 반대로 되바꾼다.
  • 공인 IP 주소 하나로 여러 내부 호스트가 인터넷을 쓸 수 있어 주소 부족을 덜고, 내부 구조를 숨기는 효과도 있다.
정답 및 해설

NAT


[해설]

사설 IP와 공인 IP를 서로 바꿔 주는 기술은 NAT(Network Address Translation, 네트워크 주소 변환)이다.

라우터는 나가는 패킷의 출발지 주소를 공인 IP로 바꿔 기록하고, 돌아오는 패킷은 그 기록을 보고 내부 사설 IP로 되돌린다. 외부에서는 내부 호스트 주소가 보이지 않아 내부 구조를 숨기는 효과도 있다.

혼동 주의: 포트 번호까지 바꿔 공인 IP 하나를 여러 호스트가 나눠 쓰는 방식은 NAT의 한 형태인 PAT(NAPT)다. 답은 상위 개념인 NAT로 쓴다.

문제 14

20-4

[사원] 테이블에서 부서마다 사원(튜플)이 몇 명인지 구하는 SQL 문을 [조건]에 맞게 작성하시오.

[사원]

부서이름
영업김하준
기획최서연
영업정민호
개발윤지아
영업한도현
개발서예린

[조건]

  • WHERE 절은 쓰지 않는다.
  • GROUP BY 절을 사용한다.
  • 집계 함수를 사용하고, 그 결과 열에는 AS로 별칭을 붙인다.
  • 대소문자는 구분하지 않으며, 끝의 세미콜론(;)은 생략해도 된다.
정답 및 해설

SELECT 부서, COUNT(*) AS 인원수 FROM 사원 GROUP BY 부서;


[해설]

부서별로 묶어야 하므로 GROUP BY 부서, 행 수를 세야 하므로 COUNT(*)를 쓴다.

COUNT(*) 대신 COUNT(부서)나 COUNT(이름)도 NULL이 없으니 같은 결과이며, 별칭 이름은 자유다.

부서인원수
개발2
기획1
영업3

그룹에 조건을 걸어야 할 때는 WHERE가 아니라 HAVING을 쓴다.

문제 15

20-4

GoF(Gang of Four) 디자인 패턴을 목적에 따라 나누면 세 가지 유형이 된다. 빈칸에 알맞은 유형을 적으시오.

  • 생성 패턴: 객체를 만드는 과정을 캡슐화한다.
  • 구조 패턴: 클래스와 객체를 조합해 더 큰 구조를 만든다.
  • ( ) 패턴: 객체들이 서로 상호작용하고 책임을 나누는 방법을 다룬다.
정답 및 해설

행위(Behavioral)


[해설]

객체 간 상호작용과 책임 분배를 다루는 유형은 행위(Behavioral) 패턴이다.

  • 생성: Singleton, Factory Method, Abstract Factory, Builder, Prototype
  • 구조: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
  • 행위: Observer, Strategy, Command, Iterator, State, Template Method, Visitor 등

GoF 패턴은 이렇게 목적 기준 세 유형, 총 23개로 정리된다.

문제 16

20-4

다음 설명에 해당하는 소프트웨어 프레임워크를 적으시오.

  • Java로 작성된 오픈 소스 분산 처리 플랫폼이다.
  • 값싼 범용 서버 여러 대를 묶어 하나의 거대한 가상 저장소(HDFS)를 만들고, 그 안의 대용량 데이터를 MapReduce로 나누어 병렬 처리한다.
  • 야후, 페이스북 등 대형 인터넷 기업이 빅데이터 처리에 도입하였다.
정답 및 해설

하둡(Hadoop)


[해설]

HDFS와 MapReduce를 핵심으로 하는 오픈 소스 분산 처리 프레임워크는 하둡(Hadoop)이다.

  • HDFS: 데이터를 블록으로 쪼개 여러 노드에 복제 저장하는 분산 파일 시스템
  • MapReduce: 작업을 Map(분할 처리)과 Reduce(결과 취합)로 나누는 병렬 처리 모델
  • YARN: 클러스터 자원을 관리·배분하는 계층

관계형 DB와 하둡 사이 데이터 이동에는 스쿱(Sqoop)을 쓴다.

문제 17

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 + 2 — 인덱스 2부터 끝까지 출력해 LAXY.
  • *(s + 4) — 인덱스 4의 문자 X.
  • s — 문자열 전체인 GALAXY.
  • *s + 3 — 'G'에 3을 더한 문자 J.
  • *s — 첫 글자 G.

혼동 주의: *s + 3은 연산자 우선순위상 (*s) + 3이지 *(s + 3)이 아니다. 그래서 인덱스 3의 'A'가 아니라 G→H→I→J가 찍힌다.

문제 18

20-4

정규화가 덜 된 릴레이션에서 데이터 중복 때문에 조작 시 예기치 않은 문제가 생기는 것을 이상(Anomaly) 현상이라 한다. 이상 현상의 종류 세 가지를 적으시오.

정답 및 해설

① 삽입 이상

② 삭제 이상

③ 갱신 이상


[해설]

이상 현상은 데이터를 넣을 때, 지울 때, 고칠 때 각각 생기므로 삽입 이상·삭제 이상·갱신 이상의 세 가지다.

  • 삽입 이상: 원치 않는 값(NULL 등)까지 함께 넣어야 저장이 가능하다.
  • 삭제 이상: 한 튜플을 지우면 남겨야 할 다른 정보까지 함께 사라진다(연쇄 삭제).
  • 갱신 이상: 중복된 값 중 일부만 바뀌어 데이터가 서로 어긋난다(불일치).

이런 이상은 함수 종속을 분석해 릴레이션을 분해하는 정규화로 없앤다.

문제 19

20-4

온라인 쇼핑몰 시스템을 UML로 모델링한 다이어그램을 글로 옮긴 것이다. 이 다이어그램의 명칭을 적으시오.

  • 위쪽에 작은 탭이 붙은 폴더 모양 사각형 세 개가 있고, 각각 [주문], [가격], [상품]이라는 이름이 적혀 있다.
  • [주문]에서 [가격]으로 점선 화살표가 그어져 있다.
  • [주문]에서 [상품]으로도 점선 화살표가 있으며, 화살표 옆에 ≪import≫라고 표기되어 있다.
정답 및 해설

패키지 다이어그램(Package Diagram)


[해설]

위쪽에 탭이 달린 폴더 모양은 UML의 패키지 기호다. 따라서 이 그림은 패키지 다이어그램(Package Diagram)이다.

패키지 다이어그램은 모델 요소를 묶은 패키지들 사이의 의존 관계를 점선 화살표로 나타내는 구조 다이어그램이다. ≪import≫는 대상 패키지의 공개 요소를 가져와 쓴다는 뜻의 스테레오타입이다.

혼동 주의: ≪access≫도 같은 점선 화살표로 그린다. 다만 가져온 요소를 그 패키지 안에서만 비공개로 쓴다는 점이 ≪import≫와 다르다.

문제 20

20-4

데이터베이스 장애 회복 기법 중 다음 설명에 해당하는 것을 적으시오.

  • 트랜잭션이 실행되는 도중에도, 커밋을 기다리지 않고 변경 내용을 즉시 데이터베이스에 기록한다.
  • 장애가 나면 로그를 바탕으로, 완료된 트랜잭션은 Redo하고 완료되지 않은 트랜잭션은 Undo한다. 즉 Redo와 Undo를 모두 사용한다.
정답 및 해설

즉각 갱신 회복 기법(Immediate Update)


[해설]

갱신을 곧바로 DB에 반영하므로 즉각 갱신(Immediate Update) 회복 기법이다.

커밋 전의 변경이 이미 디스크에 있을 수 있어 Undo가 필요하고, 커밋된 변경이 반영 전에 유실될 수도 있어 Redo도 필요하다.

반대로 지연 갱신(Deferred Update)은 커밋 시점까지 반영을 미루므로 Redo만 쓰고 Undo는 필요 없다.

정보처리기사 실기 기출문제모두CBT · moducbt.com
2020년 정보처리기사실기 4회차
총 20문항 · 주관식 · 정답·해설 포함
문제 1

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이다.

  • 안쪽 for는 end=''라 줄을 바꾸지 않고 원소를 이어 붙인다.
  • 한 행이 끝나면 print()가 줄을 바꾼다.

그래서 행마다 58, 2461, 937이 한 줄씩 출력된다.

문제 2

20-4

네트워크 보안 위협 중 스니핑(Sniffing)이 무엇인지 간단히 서술하시오.

정답 및 해설

네트워크를 오가는 패킷을 몰래 엿들어(도청) 정보를 빼내는 수동적 공격


[해설]

스니핑은 네트워크로 전송되는 패킷을 도청해 계정·비밀번호 등을 가로채는 공격이다.

데이터를 바꾸지 않고 엿보기만 하므로 수동적 공격에 속하며, 이 때문에 탐지가 어렵다.

랜카드를 무차별 모드(Promiscuous Mode)로 두어 자기 앞이 아닌 패킷까지 수집하는 방식이 대표적이다. 대응책은 SSL/TLS·SSH 같은 암호화 통신 사용이다.

문제 3

20-4

다음 설명에 해당하는 기술을 적으시오.

  • 중앙 관리자 없이 P2P 네트워크의 참여자들이 같은 거래 장부를 나누어 보관하는 분산 원장 기술이다.
  • 거래 기록을 묶은 '블록'을 앞 블록의 해시값과 이어 사슬 형태로 저장하므로, 한 곳을 고치면 뒤따르는 연결이 모두 깨져 위·변조가 사실상 불가능하다.
  • 기록은 참여자 누구나 열람할 수 있다.
정답 및 해설

블록체인(Blockchain)


[해설]

중앙 관리자 없이 참여자가 같은 장부를 나눠 갖는 분산 원장 기술의 대표가 블록체인(Blockchain)이다.

각 블록은 앞 블록의 해시값을 담아 사슬처럼 이어진다. 그래서 과거 블록 하나를 고치면 뒤따르는 모든 해시가 어긋나 위·변조가 드러난다.

새 블록은 참여 노드들의 합의(작업증명 PoW, 지분증명 PoS 등)를 거쳐 붙으므로 탈중앙화된 신뢰가 만들어진다.

문제 4

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로 연결된다(동적 바인딩).

  • 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

따라서 출력은 11이다. Base의 피보나치식 calc(6)=8로 계산하면 틀린다.

문제 5

20-4

다음 설명에 해당하는 인터넷 프로토콜의 이름을 적으시오.

  • 32비트 주소 체계의 한계로 주소가 부족해지는 문제를 풀기 위해 등장한 차세대 IP이다.
  • 주소 길이를 128비트로 늘렸고, 인증·암호화(보안)와 이동 단말 지원을 기본 설계에 포함하였다.
정답 및 해설

IPv6


[해설]

128비트 주소를 쓰는 차세대 인터넷 프로토콜은 IPv6(Internet Protocol version 6)이다.

IPv4는 32비트라 약 43억 개의 주소밖에 만들 수 없다. IPv6는 16비트씩 8구간을 콜론(:)으로 나누어 16진수로 표기한다.

IPv6 주소 유형은 유니캐스트·멀티캐스트·애니캐스트 세 가지이며, IPv4의 브로드캐스트는 없다.

문제 6

20-4

시험 점수에 따라 등급을 매기는 프로그램을 검사하려 한다. 등급 기준과 준비한 테스트 입력값이 다음과 같을 때, 적용된 블랙박스 테스트 기법의 이름을 적으시오.

점수 구간등급
0 이상 60 미만가
60 이상 70 미만양
70 이상 80 미만미
80 이상 90 미만우
90 이상 100 이하수

[테스트 입력값] -20, 42, 66, 73, 84, 97, 125

정답 및 해설

동치 분할 테스트(Equivalence Partitioning)


[해설]

입력값이 각 구간의 경계가 아니라 구간 안쪽의 대표값이므로 동치(동등) 분할 테스트이다.

  • 유효 구간 다섯 개에서 하나씩: 42(가), 66(양), 73(미), 84(우), 97(수)
  • 무효 구간 두 개에서 하나씩: -20(0 미만), 125(100 초과)

입력을 결과가 같은 묶음(동치 클래스)으로 나누고, 묶음마다 대표값 하나만 시험하는 방식이다.

59·60·89·90처럼 구간의 끝값을 고르면 경계값 분석이 된다.

문제 7

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이 될 때까지 이를 되풀이한다.

  • 반복 조건 num > 0: 몫이 0이 되면 더 만들 자릿수가 없으므로 반복을 멈춘다.
  • 저장할 값 num % 2: 지금 자리의 비트(0 또는 1)이다.

45→1, 22→0, 11→1, 5→1, 2→0, 1→1 순서로 bits[0]~bits[5]가 채워진다. 뒤의 for 문이 bits[5]부터 거꾸로 출력하므로 101101이 된다.

문제 8

20-4

운영체제의 프로세스 상태 전이를 표로 정리하였다. 빈칸 ①~③에 알맞은 상태의 이름을 적으시오.

현재 상태사건다음 상태
생성승인(메모리 적재)( ① )
( ① )디스패치(CPU 할당)( ② )
( ② )할당 시간 만료(타이머 런아웃)( ① )
( ② )입출력 요청 등 사건 대기( ③ )
( ③ )입출력 완료(웨이크업)( ① )
( ② )작업 끝완료(종료)
정답 및 해설

① 준비(Ready)

② 실행(Running)

③ 대기(Waiting)


[해설]

프로세스는 생성 → 준비 → 실행 → 완료 순서로 진행하는 것이 기본이고, 실행 중 일어나는 사건에 따라 준비 상태나 대기 상태로 옮겨 간다.

  • 준비(Ready): 메모리에 올라와 CPU를 배정받기만 기다리는 상태이며, 할당 시간이 끝난 프로세스도 이 상태로 돌아온다.
  • 실행(Running): 디스패치로 CPU를 받아 명령을 수행하는 상태이다.
  • 대기(Waiting): 입출력 같은 사건이 끝나기를 기다리며 멈춰 있는 상태로, Blocked라고도 한다.

혼동 주의: 대기 상태의 프로세스는 입출력이 끝나도 곧바로 실행 상태로 가지 않는다. 먼저 웨이크업으로 준비 상태에 들어간다.

문제 9

20-4

다음 설명에 해당하는 운영체제를 적으시오.

  • 1970년 무렵 벨 연구소에서 켄 톰슨과 데니스 리치 등이 개발하였다.
  • 대부분이 C 언어로 작성되어 있어 다른 하드웨어로 옮기기(이식) 쉽다.
  • 커널과 셸로 나뉜 모듈 구조이며, 다중 사용자·다중 작업을 지원한다.
  • 파일 시스템이 루트(/)에서 뻗어 나가는 계층적 트리 구조라 파일 관리가 편하다.
정답 및 해설

유닉스(UNIX)


[해설]

벨 연구소에서 개발했고 C 언어로 작성해 이식성이 높은 운영체제는 유닉스(UNIX)이다.

  • 커널은 하드웨어·프로세스·메모리를 관리하는 핵심 부분이다.
  • 셸은 사용자가 입력한 명령을 해석해 커널에 전달하는 명령 해석기이다.

파일 시스템은 루트(/)에서 뻗어 나가는 계층적 트리 구조이다. 리눅스와 macOS가 이 설계를 이어받았다.

문제 10

20-4

테스트 오라클의 종류 중 다음 설명에 해당하는 것을 적으시오.

  • 가능한 모든 입력이 아니라, 미리 골라 둔 일부 입력값에 대해서만 올바른 기대 결과를 제공한다.
  • 그 밖의 입력값에 대해서는 결과를 판정해 주지 않는다.
정답 및 해설

샘플링 오라클(Sampling Oracle)


[해설]

선택한 일부 입력에 대해서만 기대 결과를 주는 것은 샘플링 오라클(Sampling Oracle)이다.

  • 참(True) 오라클: 모든 입력값에 대해 기대 결과를 제공해 모든 오류를 검출할 수 있다.
  • 추정(Heuristic) 오라클: 샘플링 오라클을 개선해, 나머지 입력에는 추정으로 결과를 제공한다.
  • 일관성(Consistent) 검사 오라클: 변경 전후 결과가 같은지를 확인한다.

테스트 오라클은 테스트 결과가 맞는지 판단하는 기준, 곧 참값을 대입해 비교하는 기법이다.

문제 11

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이 난다.

문제 12

20-4

정보보안의 3대 요소 중 가용성(Availability)의 의미를 간단히 서술하시오.

정답 및 해설

인가된 사용자가 필요할 때 언제든 정보와 서비스를 이용할 수 있도록 보장하는 성질


[해설]

가용성은 권한 있는 사용자가 원할 때 서비스·자원을 중단 없이 쓸 수 있게 보장하는 특성이다.

  • 기밀성(Confidentiality): 인가된 사용자만 정보에 접근할 수 있다.
  • 무결성(Integrity): 인가된 사용자만 정보를 정해진 방법으로 고칠 수 있다.
  • 가용성(Availability): 인가된 사용자가 필요할 때 쓸 수 있다.

가용성을 해치는 대표 공격은 DoS·DDoS이며, 이중화·백업·부하 분산으로 대비한다.

문제 13

20-4

다음 설명에 해당하는 기술을 적으시오.

  • 라우터가 패킷을 중계하면서, 내부망에서 쓰는 사설 IP 주소(와 포트)를 외부에 보이는 공인 IP 주소(와 포트)로 바꾸어 기록하고, 돌아오는 패킷은 반대로 되바꾼다.
  • 공인 IP 주소 하나로 여러 내부 호스트가 인터넷을 쓸 수 있어 주소 부족을 덜고, 내부 구조를 숨기는 효과도 있다.
정답 및 해설

NAT


[해설]

사설 IP와 공인 IP를 서로 바꿔 주는 기술은 NAT(Network Address Translation, 네트워크 주소 변환)이다.

라우터는 나가는 패킷의 출발지 주소를 공인 IP로 바꿔 기록하고, 돌아오는 패킷은 그 기록을 보고 내부 사설 IP로 되돌린다. 외부에서는 내부 호스트 주소가 보이지 않아 내부 구조를 숨기는 효과도 있다.

혼동 주의: 포트 번호까지 바꿔 공인 IP 하나를 여러 호스트가 나눠 쓰는 방식은 NAT의 한 형태인 PAT(NAPT)다. 답은 상위 개념인 NAT로 쓴다.

문제 14

20-4

[사원] 테이블에서 부서마다 사원(튜플)이 몇 명인지 구하는 SQL 문을 [조건]에 맞게 작성하시오.

[사원]

부서이름
영업김하준
기획최서연
영업정민호
개발윤지아
영업한도현
개발서예린

[조건]

  • WHERE 절은 쓰지 않는다.
  • GROUP BY 절을 사용한다.
  • 집계 함수를 사용하고, 그 결과 열에는 AS로 별칭을 붙인다.
  • 대소문자는 구분하지 않으며, 끝의 세미콜론(;)은 생략해도 된다.
정답 및 해설

SELECT 부서, COUNT(*) AS 인원수 FROM 사원 GROUP BY 부서;


[해설]

부서별로 묶어야 하므로 GROUP BY 부서, 행 수를 세야 하므로 COUNT(*)를 쓴다.

COUNT(*) 대신 COUNT(부서)나 COUNT(이름)도 NULL이 없으니 같은 결과이며, 별칭 이름은 자유다.

부서인원수
개발2
기획1
영업3

그룹에 조건을 걸어야 할 때는 WHERE가 아니라 HAVING을 쓴다.

문제 15

20-4

GoF(Gang of Four) 디자인 패턴을 목적에 따라 나누면 세 가지 유형이 된다. 빈칸에 알맞은 유형을 적으시오.

  • 생성 패턴: 객체를 만드는 과정을 캡슐화한다.
  • 구조 패턴: 클래스와 객체를 조합해 더 큰 구조를 만든다.
  • ( ) 패턴: 객체들이 서로 상호작용하고 책임을 나누는 방법을 다룬다.
정답 및 해설

행위(Behavioral)


[해설]

객체 간 상호작용과 책임 분배를 다루는 유형은 행위(Behavioral) 패턴이다.

  • 생성: Singleton, Factory Method, Abstract Factory, Builder, Prototype
  • 구조: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
  • 행위: Observer, Strategy, Command, Iterator, State, Template Method, Visitor 등

GoF 패턴은 이렇게 목적 기준 세 유형, 총 23개로 정리된다.

문제 16

20-4

다음 설명에 해당하는 소프트웨어 프레임워크를 적으시오.

  • Java로 작성된 오픈 소스 분산 처리 플랫폼이다.
  • 값싼 범용 서버 여러 대를 묶어 하나의 거대한 가상 저장소(HDFS)를 만들고, 그 안의 대용량 데이터를 MapReduce로 나누어 병렬 처리한다.
  • 야후, 페이스북 등 대형 인터넷 기업이 빅데이터 처리에 도입하였다.
정답 및 해설

하둡(Hadoop)


[해설]

HDFS와 MapReduce를 핵심으로 하는 오픈 소스 분산 처리 프레임워크는 하둡(Hadoop)이다.

  • HDFS: 데이터를 블록으로 쪼개 여러 노드에 복제 저장하는 분산 파일 시스템
  • MapReduce: 작업을 Map(분할 처리)과 Reduce(결과 취합)로 나누는 병렬 처리 모델
  • YARN: 클러스터 자원을 관리·배분하는 계층

관계형 DB와 하둡 사이 데이터 이동에는 스쿱(Sqoop)을 쓴다.

문제 17

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 + 2 — 인덱스 2부터 끝까지 출력해 LAXY.
  • *(s + 4) — 인덱스 4의 문자 X.
  • s — 문자열 전체인 GALAXY.
  • *s + 3 — 'G'에 3을 더한 문자 J.
  • *s — 첫 글자 G.

혼동 주의: *s + 3은 연산자 우선순위상 (*s) + 3이지 *(s + 3)이 아니다. 그래서 인덱스 3의 'A'가 아니라 G→H→I→J가 찍힌다.

문제 18

20-4

정규화가 덜 된 릴레이션에서 데이터 중복 때문에 조작 시 예기치 않은 문제가 생기는 것을 이상(Anomaly) 현상이라 한다. 이상 현상의 종류 세 가지를 적으시오.

정답 및 해설

① 삽입 이상

② 삭제 이상

③ 갱신 이상


[해설]

이상 현상은 데이터를 넣을 때, 지울 때, 고칠 때 각각 생기므로 삽입 이상·삭제 이상·갱신 이상의 세 가지다.

  • 삽입 이상: 원치 않는 값(NULL 등)까지 함께 넣어야 저장이 가능하다.
  • 삭제 이상: 한 튜플을 지우면 남겨야 할 다른 정보까지 함께 사라진다(연쇄 삭제).
  • 갱신 이상: 중복된 값 중 일부만 바뀌어 데이터가 서로 어긋난다(불일치).

이런 이상은 함수 종속을 분석해 릴레이션을 분해하는 정규화로 없앤다.

문제 19

20-4

온라인 쇼핑몰 시스템을 UML로 모델링한 다이어그램을 글로 옮긴 것이다. 이 다이어그램의 명칭을 적으시오.

  • 위쪽에 작은 탭이 붙은 폴더 모양 사각형 세 개가 있고, 각각 [주문], [가격], [상품]이라는 이름이 적혀 있다.
  • [주문]에서 [가격]으로 점선 화살표가 그어져 있다.
  • [주문]에서 [상품]으로도 점선 화살표가 있으며, 화살표 옆에 ≪import≫라고 표기되어 있다.
정답 및 해설

패키지 다이어그램(Package Diagram)


[해설]

위쪽에 탭이 달린 폴더 모양은 UML의 패키지 기호다. 따라서 이 그림은 패키지 다이어그램(Package Diagram)이다.

패키지 다이어그램은 모델 요소를 묶은 패키지들 사이의 의존 관계를 점선 화살표로 나타내는 구조 다이어그램이다. ≪import≫는 대상 패키지의 공개 요소를 가져와 쓴다는 뜻의 스테레오타입이다.

혼동 주의: ≪access≫도 같은 점선 화살표로 그린다. 다만 가져온 요소를 그 패키지 안에서만 비공개로 쓴다는 점이 ≪import≫와 다르다.

문제 20

20-4

데이터베이스 장애 회복 기법 중 다음 설명에 해당하는 것을 적으시오.

  • 트랜잭션이 실행되는 도중에도, 커밋을 기다리지 않고 변경 내용을 즉시 데이터베이스에 기록한다.
  • 장애가 나면 로그를 바탕으로, 완료된 트랜잭션은 Redo하고 완료되지 않은 트랜잭션은 Undo한다. 즉 Redo와 Undo를 모두 사용한다.
정답 및 해설

즉각 갱신 회복 기법(Immediate Update)


[해설]

갱신을 곧바로 DB에 반영하므로 즉각 갱신(Immediate Update) 회복 기법이다.

커밋 전의 변경이 이미 디스크에 있을 수 있어 Undo가 필요하고, 커밋된 변경이 반영 전에 유실될 수도 있어 Redo도 필요하다.

반대로 지연 갱신(Deferred Update)은 커밋 시점까지 반영을 미루므로 Redo만 쓰고 Undo는 필요 없다.