PCM 과정에 포함되지 않는 것은 분절화(Segmentation)이다.
PCM은 표본화 → 양자화 → 부호화 순서로 아날로그 신호를 디지털 신호로 바꾼다. 분절화는 데이터를 작은 단위로 나누는 전송 계층 등의 개념으로 PCM 단계가 아니다.
- 표본화: 연속 신호에서 일정 간격으로 값을 추출하는 첫 단계이다.
- 양자화: 추출한 표본값을 유한한 이산 레벨로 근사하는 단계이다.
- 부호화: 양자화된 레벨을 2진 부호로 바꾸는 단계이다.
옳지 않은 것은 데이터의 중복을 허용하여 일관성을 유지한다는 설명이다.
DBMS는 데이터를 통합 관리해 중복을 최소화함으로써 일관성을 유지한다. 중복을 허용하면 오히려 갱신 이상과 불일치가 생긴다.
- 데이터 독립성 향상: 프로그램과 데이터를 분리하는 DBMS의 대표적 이점이다.
- 공유와 동시 접근: 동시성 제어를 통해 여러 사용자가 함께 사용할 수 있다.
- 무결성과 보안성 유지: 제약조건과 접근 권한 관리로 보장한다.
옳지 않은 것은 MAR을 가장 최근에 인출한 명령어를 보관하는 레지스터로 설명한 것이다.
MAR은 접근할 기억장치 주소를 보관하는 레지스터이고, 최근 인출한 명령어를 보관하는 것은 명령어 레지스터(IR)이다.
- AC: 연산 과정의 데이터를 일시 저장하는 누산기이다.
- PC: 다음에 인출할 명령어의 주소를 보관한다.
- MBR: 기억장치에 쓸 데이터나 읽어 온 데이터를 일시 저장하는 버퍼이다.
원형 모델의 올바른 순서는 요구 사항 분석 → 시제품 설계 → 시제품 개발 → 고객의 시제품 평가 → 시제품 정제 → 완제품 생산이다.
시제품은 먼저 설계한 뒤 개발해야 하고, 개발된 시제품이 있어야 고객이 평가할 수 있으며, 평가 결과를 반영해 정제한다.
- 시제품 개발 전에 고객 평가를 두는 순서: 평가할 시제품이 아직 없으므로 틀리다.
- 요구 사항 분석 직후 고객 평가를 두는 순서: 설계·개발 없이 평가할 수 없다.
- 시제품 개발 후에 설계를 두는 순서: 설계가 개발보다 앞서야 한다.
옳지 않은 설명은 트리형 토폴로지는 허브에 문제가 생겨도 전체 네트워크에 영향이 없다는 것이다.
트리형은 허브(노드)가 계층적으로 연결된 구조라서 상위 허브에 장애가 나면 그 아래에 연결된 하위 노드 전체가 통신할 수 없게 된다. 특히 최상위(루트) 허브가 고장 나면 네트워크 전체가 영향을 받으므로 영향이 없다는 서술은 명백히 틀렸다.
- 버스형은 하나의 공유 회선에 노드를 연결하므로 설치가 간단하고 케이블 비용이 적게 든다(옳음).
- 링형은 각 노드가 인접한 두 노드와만 연결되어 있어, 노드를 끼우거나 뺄 때 인접한 링크만 바꾸면 된다는 점에서 재구성이 용이하다고 본다. 교재에 따라 링 전체를 끊어야 해서 어렵다고 설명하기도 하지만, 트리형 서술처럼 구조적으로 명백히 틀린 내용은 아니다.
- 성형은 모든 노드가 중앙 노드에 집중되어 있어 장애 지점 파악과 유지보수가 쉽다(옳음).
옳지 않은 것은 RAID 5가 이중 분산 패리티를 저장한다는 설명이다.
RAID 5는 패리티를 블록 단위로 모든 디스크에 분산하되 패리티는 하나이며, 이중 분산 패리티를 쓰는 것은 RAID 6이다.
- RAID 1: 패리티 없이 데이터를 두 개 이상의 디스크에 미러링한다.
- RAID 2: 비트 단위로 분산하고 해밍 코드 검사 디스크를 여러 개 사용한다.
- RAID 4: 블록 단위로 분산하고 하나의 전용 패리티 디스크를 사용한다.
옳지 않은 것은 한 스레드에 문제가 생겨도 전체 프로세스에 영향을 미치지 않는다는 설명이다.
스레드들은 같은 프로세스의 메모리와 자원을 공유하므로, 한 스레드의 오류(예: 잘못된 메모리 접근)가 프로세스 전체를 종료시킬 수 있다.
- 응답성 증가: 일부 스레드가 대기해도 다른 스레드가 사용자 요청을 처리할 수 있다.
- 자원 공유: 스레드는 소속 프로세스의 자원과 메모리를 공유한다.
- 오버헤드 감소: 스레드 생성·문맥 교환은 프로세스보다 가볍다.
옳지 않은 것은 네트워크 계층을 종단 간 연결 설정·유지, 오류 복구, 흐름 제어 계층으로 설명한 것이다.
송신 측과 수신 측 사이의 연결 관리와 오류 복구·흐름 제어는 전송 계층의 역할이고, 네트워크 계층은 주소 지정과 경로 설정(라우팅)을 담당한다.
- 데이터링크 계층: 데이터를 프레임 단위로 구성해 물리 계층으로 전달한다.
- 세션 계층: 두 종단 프로세스 간의 세션을 설정·유지·종료한다.
- 표현 계층: 데이터 표현 방식 변환, 암호화, 압축을 담당한다.
옳지 않은 것은 LFU가 가장 많이 참조된 블록을 교체한다는 설명이다.
LFU(Least Frequently Used)는 참조 횟수를 기록해 가장 적게 참조된 블록을 교체한다.
- LRU: 가장 오랫동안 사용되지 않은 블록을 교체한다.
- FIFO: 캐시에 적재된 지 가장 오래된 블록을 교체한다.
- Random: 사용 이력과 무관하게 임의로 교체한다.
8진수 123.321을 16진수로 바꾸면 53.688이다.
8진수 각 자리를 3비트 2진수로 풀면 1→001, 2→010, 3→011이므로 정수부는 001010011, 소수부 3·2·1은 011010001이 된다.
정수부를 오른쪽부터 4비트씩 묶으면 0101 0011 → 53이다.
소수부를 왼쪽부터 4비트씩 묶고 부족한 자리를 0으로 채우면 0110 1000 1000 → 688이다.
따라서 결과는 53.688이며, 소수부를 8진 숫자 그대로 옮기거나 4비트 묶음을 잘못 끊은 값들은 틀리다.
옳은 것은 공개키 암호화는 비공개키 암호화보다 알고리즘이 복잡해 처리속도가 느리다는 설명이다.
공개키(비대칭) 방식은 큰 수의 연산에 기반해 계산량이 많으므로 대칭키 방식보다 느리다.
- 암호화·복호화에 동일한 키를 쓰는 것은 공개키가 아니라 대칭키 방식이다.
- DES는 대표적인 대칭키(비밀키) 알고리즘이다.
- 비밀키 암호화는 같은 키를 쓰는 대칭 암호화이지 비대칭 암호화가 아니다.
설명하는 작업은 문맥교환(Context Switching)이다.
문맥교환은 실행 중인 프로세스의 상태(PCB의 레지스터 값 등)를 저장하고 다음 프로세스의 저장된 상태를 복구해 CPU를 넘겨주는 작업이다.
- 세마포어: 공유 자원 접근을 제어하는 동기화 도구이다.
- 모니터: 공유 자원과 연산을 묶어 상호배제를 보장하는 동기화 구조이다.
- 상호배제: 임계 구역에 한 프로세스만 들어가도록 하는 원칙이다.
개발환경·SDK 등 플랫폼을 서비스로 제공하는 모델은 PaaS(Platform as a Service)이다.
클라우드 서비스 모델은 제공 범위에 따라 인프라(IaaS), 플랫폼(PaaS), 소프트웨어(SaaS)로 구분된다.
- DNS: 도메인 이름을 IP 주소로 변환하는 시스템으로 클라우드 서비스 모델이 아니다.
- SaaS: 완성된 응용 소프트웨어를 서비스로 제공한다.
- IaaS: 서버·스토리지·네트워크 등 인프라 자원을 제공한다.
#include <stdio.h>
int main(void)
{
int array[] = {100, 200, 300, 400, 500};
int *ptr;
ptr = array;
printf("%d\n", *(ptr+3) + 100);
}실행 결과는 500이다.
ptr은 배열 array의 시작 주소를 가리키므로 *(ptr+3)은 array[3], 즉 네 번째 원소 400이다.
여기에 100을 더하면 400 + 100 = 500이 출력된다.
- 200: 원소 값 100에 100을 더한 값으로, 첨자 0을 참조한 경우이다.
- 300: 첨자 1의 원소 200에 100을 더한 값으로, 포인터 오프셋을 잘못 센 결과이다.
- 400: 첨자 2의 원소 300에 100을 더한 값이거나, 100을 더하지 않은 array[3] 값이다.

아래 그림과 같이 두 개의 노드 first, second가 연결되었다고 가정하고, 위의 코드를 참조하여 노드 tmp를 노드 first와 노드 second 사이에 삽입하고자 할 때, 프로그램 코드로 옳은 것은?

first.link = &tmp;
first.link = &tmp;
first.link = second.link;
second.link = &tmp;
tmp를 first와 second 사이에 넣는 코드는 tmp.link = first.link; first.link = &tmp;이다.
먼저 tmp의 link가 first가 가리키던 second를 가리키게 하고(tmp.link = first.link), 그다음 first의 link가 tmp를 가리키게 해야 first → tmp → second 연결이 완성된다. 순서를 바꾸면 second의 주소를 잃는다.
- tmp.link에 first의 주소를 넣고 first.link를 tmp로 바꾸는 코드: first와 tmp가 서로를 가리키는 순환이 생기고 second가 끊긴다.
- tmp.link에 second의 주소를 넣고 first.link에 second.link를 넣는 코드: first.link가 NULL이 되어 tmp와 second 모두 끊긴다.
- tmp.link를 NULL로, second.link를 tmp로 바꾸는 코드: tmp가 second 뒤에 붙을 뿐 사이에 삽입되지 않는다.
#include <stdio.h>
int main()
{
int a, b;
a = b = 1;
if (a = 2)
b = a + 1;
else if (a == 1)
b = b + 1;
else
b = 10;
printf("%d, %d\n", a, b);
}출력 결과는 2, 3이다.
조건 if (a = 2)는 비교가 아니라 대입이므로 a에 2가 저장되고, 식의 값 2는 0이 아니어서 참이 된다.
따라서 b = a + 1 = 3이 실행되고 나머지 else 분기는 건너뛴다.
- 2, 2: 대입 후 첫 분기에서 b는 a + 1 = 3이 되므로 틀리다.
- 1, 2: a = 2를 비교(==)로 잘못 보고 둘째 분기를 실행했다고 가정한 값이다.
- 2, 10: 조건식이 거짓이라 else로 갔다고 본 값인데, 대입값 2는 참이다.

후위 순회에서 다섯 번째로 방문하는 노드는 F이다.
그림의 트리는 루트 A의 왼쪽에 B(왼쪽 자식 D, 오른쪽 자식 E, E의 왼쪽 자식 G), 오른쪽에 C(오른쪽 자식 F)가 있다. 후위 순회는 왼쪽 → 오른쪽 → 루트 순서이다.
방문 순서는 D → G → E → B → F → C → A이므로 다섯 번째는 F이다.
- A: 루트는 후위 순회에서 마지막(일곱 번째)에 방문한다.
- C: F 다음인 여섯 번째에 방문한다.
- D: 가장 먼저(첫 번째) 방문한다.
옳지 않은 것은 FCFS가 비선점 방식으로 대화식 시스템에 적합하다는 설명이다.
FCFS는 비선점 방식이 맞지만, 긴 작업이 CPU를 계속 점유하면 짧은 작업이 오래 기다려 응답시간이 길어지므로 대화식 시스템에는 부적합하다.
- SJF: 짧은 작업을 먼저 실행해 평균 대기시간이 FCFS보다 짧다.
- Round-Robin: 시간 할당량마다 순환하는 우선순위 없는 선점형 방식이다.
- 다단계 큐: 우선순위별로 여러 준비 큐를 두는 방식이다.
옳은 것은 UDP는 전송 계층에서 사용되는 비연결형 프로토콜이라는 설명이다.
TCP/IP 전송 계층에는 연결형 TCP와 비연결형 UDP가 있다.
- TCP/IP 스택에는 세션 계층이 따로 없으며, 네트워크 접근·인터넷·전송·응용 계층으로 구성된다.
- ICMP는 데이터링크 계층이 아니라 인터넷(네트워크) 계층 프로토콜이다.
- 경로를 설정하는 라우팅은 응용 계층이 아니라 인터넷(네트워크) 계층의 기능이다.
STUDENT
| 칼럼 이름 | 데이터 타입 | 키 타입 | 설명 |
|---|---|---|---|
| studno | 숫자 | 기본키 | 학번 |
| name | 문자열 | 이름 | |
| grade | 숫자 | 학년 | |
| height | 숫자 | 키 | |
| deptno | 숫자 | 학과 번호 |
PROFESSOR
| 칼럼 이름 | 데이터 타입 | 키 타입 | 설명 |
|---|---|---|---|
| profno | 숫자 | 기본키 | 번호 |
| name | 문자열 | 이름 | |
| position | 문자열 | 직급 | |
| salary | 숫자 | 급여 | |
| deptno | 숫자 | 학과 번호 |
FROM PROFESSOR
GROUP BY deptno;
FROM STUDENT
WHERE deptno = 101)
UNION
(SELECT profno, name
FROM PROFESSOR
WHERE deptno = 101);
FROM STUDENT
WHERE COUNT(*) > 2
GROUP BY grade;
FROM STUDENT
WHERE height > (SELECT height, grade
FROM STUDENT
WHERE name = '홍길동');
오류 없이 동작하는 문장은 STUDENT와 PROFESSOR의 학과 101 조회 결과를 UNION으로 합치는 문장이다.
두 SELECT가 모두 2개 열을 반환하고, studno와 profno는 숫자, name은 문자열로 대응 열의 개수와 데이터 타입이 호환되므로 합집합 연산이 가능하다.
- deptno로만 그룹화하면서 position을 함께 조회하는 문장: GROUP BY에 없는 비집계 열을 SELECT할 수 없다.
- WHERE 절에 COUNT(*) > 2를 쓴 문장: 집계 함수 조건은 WHERE가 아니라 HAVING에 써야 한다.
- height 비교에 height, grade 두 열을 반환하는 서브쿼리를 쓴 문장: 단일 열 비교에 두 열이 반환되어 오류가 난다.