클라우드에서 시스템(인프라)을 임차하면 IaaS, 소프트웨어를 서비스로 임차하면 SaaS라 한다.
IaaS는 서버·스토리지·네트워크 같은 가상화된 인프라를, SaaS는 완성된 응용 소프트웨어를 서비스 형태로 빌려 쓰는 모델이다.
- 민간 클라우드는 공공 영역에 쓸 수 없다는 설명: 민간 클라우드도 보안 인증 등을 거쳐 지방 정부 등 공공 서비스에 이용된다.
- 데이터 전송량에 따른 과금 차이가 없다는 설명: 클라우드는 저장량뿐 아니라 데이터 전송량(특히 외부로 나가는 트래픽)에 따라서도 과금한다.
- 물리적 시스템 단위로 임차한다는 설명: 일반적으로 가상 머신·스토리지 등 가상화된 자원 단위로 제공한다.
㉠ 레지스터(Register)
㉡ 디코더(Decoder)
㉢ 무어 머신(Moore Machine)
㉣ 동기식 카운터(Synchronous Counter)
플립플롭을 쓰는 회로는 레지스터·무어 머신·동기식 카운터이다.
플립플롭은 1비트를 기억하는 소자로, 이전 상태를 기억해야 하는 순서 논리 회로의 기본 구성 요소다.
- 레지스터: 여러 개의 플립플롭을 묶어 여러 비트의 데이터를 저장한다.
- 무어 머신: 출력이 현재 상태에만 의존하는 유한 상태 기계로, 상태를 플립플롭에 저장한다.
- 동기식 카운터: 모든 플립플롭이 공통 클록에 맞춰 동시에 상태를 바꾼다.
- 디코더: 입력 조합에 따라 출력이 바로 정해지는 조합 논리 회로라 플립플롭이 필요 없다.
현재 실행 중인 명령어의 내용을 저장하는 것은 프로그램 카운터가 아니라 명령어 레지스터(IR)이다.
프로그램 카운터는 다음에 인출할 명령어의 주소를 담는 레지스터다.
- 다음 명령어 주소 보관: 프로그램 카운터의 본래 역할이다.
- 인출 후 자동 증가: 명령어를 인출하면 다음 명령어를 가리키도록 값이 증가한다.
- 분기 시 목적지 주소로 변경: 점프·분기 명령어는 프로그램 카운터에 목적지 주소를 적재해 실행 흐름을 바꾼다.
㉠ SRAM(Static RAM)은 전원이 공급되는 동안에는 데이터가 유지되므로 리프레시(Refresh) 동작이 필요 없다.
㉡ DRAM(Dynamic RAM)은 커패시터(Capacitor)에 전하를 저장한다.
㉢ SRAM은 DRAM보다 집적도가 높고 구조가 단순하다.
㉣ SRAM은 일반적으로 DRAM보다 속도가 매우 빠르다.
옳은 것은 SRAM의 리프레시 불필요, DRAM의 커패시터 저장, SRAM의 빠른 속도이다.
SRAM은 플립플롭(여러 개의 트랜지스터)으로 1비트를 저장해 빠르지만 셀 구조가 복잡하고, DRAM은 트랜지스터 하나와 커패시터 하나로 셀이 단순해 집적도가 높다.
- SRAM은 리프레시가 필요 없다: 전원이 있는 동안 상태가 유지되므로 옳다.
- DRAM은 커패시터에 전하를 저장한다: 전하가 새어 나가 주기적 리프레시가 필요하며, 옳다.
- SRAM이 DRAM보다 빠르다: 그래서 캐시 메모리에 쓰이며, 옳다.
- SRAM이 집적도가 높고 구조가 단순하다: 반대로 DRAM이 집적도가 높고 단순하므로 틀리다.
블록이 들어갈 캐시 위치가 한 곳으로 정해진 것은 직접 사상(Direct Mapping)이고, 나머지는 모두 완전 연관 사상(Fully Associative Mapping)의 설명이다.
직접 사상은 위치가 고정돼 태그를 한 번만 비교하므로 빠르고 단순하지만, 같은 위치에 매핑되는 블록끼리 충돌 미스가 잦다.
- 모든 라인의 태그를 비교해야 한다: 블록이 어디에나 있을 수 있는 완전 연관 사상의 특징이다.
- 충돌 미스가 적어 히트율에 유리하다: 배치가 자유로운 완전 연관 사상의 장점이다.
- 어느 라인에나 자유롭게 배치한다: 완전 연관 사상의 정의 그 자체다.
㉠ SSD(Solid State Drive) 저장장치
㉡ USB 메모리 스틱(USB Flash Drive)
㉢ 스마트폰에 내장된 UFS/eMMC 등 내부 저장소
㉣ 마이크로프로세서 내부의 캐시 메모리
NAND 플래시가 쓰이는 장치는 SSD, USB 메모리, 스마트폰 내장 저장소(UFS/eMMC)이다.
NAND 플래시는 전원이 꺼져도 데이터가 남는 비휘발성 메모리로 대용량 저장장치에 쓰이고, 프로세서 내부 캐시는 고속의 SRAM으로 만든다.
- SSD: NAND 플래시 칩과 컨트롤러로 구성된 저장장치다.
- USB 메모리: NAND 플래시를 USB 인터페이스로 연결한 휴대용 저장장치다.
- UFS/eMMC: 스마트폰 기판에 내장된 NAND 플래시 기반 저장소다.
- 마이크로프로세서 내부 캐시: 쓰기가 느리고 수명이 제한된 플래시는 캐시에 맞지 않으며, 캐시는 SRAM으로 구성한다.
파이프라인은 명령어 한 개의 실행 시간(지연 시간)을 줄이지 않고, 단위 시간당 처리하는 명령어 수인 처리량을 높인다.
단계 사이에 파이프라인 레지스터가 들어가므로 명령어 하나가 모든 단계를 거치는 시간은 같거나 오히려 약간 늘어난다.
- 해저드로 인한 성능 저하: 구조·데이터·제어 해저드가 생기면 지연(스톨)이 발생해 성능이 떨어지므로 옳다.
- 겹쳐 실행해 처리량 향상: 파이프라인의 기본 원리로 옳다.
- 단계 세분화로 클록 주파수 상향: 단계당 처리 시간이 짧아지므로 더 높은 클록으로 동작할 수 있어 옳다.
타입 2 하이퍼바이저는 호스트 운영체제 위에서 동작하므로 호스트 OS의 취약점·장애에도 영향을 받아 일반적으로 타입 1보다 보안성과 안정성이 낮다.
타입 1은 하드웨어 위에서 직접 실행되고(예: VMware ESXi, Xen), 타입 2는 일반 OS 위에서 응용 프로그램처럼 실행된다(예: VirtualBox, VMware Workstation).
- 타입 1은 오버헤드가 적다: 호스트 OS 계층이 없어 성능이 효율적이므로 옳다.
- 타입 2는 관리 편의성이 좋다: 익숙한 호스트 OS의 기능과 도구를 그대로 쓸 수 있어 옳다.
- 타입 1은 기업 서버·데이터센터에 적합하다: 높은 성능과 신뢰성이 필요한 환경에 쓰이므로 옳다.
기아 현상이 생길 수 있는 조합은 SJF와 우선순위(Priority) 스케줄링이다.
두 기법은 실행 시간이 짧거나 우선순위가 높은 작업을 계속 먼저 고르므로, 긴 작업이나 우선순위가 낮은 작업이 무한히 밀릴 수 있다. 이는 에이징(Aging)으로 완화한다.
- FCFS와 Round Robin: 도착 순서대로 처리하거나 시간 할당량을 돌아가며 주므로 모든 프로세스가 결국 실행되어 기아가 없다.
- Round Robin과 다단계 큐: Round Robin에는 기아가 없으므로 기아 가능한 알고리즘으로만 묶인 조합이 아니다.
- FCFS와 SRT: SRT는 기아가 생길 수 있지만 FCFS는 기아가 없다.
㉠ 데이터베이스 관리자가 데이터를 독점적으로 소유하는 것을 의미한다.
㉡ 각 부서가 서로 다른 DBMS를 사용하여 독립적으로 운영하는 것을 의미한다.
㉢ 네트워크 연결 없이도 데이터를 조회할 수 있는 능력을 말한다.
㉣ 하위 단계(물리적 구조)의 변경이 상위 단계(응용 프로그램)에 영향을 주지 않는 것이다.
데이터 독립성을 바르게 설명한 것은 하위 단계 변경이 상위 단계에 영향을 주지 않는다는 내용뿐이므로, 나머지 세 설명이 옳지 않다.
데이터 독립성은 3단계 스키마 구조에서 논리적 독립성(개념 스키마 변경이 외부 스키마·응용에 영향 없음)과 물리적 독립성(내부 스키마 변경이 개념 스키마에 영향 없음)으로 나뉜다.
- DBA가 데이터를 독점 소유: 데이터 독립성과 무관하며, DBMS는 오히려 데이터 공유를 지향한다.
- 부서마다 다른 DBMS로 독립 운영: 독립성이 아니라 데이터 분산·중복에 가까운 내용이다.
- 네트워크 없이 데이터 조회: 오프라인 접근 능력일 뿐 데이터 독립성이 아니다.
비선점 조건의 설명이 틀렸다. 비선점은 다른 프로세스가 점유한 자원을 강제로 빼앗을 수 없는 것을 뜻한다.
요청 전에 점유 상황을 확인해 대기하지 않도록 한다는 내용은 교착 상태의 발생 조건이 아니라 예방·회피 쪽 발상이다.
- 상호 배제: 자원을 한 번에 한 프로세스만 쓸 수 있다는 정의로 옳다.
- 점유 및 대기: 자원을 쥔 채 다른 프로세스가 가진 자원을 기다리는 상태로 옳다.
- 순환 대기: 프로세스들이 원형으로 서로의 자원을 기다리는 상태로 옳다.
페이징은 내부 단편화는 생기지만 외부 단편화는 생기지 않는다. 설명이 반대로 되어 있다.
고정 크기 프레임 단위로 할당하므로 흩어진 빈 공간 때문에 못 쓰는 외부 단편화는 없고, 마지막 페이지가 프레임을 다 채우지 못해 남는 내부 단편화가 생긴다. 가변 크기인 세그멘테이션은 반대로 외부 단편화가 생긴다.
- 물리 메모리를 고정 크기로 분할: 프레임 단위로 관리하므로 옳다.
- 세그먼트는 논리 단위이며 크기가 서로 다를 수 있다: 옳다.
- 페이지 테이블로 페이지 번호를 프레임 번호에 매핑: 옳다.
프로그램은 실행 중 메모리의 일부 영역만 집중적으로 참조하므로, 모든 영역을 참조한다는 설명이 틀렸다.
이 집중 참조 성질이 지역성이며, 워킹 셋·LRU 같은 페이지 교체 기법이 이를 근거로 한다.
- 시간 지역성: 최근 참조한 주소를 곧 다시 참조하는 성질(반복문, 카운터 변수)로 옳다.
- 공간 지역성: 인접 주소를 이어서 참조하는 성질(배열 순차 접근)로 옳다.
- 지역성을 이용한 페이지 부재 감소: 자주 쓰는 페이지를 메모리에 유지해 성능을 높이므로 옳다.
㉠ 연결 리스트(Linked List)
㉡ 이진 탐색 트리(Binary Search Tree)
㉢ 해시테이블(Hash Table)
검색 효율은 해시 테이블 → 이진 탐색 트리 → 연결 리스트 순으로 높다.
해시 테이블은 해시 함수로 위치를 바로 계산해 평균 , 균형 잡힌 이진 탐색 트리는 , 연결 리스트는 처음부터 차례로 따라가야 하므로 이다.
- 연결 리스트를 가장 앞에 둔 순서: 순차 탐색이라 가장 느리므로 틀리다.
- 이진 탐색 트리를 해시 테이블보다 앞에 둔 순서: 은 보다 느리므로 틀리다.
- 연결 리스트를 이진 탐색 트리보다 앞에 둔 순서: 은 보다 느리므로 틀리다.
내부 스키마는 인덱스·저장 방식·레코드 배치 등 물리적 저장 구조를 정의한다.
3단계 스키마는 외부(사용자 관점), 개념(조직 전체의 논리 구조), 내부(물리 저장)로 나뉘며, 단계 사이의 사상으로 데이터 독립성을 확보한다.
- 개별 사용자 관점이며 여러 개 존재: 외부 스키마의 설명이며, 개념 스키마는 조직 전체 관점으로 하나만 존재한다.
- 실제 물리적 저장 방식 정의: 내부 스키마의 설명이며, 외부 스키마는 사용자·응용 관점의 논리 구조다.
- 외부·내부 스키마 사이의 데이터 종속성: 3단계 구조는 종속성을 없애 독립성을 주려는 것이고, 외부 스키마는 개념 스키마와 사상된다.
뷰는 필요한 열과 행만 골라 보여줄 수 있어 민감한 데이터를 감추는 보안 기능을 한다.
뷰는 기본 테이블에서 유도된 가상 테이블로, 정의(질의문)만 저장되고 데이터는 실행할 때 기본 테이블에서 가져온다.
- 데이터를 물리적으로 저장: 뷰는 데이터를 저장하지 않으므로 큰 저장 공간이 필요 없다.
- 하나의 기본 테이블에서만 생성: 여러 테이블을 조인하거나 다른 뷰를 바탕으로도 만들 수 있다.
- 기본 테이블이 바뀌면 쿼리 수정 필요: 뷰 정의만 고치면 응용 프로그램은 그대로 쓸 수 있어 논리적 독립성을 제공한다.
결합도가 높아지면 모듈 간 의존성이 커져 유지보수가 어려워지고 재사용성이 떨어진다.
한 모듈의 변경이 연결된 다른 모듈로 파급되기 때문이며, 좋은 설계는 응집도는 높이고 결합도는 낮춘다.
- 강한 응집과 약한 결합 지향: 모듈 설계의 기본 원칙으로 옳다.
- 응집도는 모듈 내부 요소의 관련 정도: 정의 그대로 옳다.
- 기능적 응집도가 가장 높은 수준: 응집도는 우연적 → 논리적 → 시간적 → 절차적 → 교환적 → 순차적 → 기능적 순으로 높아지므로 옳다.
LLM은 텍스트뿐 아니라 이미지·음성 등을 함께 다루는 멀티모달 모델로 확장되어 쓰이므로, 기타 데이터에 응용하지 못한다는 설명이 틀렸다.
이미지를 입력받아 내용을 설명하거나 음성을 인식·생성하는 모델이 이미 서비스되고 있다.
- 클라우드형 AI의 보안 위험: 입력한 데이터가 외부 서버로 전송되므로 정보 유출 위험이 있어 옳다.
- 공개 LLM의 폐쇄망 구동: 모델 파일을 내려받으면 인터넷 없이 내부 서버에서 실행할 수 있어 옳다.
- RAG: 외부 문서를 검색해 답변 생성에 참고 정보로 넣어 응답을 전문화하는 방법으로 옳다.
㉠ 순차적 단계 진행
㉡ 위험 분석 수행
㉢ 반복적 점진 개발
㉣ 테스트 단계 강조
㉤ 상세 문서 작성 우선
㉥ 유연한 요구사항 변경
| 구분 | 폭포수 모델 | V-모델 | 나선형 모델 | 애자일 모델 |
|---|---|---|---|---|
| ① | ㉠ | ㉥ | ㉡ | ㉤ |
| ② | ㉠ | ㉣ | ㉡ | ㉥ |
| ③ | ㉢ | ㉣ | ㉠ | ㉥ |
| ④ | ㉢ | ㉥ | ㉠ | ㉤ |
폭포수는 순차적 단계 진행, V-모델은 테스트 단계 강조, 나선형은 위험 분석 수행, 애자일은 유연한 요구사항 변경이 바른 짝이다.
V-모델은 각 개발 단계에 대응하는 테스트 단계를 짝지어 검증을 강조하고, 나선형은 반복마다 위험 분석을 수행하며, 애자일은 짧은 반복으로 요구사항 변경에 대응한다. 상세 문서 작성 우선은 오히려 폭포수 쪽 특성이다.
- V-모델에 유연한 요구사항 변경, 애자일에 상세 문서 작성 우선을 짝지은 조합: 애자일은 포괄적 문서보다 작동하는 소프트웨어를 중시하므로 틀리다.
- 폭포수에 반복적 점진 개발, 나선형에 순차적 단계 진행을 짝지은 조합: 폭포수가 순차적이고 반복은 나선형·애자일의 특징이므로 틀리다.
- 폭포수에 반복적 점진 개발, V-모델에 유연한 요구사항 변경을 짝지은 조합: 폭포수와 V-모델은 모두 순차형이라 틀리다.
class Calculator {
public int compute(int n) {
return n * 2;
}
}
class AddCalculator extends Calculator {
@Override
public int compute(int n) {
return super.compute(n) + 10;
}
}
class SubCalculator extends Calculator {
@Override
public int compute(int n) {
return super.compute(n) - 5;
}
}
public class Main {
public static void main(String[] args) {
Calculator[] calcs = {
new AddCalculator(),
new SubCalculator(),
new Calculator()
};
int total = 0;
for (Calculator c : calcs) {
total += c.compute(10);
}
System.out.println(total);
}
}배열의 세 객체가 각자 재정의된 메서드를 호출해 합계 65가 출력된다.
동적 바인딩으로 실제 객체 타입의 compute가 호출되고, super.compute(10)은 부모의 을 돌려준다.
- AddCalculator: , 누적 total은 30
- SubCalculator: , 누적 total은 45
- Calculator: , 누적 total은 65