해당 기술은 클라우드 컴퓨팅이다.
클라우드 컴퓨팅은 서버·스토리지·소프트웨어 같은 컴퓨팅 자원을 인터넷을 통해 필요할 때 필요한 만큼 빌려 쓰는 환경이다.
- 빅데이터는 대용량·다양·고속 데이터를 수집·분석하는 기술이다.
- 가상현실은 컴퓨터로 만든 가상 공간을 실제처럼 체험하게 하는 기술이다.
- 사물인터넷은 사물에 센서·통신 기능을 넣어 인터넷으로 연결하는 기술이다.
스택으로 구현하는 것이 아닌 것은 은행 대기열로, 먼저 온 고객을 먼저 처리하는 큐(FIFO)의 대표 응용이다.
스택은 나중에 들어간 것이 먼저 나오는 LIFO 구조이므로, 최근 항목을 먼저 처리해야 하는 문제에 쓰인다.
- 괄호 매칭은 여는 괄호를 쌓아 두고 닫는 괄호가 나올 때 꺼내 짝을 맞추는 스택 응용이다.
- 진법 변환은 나머지를 쌓아 두었다가 역순으로 꺼내는 스택 응용이다.
- 후위표현 연산은 피연산자를 쌓고 연산자가 나오면 꺼내 계산하는 스택 응용이다.
블록체인의 특징이 아닌 것은 모든 거래를 거래 당사자만 확인할 수 있다는 설명이다.
블록체인은 원장을 참여 노드들이 함께 공유하므로, 특히 퍼블릭 블록체인에서는 거래 내역을 누구나 조회할 수 있다.
- 이전 블록의 해시값을 연결해 변조를 방지한다는 설명은 옳다.
- 모든 노드가 P2P 네트워크로 연결된다는 설명은 옳다.
- 이중 지불 같은 원장 조작을 막기 위해 합의 알고리즘을 쓴다는 설명은 옳다.
해당 레지스터는 메모리 버퍼 레지스터(MBR)이다.
MBR은 기억장치에 쓸 데이터나 기억장치에서 읽어 온 데이터를 일시적으로 보관하며, 주소는 MAR이 맡는다.
- 프로그램 카운터는 다음에 실행할 명령어의 주소를 보관한다.
- 명령어 레지스터는 현재 실행 중인 명령어를 보관한다.
- 메모리 주소 레지스터는 접근할 기억장치의 주소를 보관한다.
언어 번역 프로그램이 아닌 것은 워드프로세서로, 문서를 작성·편집하는 응용 소프트웨어이다.
언어 번역 프로그램은 사람이 작성한 프로그램을 기계가 실행할 수 있는 형태로 바꾸는 시스템 소프트웨어이다.
- 어셈블러는 어셈블리어를 기계어로 번역한다.
- 컴파일러는 고급 언어 프로그램 전체를 목적 코드로 번역한다.
- 인터프리터는 고급 언어 프로그램을 한 문장씩 해석해 실행한다.
옳지 않은 것은 모든 결정자가 슈퍼키이면 BCNF에 속한다는 설명이다. BCNF의 정의는 모든 결정자가 후보키인 릴레이션이다.
후보키는 유일성과 최소성을 모두 갖춘 키이고, 슈퍼키는 유일성만 갖춘 키이다. 이 진술은 정의의 후보키 자리를 슈퍼키로 바꿔 쓴 것이므로 BCNF의 정의로 옳지 않다.
- 정규화에서 고려하는 속성 간 관련성을 함수적 종속성이라고 한다는 설명은 옳다.
- 정규화가 이상 현상이 있는 릴레이션을 분해해 이상 현상을 없애는 과정이라는 설명은 옳다.
- 모든 속성의 도메인이 원자 값만으로 이루어지면 제1 정규형이라는 설명은 옳다.
- ㄱ. 전역 변수는 스택(stack) 영역에 할당된다.
- ㄴ. 프로그램 코드는 텍스트(text) 영역에 적재된다.
- ㄷ. 힙(heap) 영역은 프로세스 실행 중 동적으로 할당된 메모리이다.
- ㄹ. 함수의 매개변수, 복귀 주소 및 지역변수는 데이터(data) 영역에 할당된다.
옳은 것은 프로그램 코드는 텍스트 영역에 적재되고, 힙은 실행 중 동적으로 할당되는 메모리라는 두 설명이다.
프로세스 메모리는 텍스트(코드), 데이터(전역·정적 변수), 힙(동적 할당), 스택(매개변수·복귀 주소·지역 변수) 영역으로 나뉜다.
- 전역 변수가 스택 영역에 할당된다는 설명 — 전역 변수는 데이터 영역에 할당된다.
- 매개변수·복귀 주소·지역변수가 데이터 영역에 할당된다는 설명 — 이들은 함수 호출마다 만들어지는 스택 프레임, 즉 스택 영역에 할당된다.
- ㄱ. 연결 지향 프로토콜이다.
- ㄴ. 헤더에 근원지(source)와 목적지(destination) 포트 번호가 존재한다.
- ㄷ. 네트워크에서 손실된 패킷에 대한 재전송 기능이 있다.
- ㄹ. 체크섬(checksum)이 헤더에 존재한다.
- ㅁ. 헤더 크기가 동일하다.
TCP와 UDP에 공통인 것은 헤더에 근원지·목적지 포트 번호와 체크섬이 있다는 점이다.
두 프로토콜 모두 전송 계층에서 포트 번호로 응용 프로세스를 구분하고, 헤더에 오류 검출용 체크섬 필드를 둔다.
- 연결 지향 프로토콜이라는 설명 — TCP에만 해당하며 UDP는 비연결형이다.
- 손실 패킷 재전송 기능 — TCP만 확인응답과 재전송으로 신뢰성을 보장한다.
- 헤더 크기가 동일하다는 설명 — UDP 헤더는 8바이트 고정이고 TCP 헤더는 옵션 없이도 20바이트로 서로 다르다.
- 평균 기억장치 접근 시간 = 2.5ms
- 주기억 장치 접근 시간 = 11.5ms
- 캐시 기억장치 접근 시간 = 1.5ms
캐시 적중률을 h라 하면 h = 0.9이다.
평균 접근 시간은 적중 시 캐시 접근 시간, 실패 시 주기억장치 접근 시간의 가중 평균이다.
이므로 , 즉 접근의 90%가 캐시에서 처리된다.

(가) listen( ), (나) accept( ), (다) 데이터 송수신으로 연결해야 한다.
TCP 서버는 socket( )과 bind( ) 후 listen( )으로 연결 요청 대기 상태가 되고, 클라이언트의 connect( ) 요청을 accept( )로 수락해 통신용 소켓을 얻는다. 이후 양쪽 read( )/write( ) 사이에 오가는 것은 데이터이며, 연결 종료는 close( ) 사이에 따로 표시되어 있다.
- request( ), accept( ), 연결 종료 요청 연결 — 서버가 연결 대기에 쓰는 request( ) 함수는 없고, read( )/write( ) 사이는 연결 종료가 아닌 데이터 송수신이다.
- accept( ), connect( ), 연결 종료 요청 연결 — connect( )는 클라이언트가 호출하는 함수이고 accept( ) 앞에는 listen( )이 와야 한다.
- request( ), connect( ), 데이터 송수신 연결 — (다)는 맞지만 (가)·(나)에 서버가 호출하지 않는 함수가 들어갔다.
옳지 않은 것은 지명 파이프가 부모-자식 관계를 반드시 필요로 한다는 설명이다.
지명 파이프(FIFO)는 파일 시스템에 이름을 가진 특수 파일로 존재하므로 관련 없는 프로세스끼리도 그 이름으로 통신할 수 있고, 부모-자식 관계가 필요한 것은 익명(일반) 파이프이다.
- 파이프가 두 프로세스 사이의 전달자로 동작한다는 설명은 옳다.
- 신호가 사건의 근원지나 이유에 따라 비동기식으로도 전달될 수 있다는 설명은 옳다.
- 공유 메모리 방식에서 동시 쓰기를 피할 책임이 프로세스들에 있다는 설명은 옳다.
옳지 않은 것은 제어 해저드가 장치 하나를 동시에 쓰려 할 때 발생한다는 설명이다. 그것은 구조적 해저드의 정의이다.
제어 해저드는 분기·점프 명령의 결과가 정해지기 전에 다음 명령어를 가져와야 해서 생기는 해저드이다.
- 데이터 해저드가 앞 명령의 결과를 다음 명령이 입력으로 쓸 때 발생한다는 설명은 옳다.
- 이론상 단계 수만큼 빨라지지만 해저드가 이를 방해한다는 설명은 옳다.
- 명령어 처리를 여러 단계로 나누어 독립 장치에서 중첩 실행한다는 설명은 옳다.
옳은 것은 하나의 노드에서 모든 노드로 접근이 가능하다는 설명이다.
원형 연결 리스트는 마지막 노드의 링크가 첫 노드를 가리키므로, 어느 노드에서 출발해도 링크를 따라 모든 노드를 거쳐 자기 자신으로 돌아온다.
- 링크를 따라가면 자기 자신으로 되돌아올 수 없다는 설명은 원형 구조와 반대이다.
- 마지막 노드의 링크가 NULL인 것은 단순 연결 리스트이며, 원형에서는 첫 노드를 가리킨다.
- 마지막 노드를 가리키는 포인터를 두면 끝에 삽입하는 연산이 오히려 효율적이므로 비효율적이라는 설명은 틀리다.
a = [1, 3, 5, 7]
b = {1, 3, 5, 7}
c = (1, 3, 5, 7)
a.append(3)
b.add(3)
print(len(a) + len(b) + len(c))출력 결과는 13이다.
리스트 a는 append(3)으로 3이 하나 더 추가되어 [1, 3, 5, 7, 3]이 되므로 길이 5이고, 집합 b는 중복을 허용하지 않아 add(3)이 무시되어 길이 4이며, 튜플 c는 길이 4이다.
5 + 4 + 4 = 13
외부 인터럽트 요인이 아닌 것은 오버플로로, 명령어 실행 중 CPU 내부에서 발생하는 내부 인터럽트(트랩)이다.
외부 인터럽트는 CPU 외부의 하드웨어 사건으로 발생하고, 내부 인터럽트는 오버플로·0으로 나누기·잘못된 명령어처럼 프로그램 실행 오류로 발생한다.
- 입·출력 장치의 완료·요청 신호는 외부 인터럽트 요인이다.
- 정전 같은 전원 이상은 외부 인터럽트 요인이다.
- 기계 오작동(하드웨어 고장)은 외부 인터럽트 요인이다.
옳지 않은 것은 데이터 버스가 단방향성을 가진다는 설명이다. 데이터 버스는 읽기·쓰기 데이터가 오가는 양방향 버스이다.
CPU가 위치를 지정하기만 하는 주소 버스가 단방향인 것과 달리, 데이터는 CPU와 기억장치·입출력장치 사이를 양쪽으로 이동한다.
- 시스템 버스가 제어·데이터·주소 버스로 이루어진다는 설명은 옳다.
- 제어 버스가 제어 신호를 전달한다는 설명은 옳다.
- 버스 폭이 한 번의 전송량을 결정해 성능에 영향을 준다는 설명은 옳다.
옳지 않은 것은 빠르게 증가하는 대용량 데이터 처리에 적합하지 않다는 설명이다. NoSQL은 오히려 대용량 데이터의 수평적 확장에 강하다.
NoSQL은 고정 스키마와 엄격한 트랜잭션 대신 분산·확장성을 우선해 빅데이터 환경에 널리 쓰인다.
- 동적 스키마를 지원한다는 설명은 옳다.
- 다양한 형태의 비정형 데이터를 다룬다는 설명은 옳다.
- 관계형 데이터베이스보다 ACID 특성을 덜 중시한다(BASE 지향)는 설명은 옳다.
옳지 않은 것은 힙의 삽입 시간 복잡도가 O(1)이라는 설명이다. 힙 삽입은 이다.
새 원소를 마지막 위치에 넣은 뒤 부모와 비교·교환하며 올라가므로, 최대 트리 높이 만큼 이동한다.
- 힙이 우선순위 큐를 구현하는 대표 자료구조라는 설명은 옳다.
- 힙이 완전 이진 트리를 사용한다는 설명은 옳다.
- 최대 힙에서 부모 키가 자식 키보다 크거나 같다는 설명은 옳다.
옳지 않은 것은 시스템 호출이 커널을 거치지 않고 하드웨어에 직접 접근하게 하는 함수 집합이라는 설명이다.
시스템 호출은 사용자나 응용 프로그램이 커널의 서비스를 요청하는 인터페이스로, 하드웨어 접근은 커널을 통해서만 이루어진다.
- 커널이 운영체제의 핵심 기능을 모아 놓은 것이라는 설명은 옳다.
- 하드웨어와의 인터페이스를 디바이스 드라이버라고 한다는 설명은 옳다.
- 사용자 인터페이스가 커널에 명령을 전달하고 결과를 돌려준다는 설명은 옳다.
| 애플리케이션 \ 프로토콜 | 애플리케이션 계층 프로토콜 | 하위 전송 계층 프로토콜 |
|---|---|---|
| 전자메일 | (가) | (나) |
| 원격접속 | (다) | (라) |
| (가) | (나) | (다) | (라) | |
|---|---|---|---|---|
| ① | SMTP | TCP | Telnet | TCP |
| ② | SNMP | UDP | DNS | UDP |
| ③ | SNMP | TCP | Telnet | UDP |
| ④ | SMTP | UDP | DNS | TCP |
(가) SMTP, (나) TCP, (다) Telnet, (라) TCP로 연결해야 한다.
전자메일 전송은 SMTP, 원격접속은 Telnet이 담당하며, 둘 다 신뢰성 있는 연결이 필요해 TCP 위에서 동작한다.
- SNMP, UDP, DNS, UDP 연결 — SNMP는 네트워크 관리, DNS는 도메인 이름 해석 프로토콜로 전자메일·원격접속 프로토콜이 아니다.
- SNMP, TCP, Telnet, UDP 연결 — SNMP는 전자메일 프로토콜이 아니고 Telnet은 UDP가 아닌 TCP를 쓴다.
- SMTP, UDP, DNS, TCP 연결 — SMTP는 UDP가 아닌 TCP를 쓰고 DNS는 원격접속 프로토콜이 아니다.