TCP와 UDP가 모두 신뢰성을 보장한다는 설명이 옳지 않다.
둘 다 전송 계층 프로토콜이지만, 연결 지향형인 TCP만 확인응답·재전송·순서 제어로 신뢰성을 보장하고, UDP는 비연결형으로 신뢰성을 보장하지 않는다.
- IP는 호스트 주소 지정과 경로 설정(라우팅)을 담당하는 네트워크 계층 프로토콜이다.
- SMTP는 전자메일 전송을 위한 응용 계층 프로토콜이다.
- IPv6는 IPv4 주소 고갈 문제 해결을 주요 목적으로 128비트 주소 체계로 제안되었다.
BIOS가 하드디스크에 저장된다는 설명이 옳지 않다.
BIOS는 전원을 켜면 가장 먼저 실행되어 하드웨어를 점검하고 부팅을 시작하는 펌웨어로, 메인보드의 ROM(플래시 메모리)에 저장된다.
- 하드디스크는 원하는 위치로 헤드를 옮겨 접근하는 직접접근 방식의 보조기억장치이다.
- 하드디스크는 기계적 동작이 있어 주기억장치보다 접근 속도가 느리다.
- 하드디스크는 비휘발성이므로 전원이 꺼져도 데이터가 유지된다.
VPN이 전용회선 기반 사설망보다 구축·유지 비용이 높다는 설명이 옳지 않다.
VPN은 인터넷 같은 공중망 위에 가상의 사설망을 만드는 기술이므로, 전용회선을 임대하는 방식보다 비용이 낮다.
- VPN은 터널링 기술로 공중망 위에 논리적인 전용 통로를 만든다.
- VPN은 암호화 기술로 전송 데이터의 기밀성을 보장한다.
- VPN 기능은 방화벽이나 라우터 같은 네트워크 장비에 내장될 수 있다.
- ㄱ. 시스템 구조, 프로그램, 인터페이스를 설계한다.
- ㄴ. 소프트웨어를 이용하면서 문제점을 수정하거나 새로운 기능을 추가한다.
- ㄷ. 요구대로 소프트웨어가 적합하게 작동하는지 확인한다.
- ㄹ. 사용자의 요구사항을 파악한다.
폭포수 모델의 순서는 ㄹ → ㄱ → ㄷ → ㄴ(요구분석 → 설계 → 테스트 → 유지보수)이다.
폭포수 모델은 한 단계를 마친 뒤 다음 단계로 넘어가는 순차형 모델로, 사용자 요구사항 파악(ㄹ)이 가장 먼저이고 이를 바탕으로 시스템 구조·인터페이스를 설계(ㄱ)한다. 구현 후에는 요구대로 작동하는지 확인하는 테스트(ㄷ)를 거쳐, 운용 중 문제 수정·기능 추가를 하는 유지보수(ㄴ)로 끝난다.
- ㄱ → ㄴ → ㄷ → ㄹ은 요구사항 파악을 맨 마지막에 두어 순서가 거꾸로다.
- ㄱ → ㄹ → ㄴ → ㄷ은 설계가 요구분석보다 앞서고, 유지보수가 테스트보다 앞선다.
- ㄹ → ㄷ → ㄴ → ㄱ은 설계를 테스트·유지보수 뒤에 둔다.
인터럽트 방식이 폴링 방식보다 프로세서 시간을 낭비한다는 설명이 옳지 않다.
프로세서 시간을 낭비하는 쪽은 폴링이다. 폴링은 장치 상태를 반복 검사하느라 대기하지만, 인터럽트는 장치가 준비되었을 때만 신호를 보내므로 그동안 프로세서가 다른 일을 할 수 있다.
- 폴링 방식에서는 프로세서가 입출력장치의 상태를 반복적으로 검사한다.
- 인터럽트 방식에서는 여러 인터럽트 사이에 우선순위를 둘 수 있다.
- 인터럽트가 발생하면 해당 인터럽트 처리 루틴(ISR)을 호출해 처리한다.
#define ARRAY_SIZE 10
#define IsFull() ((top == ARRAY_SIZE-1) ? 1: 0)
#define IsEmpty() ((top == -1) ? 1: 0)
int a[ARRAY_SIZE];
int top = -1;
void push(int d) {
if( IsFull() )
printf("STACK FULL\n");
else
( ㉠ )
}
int pop() {
if( IsEmpty() )
printf("STACK EMPTY\n");
else
( ㉡ )
}
㉠에는 a[++top] = d;, ㉡에는 return a[top--];가 들어간다.
top의 초깃값이 -1이므로 push는 top을 먼저 1 증가시킨 뒤 그 위치에 저장해야 하고(전위 증가), pop은 현재 top 위치의 값을 반환한 뒤 top을 1 감소시켜야 한다(후위 감소). 즉 top은 항상 마지막으로 저장된 원소를 가리킨다.
- return a[--top];는 top을 먼저 줄여 마지막 원소 바로 아래 값을 반환하므로 꺼내는 원소가 어긋난다.
- a[--top] = d;는 첫 push에서 a[-2]에 접근해 배열 범위를 벗어난다.
- a[top--] = d;는 첫 push에서 a[-1]에 저장하고 top을 오히려 감소시킨다.




리틀 엔디안에서는 최하위 바이트 67(16)이 가장 낮은 주소 200(16)에 저장되어, 200(16)부터 203(16)까지 67, F5, 2A, 30(16) 순으로 놓인다.
302AF567(16)을 바이트로 나누면 상위부터 30, 2A, F5, 67이다. 리틀 엔디안은 하위 바이트부터 낮은 주소에 차례로 저장하며, 반대로 상위 바이트를 낮은 주소에 두는 방식이 빅 엔디안이다.
- 30, 2A, F5, 67 순 배치는 상위 바이트부터 저장한 빅 엔디안이다.
- F5, 67, 30, 2A 순 배치는 바이트 순서가 뒤섞인 것으로 어느 방식에도 해당하지 않는다.
- 2A, 30, 67, F5 순 배치도 바이트 순서가 뒤섞여 어느 방식에도 해당하지 않는다.
대량 데이터 고속 전송 시 인터럽트 방식이 DMA보다 효율적이라는 설명이 옳지 않다.
인터럽트 방식은 데이터 전송마다 프로세서가 개입해야 하므로 대량 전송에 비효율적이다. DMA는 프로세서 개입 없이 블록 단위로 전송하고 완료 시에만 인터럽트를 걸어 대량 고속 전송에 더 효율적이다.
- DMA는 프로세서 개입을 최소화하면서 주기억장치와 입출력장치 사이에 데이터를 전송한다.
- DMA 전송 중에는 DMA 제어기가 버스 사용권을 얻어 버스 마스터로 동작한다.
- 한 시스템에 여러 개의 DMA 제어기(또는 채널)가 존재할 수 있다.
조달 관리를 완성된 소프트웨어를 고객에게 전달하는 활동으로 설명한 것이 옳지 않다.
PMBOK의 조달 관리는 프로젝트 수행에 필요한 제품·서비스를 외부에서 구매·획득하는 활동(계약 계획·체결·관리·종료)을 다룬다.
- 일정 관리는 주어진 기간 내에 프로젝트를 완료하기 위한 활동을 다룬다.
- 비용 관리는 승인된 예산 내에서 프로젝트를 완료하기 위한 활동을 다룬다.
- 품질 관리는 품질 요구를 만족해 수행 목표를 달성하기 위한 활동을 다룬다.
인터프리터 기법이 번역된 프로그램을 저장할 큰 기억 장소를 요구한다는 설명이 옳지 않다.
인터프리터는 명령을 하나씩 해석해 바로 실행하므로 번역된 목적 프로그램을 따로 만들지 않는다. 번역 결과 전체를 저장하는 쪽은 컴파일러 기법이다.
- 하이브리드 기법은 원시 프로그램을 중간 언어로 번역한 뒤 인터프리터가 이를 해석·실행한다.
- 인터프리터 기법은 고급 언어 프로그램을 명령 단위로 하나씩 해석해 바로 실행한다.
- 반복문이 많으면 인터프리터는 같은 문장을 매번 다시 해석하므로, 한 번 번역해 두는 컴파일러 기법이 더 효율적이다.
상속을 여러 클래스를 조합해 새 클래스를 만드는 기법으로 설명한 것이 옳지 않다.
상속은 기존(상위) 클래스의 속성과 메서드를 물려받아 새로운(하위) 클래스를 정의하는 기법이다. 여러 객체를 조합해 새 클래스를 구성하는 것은 합성(composition)에 해당한다.
- 객체지향에서는 같은 메시지에 객체별로 다르게 반응하는 다형성을 이용할 수 있다.
- 추상 클래스는 미완성 메서드를 가질 수 있어 객체를 직접 생성할 수 없다.
- 객체 간에는 메시지 전달(메서드 호출)을 통해 명령을 주고받는다.
(단위 : 시간)
| 가동시간 | 고장시간 | 가동시간 | 고장시간 | 가동시간 | 고장시간 |
|---|---|---|---|---|---|
| 8 | 1 | 7 | 2 | 9 | 3 |
시스템의 가용성은 80%이다.
가용성 = 총 가동시간 ÷ (총 가동시간 + 총 고장시간)
가동시간 합 = 8 + 7 + 9 = 24시간, 고장시간 합 = 1 + 2 + 3 = 6시간
가용성 = 24 ÷ (24 + 6) = 0.8 → 80%
평균으로 보아도 MTBF = 24 ÷ 3 = 8시간, MTTR = 6 ÷ 3 = 2시간이므로 MTBF ÷ (MTBF + MTTR) = 8 ÷ 10으로 같은 값이 나온다.
- 400%는 가동시간 합을 고장시간 합으로 나눈 값(24 ÷ 6)으로 가용성의 정의가 아니다.
- 25%는 고장시간 합을 가동시간 합으로 나눈 값(6 ÷ 24)이다.
- 75%는 정의대로 계산하면 나오지 않는 값으로, 가용성은 전체 30시간 중 가동시간 24시간의 비율이다.
- 자동차를 기반으로 각종 정보를 주고받을 수 있는 자동차용 원격정보 서비스 기술
- 교통정보, 차량안전 및 보안, 차량진단, 생활정보 등의 서비스를 제공
설명하는 기술은 텔레매틱스(Telematics)다.
텔레매틱스는 통신(Telecommunication)과 정보과학(Informatics)의 합성어로, 자동차에 무선 통신을 결합해 교통정보·차량 안전 및 보안·차량진단·생활정보 등을 제공하는 차량용 원격정보 서비스다.
- USN은 곳곳에 설치한 센서 노드가 주변 정보를 감지해 네트워크로 전달하는 센서망으로, 자동차 전용 서비스가 아니다.
- 증강현실은 실제 환경 위에 가상의 정보·그래픽을 겹쳐 보여 주는 기술이다.
- 와이브로는 이동 중에도 무선 인터넷을 쓸 수 있게 한 휴대 인터넷 통신 기술이다.
| 가용 공간 리스트 | |
|---|---|
| 시작주소 | 크기 |
| w | 30 KB |
| x | 20 KB |
| y | 15 KB |
| z | 35 KB |
최악적합으로 할당되는 시작주소 순서는 z → w → x → y이다.
최악적합은 요청마다 남은 가용 공간 중 가장 큰 곳에 할당한다.
25KB: 가장 큰 z(35KB)에 할당, z는 10KB 남음
30KB: 가장 큰 w(30KB)에 할당, w는 0KB
15KB: 가장 큰 x(20KB)에 할당, x는 5KB 남음
10KB: 가장 큰 y(15KB)에 할당
- w → x → y → z는 가용 공간을 주소 순으로 나열한 것일 뿐 크기를 고려하지 않았다.
- x → y → z → w는 첫 요청 25KB를 20KB인 x에 둘 수 없으므로 성립하지 않는다.
- y → z → w → x도 첫 요청 25KB를 15KB인 y에 둘 수 없다.
워드 크기가 8비트인 시스템에서만 사용된다는 설명이 옳지 않다.
32K×8비트는 주소 32K개마다 8비트를 저장한다는 뜻일 뿐이다. 이런 칩을 여러 개 병렬로 연결하면 16비트·32비트 등 더 큰 워드 크기의 시스템에도 사용할 수 있다.
- 칩 4개를 디코더로 선택하면 주소 공간이 4배로 늘어 128K×8비트 모듈을 구성할 수 있다.
- 한 주소에 8비트를 입출력하므로 데이터 핀은 8개이다.
- 32K는 이므로 32,768개의 주소 공간을 갖는다.
3V를 규모·속도·가상화로 설명한 것이 옳지 않다.
빅데이터의 3V는 규모(Volume), 속도(Velocity), 다양성(Variety)이다. 가상화(Virtualization)는 클라우드 컴퓨팅 관련 기술이다.
- 빅데이터는 정형 데이터뿐 아니라 그림·영상 같은 비정형 데이터도 포함한다.
- 자연어 처리는 텍스트 마이닝·감성 분석 등에 쓰이는 빅데이터 분석기술이다.
- 시각화는 분석 결과를 그래프·도표 등으로 쉽게 이해하도록 표현하는 기술이다.
class Foo {
public int a = 3;
public void addValue(int i) {
a = a + i;
System.out.println("Foo : "+ a + " " );
}
public void addFive() {
a += 5;
System.out.println("Foo : "+ a + " " );
}
}
class Bar extends Foo {
public int a = 8;
public void addValue(double i) {
a = a + (int)i;
System.out.println("Bar : "+ a + " " );
}
public void addFive() {
a += 5;
System.out.println("Bar : "+ a + " " );
}
}
public class Test {
public static void main(String [] args) {
Foo f = new Bar();
f.addValue(1);
f.addFive();
}
}Foo : 9
Foo : 8
Bar : 13
Bar : 14
출력은 Foo : 4와 Bar : 13이다.
Bar의 addValue(double)는 Foo의 addValue(int)와 매개변수 형이 달라 재정의가 아닌 오버로딩이다. 참조형이 Foo인 f.addValue(1)은 Foo의 addValue(int)를 호출해 Foo의 필드 a를 3 + 1 = 4로 만든다.
addFive()는 Bar가 재정의했으므로 실제 객체(Bar)의 메서드가 동적 바인딩으로 실행되고, Bar의 필드 a를 8 + 5 = 13으로 만든다.
- Foo : 4, Foo : 9는 addFive()가 재정의된 Bar의 메서드로 실행된다는 점을 놓쳤다.
- Bar : 9, Foo : 8은 addValue(1)이 Bar의 addValue(double)를 호출한다고 본 오류다.
- Bar : 9, Bar : 14도 addValue(1)을 Bar의 메서드로 잘못 연결한 결과다.
간략화한 결과는 AB + A'C이다.
흡수법칙으로 ABD'는 AB에, A'CD'는 A'C에 흡수되어 AB + A'C + BCD'가 남는다. BCD'는 BC에 포함되고, BC는 AB와 A'C의 합의항(consensus)이어서 AB + A'C + BC = AB + A'C이므로 BCD'도 사라진다.
- A'C + BC는 A=1, B=1, C=0일 때 원식은 1(AB 항)인데 0이 되어 같지 않다.
- AB + BC는 A=0, B=0, C=1일 때 원식은 1(A'C 항)인데 0이 된다.
- A'CD' + BCD'는 D=1이면 항상 0이 되어 AB·A'C 항을 표현하지 못한다.
| A | B | C | D |
|---|---|---|---|
| a1 | b1 | c1 | d1 |
| a1 | b2 | c2 | ㉠ |
| ㉡ | b1 | c1 | d3 |
| a4 | b1 | c4 | d4 |
㉠에는 d1, ㉡에는 a2 또는 a3이 들어갈 수 있다.
A→D이므로 A 값이 같은 튜플은 D 값도 같아야 한다. 둘째 튜플의 A는 a1이고 첫째 튜플이 (a1, d1)이므로 ㉠은 d1이어야 한다.
셋째 튜플은 D가 d3이므로 A가 a1(D=d1)이나 a4(D=d4)이면 A→D를 위반한다. 또 a4라면 (a4, b1)이 C 값 c1과 c4를 함께 가져 AB→C도 위반하므로 ㉡은 a2 또는 a3만 가능하다.
- d1, a1은 ㉡이 a1이면 a1이 d1과 d3을 동시에 결정해 A→D를 위반한다.
- d5, a2 또는 a4는 ㉠이 d5이면 a1이 d1과 d5를 결정해 A→D를 위반한다.
- d4, a4는 ㉠이 d1이 아니어서 A→D를 위반하고, ㉡이 a4이면 AB→C도 위반한다.
호스트 식별자는 6비트이다.
서브넷 마스크에서 1인 비트는 네트워크(서브넷) 부분, 0인 비트는 호스트 부분이다.
마지막 옥텟 192를 2진수로 바꾸면 이다.
앞의 세 옥텟 255는 모두 1이므로, 0인 비트는 마지막 옥텟의 하위 6개뿐이다.
따라서 호스트 비트 수는 이다.