22년-1회차-정보처리기사-필기 시험지 PDF 다운로드
22년-1회차-정보처리기사-필기
UI 설계 시 오류 메시지는 이해하기 쉬운 표현, 회복을 위한 구체적 설명 제공, 부정적 결과에 대한 사전 안내를 원칙으로 한다.
반면 소리·색상은 오류 상황을 신속히 인지시키는 보조 수단으로 적극 활용해야 하므로, 이를 줄이고 텍스트로만 전달하도록 하는 것은 오류 메시지 설계 지침에 어긋난다.
애자일 선언(Agile Manifesto)의 4대 가치는 절차·도구보다 개인과의 상호작용, 포괄적 문서보다 동작하는 소프트웨어, 계약 협상보다 고객과의 협력, 계획 준수보다 변화 대응을 우선시한다.
따라서 "동작하는 소프트웨어보다 포괄적인 문서를 가치 있게 여긴다"는 진술은 이 원칙과 정반대이므로 틀린 설명이다.
요구사항 분석은 소프트웨어 개발의 출발점으로, 사용자 요구를 추출·정리하여 무엇을 해야 하는지를 요구사항 명세로 작성하는 단계이다.
반면 "시스템이 사용되는 동안 발견되는 오류를 정리하는 단계"는 개발 이후의 유지보수(운영) 단계에 해당하므로 요구사항 분석에 대한 설명으로 틀리다.
상위 클래스의 속성과 메소드를 하위 클래스가 그대로 물려받아 재사용하는 객체지향 개념은 상속(Inheritance)이다.
Abstraction은 추상화, Polymorphism은 다형성, Encapsulation은 캡슐화로 각각 상속과는 다른 개념이다.
상향식 설계는 최하위 모듈부터 구현한 뒤 이를 결합해 나가는 방식으로, 인터페이스가 미리 정의되어 있지 않으면 오히려 모듈 간 결합 시 수정·조정 부담이 커져 기능 추가가 어려워진다.
반대로 하향식 설계는 상위에서 인터페이스를 먼저 정의하므로 통합 검사가 간단하다는 장점이 있어, ④의 설명이 상향식 설계의 특성과 맞지 않다.
자료흐름도(DFD)의 표기법은 Process=원, Data Flow=화살표, Terminator=사각형이며, Data Store는 삼각형이 아니라 양쪽이 열린 평행선(사각형 형태)으로 표기한다.
따라서 "Data Store : 삼각형"이라는 연결이 옳지 않다.
모델(Model)은 개발 대상을 추상화하여 기호·그림 등으로 표현함으로써 이해도를 높이고 이해관계자 간 의사소통을 향상시키며, 이를 바탕으로 향후 개발될 시스템의 형태를 유추할 수 있게 해준다.
따라서 "모델을 통해 향후 개발될 시스템의 유추는 불가능하다"는 진술은 모델의 목적과 반대되므로 틀린 설명이다.
제시된 그림은 "객체 지향 시스템을 개발할 때 산출물을 명세화·시각화·문서화하는 데 사용되며, 개발 방법론이나 프로세스가 아니라 표준화된 모델링 언어이다"라고 설명한다.
이는 객체지향 분석·설계 산출물을 그래픽 표기법으로 나타내는 표준 모델링 언어인 UML(Unified Modeling Language)에 대한 정의이며, JAVA·C·Python은 프로그래밍 언어이지 모델링 언어가 아니다.
제시된 그림은 "디자인, 사용방법 설명, 평가 등을 위해 실제 화면과 유사하게 만든 정적인 형태의 모형이며, 시각적으로만 구성 요소를 배치할 뿐 실제로 구현되지는 않는다"라고 설명한다.
이는 실제 화면과 유사한 정적 시안을 의미하는 UI 설계 도구인 목업(Mockup)의 정의이며, 동작 가능한 시제품인 프로토타입과는 구분된다.
스프린트(Sprint)는 스크럼에서 하나의 완성된 결과물을 만들기 위한 반복 주기로, 통상 1~4주 정도의 짧은 기간으로 설정되며 3달 이상의 장기간으로 정의되지 않는다.
스크럼 마스터·제품 백로그·속도(Velocity)에 대한 설명은 각각 스크럼 프로세스 촉진 역할, 요구사항 목록, 스프린트당 처리 가능한 백로그 추정치로 옳은 설명이다.
UML 다이어그램은 시스템의 정적 구조를 표현하는 구조(정적) 다이어그램과 시간에 따른 동작을 표현하는 행위(동적) 다이어그램으로 나뉜다. 컴포넌트·배치·패키지 다이어그램은 구조 다이어그램이지만, 순차 다이어그램은 객체 간 메시지 교환 순서를 시간 흐름에 따라 표현하는 행위(동적) 다이어그램이다.
LOC 기법의 개발기간은 총 라인수를 (참여인원×1인당 월간 생산성)으로 나눈 총 인월을 다시 참여인원으로 나누어 구한다. 총 인월은 인월이고, 개발기간은 개월이다.
클래스 설계원칙(SOLID) 중 개방-폐쇄 원칙(OCP)은 클래스가 새로운 기능 추가 등 확장에는 열려 있고, 기존 코드의 변경에는 닫혀 있어야 한다는 원칙이며, 이것이 올바르게 서술된 보기다. 단일 책임 원칙은 클래스가 하나의 책임만 가져야 한다는 것이지 변경 가능 여부에 관한 것이 아니고, 리스코프 치환 원칙은 상위 타입을 하위 타입으로 치환해도 프로그램이 정상 동작해야 한다는 것으로 각 보기 설명은 원칙의 정의와 다르다.
GoF 디자인 패턴은 생성(Creational)·구조(Structural)·행위(Behavioral) 패턴으로 분류되며, 추상 팩토리(Abstract Factory)는 관련된 객체들의 조합을 생성하는 대표적인 생성 패턴이다. 컴퍼지트와 어댑터는 구조 패턴, 옵서버는 행위 패턴에 해당한다.
아키텍처 설계과정이 올바른 순서로 나열된 것은?
- ㉮ 설계 목표 설정
- ㉯ 시스템 타입 결정
- ㉰ 스타일 적용 및 커스터마이즈
- ㉱ 서브시스템의 기능, 인터페이스 동작 작성
- ㉲ 아키텍처 설계 검토
아키텍처 설계는 설계 목표 설정 → 시스템 타입 결정 → 스타일 적용 및 커스터마이즈 → 서브시스템의 기능·인터페이스 동작 작성 → 아키텍처 설계 검토 순으로 진행되므로, 제시된 기호 그대로 ㉮ → ㉯ → ㉰ → ㉱ → ㉲ 가 옳다.
먼저 요구사항과 제약을 근거로 무엇을 달성할 설계인지 목표를 확정하고, 그에 맞는 시스템 타입(데이터 중심, 계층형, 클라이언트/서버 등)을 고른다.
이어 선택한 타입에 대응하는 아키텍처 스타일을 적용해 프로젝트 상황에 맞게 조정한 뒤, 각 서브시스템이 맡을 기능과 서브시스템 사이의 인터페이스 동작을 구체적으로 기술한다.
마지막 단계가 설계 검토이므로, 검토가 맨 앞에 오거나 중간에 끼어드는 배열, 그리고 스타일 적용보다 세부 기능 작성이 먼저 오는 배열은 성립하지 않는다.
사용자 인터페이스 설계 가이드라인의 핵심은 사용자가 오류 없이 효율적으로 목표를 달성하도록 돕는 사용성(usability)이며, 오류 수정 용이성과 피드백 제공은 이를 뒷받침하는 원칙이다. 그런데 심미성을 사용성보다 우선해야 한다는 것은 이 가이드라인과 배치되는 설명이므로 가장 거리가 먼 것에 해당한다.
디자인 패턴은 소프트웨어 설계 과정에서 반복적으로 나타나는 문제들에 대해 검증된 해결책을 정형화하여 재사용할 수 있도록 정리한 것이다. 모듈 분해나 클래스 도출은 설계 활동 자체를 가리키는 용어일 뿐, 반복되는 문제의 일반적 해결 방법을 지칭하지는 않는다.
Rumbaugh의 OMT(Object Modeling Technique) 방법론은 객체지향 분석을 위해 객체의 정적 구조를 표현하는 객체 모형, 상태 변화를 표현하는 동적 모형, 데이터 처리 흐름을 표현하는 기능 모형의 세 가지 모델을 생성한다.
FEP(Front End Processor)는 주 프로세서가 입력 데이터를 처리하기 전에 통신 회선을 통해 들어오는 데이터를 미리 받아 전처리함으로써 프로세서의 부담과 처리 시간을 줄여주는 전위 처리기다. EAI는 애플리케이션 통합, GPL은 범용 프로그래밍 언어, Duplexing은 이중화 개념으로 이 정의와 무관하다.
Class(클래스)는 공통된 속성과 행위를 갖는 유사한 객체들을 하나로 묶어 정의한 데이터 추상화의 단위이며, 객체는 클래스의 인스턴스로 생성된다. Method는 객체의 동작, Field는 객체의 속성 값, Message는 객체 간 상호작용 수단을 가리키는 개념이다.
추상화 원칙은 상위 클래스·메소드·함수에서 특성을 간략하게 나타내고, 그 상세 구현은 하위 클래스·메소드·함수에서 담당하는 것이다. 해당 보기는 상위와 하위의 역할을 서로 뒤바꿔 서술했으므로 틀린 설명이다.
테스트 드라이버는 테스트 대상 하위 모듈을 호출하고 필요한 파라미터를 전달하는 가상(더미) 모듈로, 상향식(Bottom-Up) 통합 테스트에서 사용된다. 반대로 테스트 스텁은 하향식 테스트에서 아직 구현되지 않은 하위 모듈을 대신하는 역할이다.
스택(Stack)에 대한 옳은 내용으로만 나열된 것은?
- ㉠ FIFO 방식으로 처리된다.
- ㉡ 순서 리스트의 뒤(Rear)에서 노드가 삽입되며, 앞(Front)에서 노드가 제거된다.
- ㉢ 선형 리스트의 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조이다.
- ㉣ 인터럽트 처리, 서브루틴 호출 작업 등에 응용된다.
스택은 한쪽 끝(top)에서만 삽입·삭제가 일어나는 후입선출(LIFO) 구조이므로, 옳은 설명은 인터럽트 처리와 서브루틴 호출에 응용된다는 ㉣ 하나뿐이다.
서브루틴을 호출하면 복귀 주소와 지역 변수를 스택에 쌓았다가 가장 나중에 쌓은 것부터 꺼내 복귀하고, 인터럽트 처리도 같은 방식으로 문맥을 저장·복원한다. 재귀 호출과 후위 표기 수식 계산도 대표적인 응용이다.
- FIFO 방식으로 처리된다는 설명과, 뒤(Rear)에서 삽입하고 앞(Front)에서 제거한다는 설명은 모두 큐(Queue)의 특징이다.
- 선형 리스트의 양쪽 끝에서 삽입·삭제가 모두 가능한 구조는 데크(Deque)를 가리킨다.
모듈화는 시스템을 독립된 기능 단위로 분리해 모듈 간 인터페이스를 단순화하는 것을 목표로 하며, 이를 통해 오류 파급을 줄이고 재사용성과 유지보수성을 높인다. 따라서 '기능 분리로 인터페이스가 복잡해진다'는 설명은 모듈화의 취지와 반대되므로 장점이 아니다.
소프트웨어 프로젝트 관리는 주어진 기간 내에 최소의 비용으로 사용자가 만족하는 시스템을 개발하도록 인력·일정·품질을 통제하는 활동으로 정의된다. 기간을 임의로 연장하거나 인력을 무조건 최대화하는 것은 프로젝트 관리의 목적에 부합하지 않는다.
정형 기술 검토(FTR)는 회의 시간을 통제하기 위해 의제와 논쟁·반박을 제한하고, 문제 영역을 명확히 표현하도록 지침을 두며, 참가자 수도 소수로 제한해 검토 효율을 높인다. 따라서 '참가자 수를 제한하지 않는다'는 지침은 틀린 설명이다.
소프트웨어 재공학 활동 중 마이그레이션(Migration)은 기존 소프트웨어 시스템을 새로운 기술 환경이나 하드웨어 플랫폼에서 동작하도록 옮기는 작업을 말한다. 코드 구조만 개선하는 재구조화(Restructuring)나 설계를 역으로 추출하는 역공학(Reverse Engineering)과는 구분된다.
프로그래밍 언어 선택 시에는 개발할 시스템의 특성, 사용자 요구사항, 컴파일러의 신뢰성과 가용성 등을 고려해야 한다. 반면 컴파일러의 '독창성' 여부는 언어 선택의 실질적 판단 기준이 될 수 없다.
소프트웨어 패키징은 개발자가 아닌 사용자(고객) 중심으로 진행되어야 하며, 사용자의 다양한 환경에서 설치·운용이 가능하도록 일반적 배포 형태로 제작하고 매뉴얼·버전관리를 지속해야 한다. 따라서 '개발자 중심으로 진행한다'는 설명은 틀렸다.
자료구조는 원소 간 순서 관계에 따라 선형 구조와 비선형 구조로 나뉘며, 리스트·스택·큐·데크는 자료가 순차적으로 나열되는 선형 구조이다. 반면 트리는 노드가 계층적으로 분기되는 비선형 구조이므로 선형 구조가 아니다.
참고문서나 원개발자가 없어 코드를 이해·수정하기 매우 어려운 오래된 프로그램을 Alien Code라 한다. Source Code(소스 코드)나 Object Code(목적 코드)는 코드의 형태를 가리키는 일반 용어일 뿐 유지보수 난이도를 뜻하지 않는다.
소프트웨어 재사용은 생산성 증가·프로젝트 문서 공유·소프트웨어 품질 향상을 가져오지만, 이미 검증된 기존 모듈을 다시 활용하는 개념이므로 새로운 개발 방법론 도입과는 직접적인 관련이 없다.
인터페이스 간 통신에서 실제로 쓰이는 데이터 포맷은 JSON·XML·YAML이며, AJTML은 실존하지 않는 가공의 명칭이다.
NS Chart(Nassi-Schneiderman Chart)는 순차·선택·반복 등의 제어 논리 구조를 사각형 도형으로 표현하는 도식으로, 화살표나 GOTO문을 사용하지 않는 것이 오히려 특징이다. 도형만으로 흐름을 나타내 이해하기 쉽고 코드 변환이 용이하다는 나머지 설명은 옳다.
push A → push B → pop(B 출력) → push C → push D → pop(D 출력) → pop(C 출력) → pop(A 출력) 순으로 진행되어 출력 결과는 B D C A가 된다.
피벗(pivot)을 기준으로 분할 정복 방식으로 정렬하며, 피벗 선택이 최악인 경우(이미 정렬된 배열 등) 매번 원소 하나씩만 분리되어 회의 비교가 필요한 정렬은 Quick Sort이다.
화이트 박스 검사는 소스 코드를 직접 검토하며 내부 로직과 구조를 기반으로 수행하는 검사 기법이다. 이미지의 보기를 확인하면, ㉠은 문장 커버리지(구문 커버리지로 모든 명령문 실행 여부 확인), ㉡은 분기 커버리지(모든 조건의 참·거짓 분기 실행 여부 확인)로 모두 코드의 내부 구조를 기반으로 하는 화이트 박스 기법이다. ㉢ 동등 분할(입력값의 범위를 그룹으로 나누는 블랙 박스 기법), ㉣ 상태 전이(상태 머신 기반의 블랙 박스 기법), ㉤ 경계값 분석(입력값의 경계를 중심으로 검사하는 블랙 박스 기법), ㉥ 원인-결과 그래프(입력과 출력의 관계를 분석하는 블랙 박스 기법)는 모두 외부 명세나 동작을 기반으로 하는 블랙 박스 기법이다. 따라서 화이트 박스 검사 기법에 해당하는 것은 ㉠, ㉡이다.
ISO/IEC 25000(SQuaRE) 시리즈에서 2501n은 소프트웨어 품질 모델(quality model)을 정의하는 부문이고, 내부 측정·외부 측정·사용 품질 측정·품질 측정 요소를 다루는 것은 2502n(품질 측정, quality measurement) 부문이다. 따라서 이를 2501n의 내용으로 서술한 설명이 옳지 않다.
코드 인스펙션은 프로그램을 실행하지 않고 개발자가 직접 읽고 검토하는 정적 테스트 기법이므로, 동적 테스트 시에만 활용한다는 설명은 옳지 않다. 결함뿐 아니라 코딩 표준 준수 여부, 효율성 등도 함께 검사한다.
프로젝트에 내재된 위험 요소를 인식·분석하여 사전에 예측하고 대비하는 활동은 Risk Analysis(위험 분석)이다. CPM은 일정 관리, WBS는 작업 분할, Waterfall Model은 개발 생명주기 모델로 위험 관리와는 별개의 개념이다.
물리적 설계는 저장 레코드의 형식·접근 경로 결정과 함께 응답 시간, 저장 공간의 효율화, 트랜잭션 처리량 같은 성능 요소를 고려하는 단계다.
반면 스키마의 평가 및 정제는 개념적·논리적 설계 단계에서 다뤄지는 작업이므로 물리적 설계의 고려 사항으로는 적절하지 않다.
DELETE는 WHERE 조건에 맞는 행만 제거하는 DML 명령이며, 테이블 자체의 정의(스키마)는 그대로 남는다.
이에 비해 DROP TABLE은 테이블 구조 자체를 삭제하는 DDL 명령이므로, WHERE절 없는 DELETE가 DROP TABLE과 동일한 효과를 낸다는 설명은 틀리다.
기본 형식이 “DELETE FROM 테이블 [WHERE 조건];”이라는 점과 DML로 분류된다는 점은 옳은 설명이다.
제5정규형(5NF)은 릴레이션에 존재하는 모든 조인 종속성의 만족이 오직 해당 릴레이션의 후보키를 통해서만 성립할 때 도달하는 정규형이다.
이는 조인 종속성으로 인한 이상현상까지 제거하는 가장 엄격한 단계로, 제4정규형보다 상위 개념이다.


E-R 모델에서 다중값 속성(multivalued attribute)은 이중 타원형(double ellipse)으로 표기한다. 단일 타원형은 단순 속성, 밑줄 친 속성은 키 속성, 화살표가 있는 것은 파생 속성 등 다른 속성 유형을 나타내므로, 하나의 엔티티가 여러 개의 값을 가질 수 있는 다중값 속성은 일반 타원형을 중첩하여 표현한다.
외래키(Foreign Key)는 한 릴레이션의 속성이 다른 릴레이션의 기본키(Primary Key)를 참조하는 키로, 릴레이션 간 참조 무결성을 유지하는 역할을 한다.
슈퍼키는 튜플을 유일하게 식별하는 속성 집합 전체를, 후보키는 그중 최소성을 만족하는 키를 의미하므로 외래키의 정의와는 다르다.
관계해석에서 ∀(전칭 정량자, universal quantifier)는 ‘모든 것에 대하여(for all)’를 의미하며, ∃는 ‘존재한다(there exists)’는 뜻의 존재 정량자다.
∈와 ⊂는 각각 원소·부분집합 관계를 나타내는 집합 기호로 정량자가 아니다.
릴레이션에서 Degree는 속성(열)의 개수를, Cardinality는 튜플(행)의 개수를 뜻한다.
제시된 릴레이션은 속성이 4개, 튜플이 3개로 구성되어 있으므로 Degree는 4, Cardinality는 3이다.
사용자는 필요에 맞게 뷰를 정의하고 그 위에 또 다른 뷰를 만들 수 있으며, DBA는 특정 열·행만 노출해 보안 목적으로 뷰를 활용할 수 있다.
그러나 SQL에서 뷰에 대한 삽입·갱신·삭제 연산은 자유롭지 않다 — 여러 테이블을 조인한 뷰나 GROUP BY·DISTINCT·집계함수를 포함한 뷰 등은 갱신이 제한되므로, “제약 사항이 없다”는 설명은 틀리다.
관계대수의 프로젝션(π)·셀렉션(σ) 연산을 SQL로 옮기면 프로젝션 대상 속성은 SELECT절에, 대상 릴레이션은 FROM절에, 조건은 WHERE절에 와야 한다.
따라서 학생 릴레이션에서 학과가 '교육'인 튜플의 이름 속성만 추출하는 SELECT 이름 FROM 학생 WHERE 학과='교육'; 이 문법적으로 올바른 표현이며, 나머지 보기는 속성명과 릴레이션명의 위치가 뒤바뀌어 있다.
이행적 함수 종속(transitive dependency)이란 A→B, B→C 일 때 A→C가 성립하는 관계를 말하며, 이를 제거해 기본키가 아닌 속성이 다른 비키 속성에 종속되지 않도록 하는 단계가 2NF → 3NF 정규화 과정이다.
1NF→2NF는 부분 함수 종속 제거 단계, 3NF→BCNF는 결정자가 후보키가 아닌 함수 종속을 제거하는 단계다.
CREATE TABLE문은 테이블을 새로 정의할 때 사용하는 명령으로, 속성의 NOT NULL 지정·기본키(PRIMARY KEY) 구성·CHECK 제약조건 정의를 포함한다.
이미 생성된 속성의 데이터 타입을 변경하는 기능은 ALTER TABLE문의 역할이므로 CREATE TABLE문에는 포함되지 않는다.
REVOKE는 데이터 제어어(DCL)로서 사용자에게 부여된 권한을 회수하는 명령이며, 열 이름을 다시 부여(변경)하는 기능은 없다.
열 이름 변경은 ALTER TABLE ... RENAME COLUMN 등으로 처리하므로 REVOKE로 열 이름을 부여할 수 있다는 설명이 틀린 내용이다.
데이터 정의어(DDL)가 테이블·뷰·인덱스를 생성·변경·제거한다는 것, DISTINCT의 중복 제거, JOIN을 통한 테이블 결합은 모두 옳은 설명이다.
다음 SQL문의 실행결과로 생성되는 튜플 수는?
SELECT 급여 FROM 사원;
<사원> 테이블
| 사원ID | 사원명 | 급여 | 부서ID |
|---|---|---|---|
| 101 | 박철수 | 30000 | 1 |
| 102 | 한나라 | 35000 | 2 |
| 103 | 김감동 | 40000 | 3 |
| 104 | 이구수 | 35000 | 2 |
| 105 | 최초록 | 40000 | 3 |
SELECT 절에 DISTINCT가 없어 중복 제거가 일어나지 않으므로, 결과 튜플 수는 원본 테이블의 행 수와 같은 5개이다.
사원 테이블에는 사원ID 101~105의 다섯 행이 있고 WHERE 절이 없어 모든 행이 대상이 된다. 따라서 급여 열의 값이 30000, 35000, 40000, 35000, 40000 순서로 5개 튜플 그대로 출력된다.
급여 값의 종류만 세면 30000·35000·40000의 세 가지지만, 이는 SELECT DISTINCT 급여 FROM 사원으로 질의했을 때 얻는 3개다. 일반 SELECT는 중복을 그대로 남긴다는 점이 이 문항의 핵심이다.
BETWEEN A AND B는 A 이상 B 이하의 범위, 즉 양쪽 끝값을 포함하는 연산자다.
따라서 BETWEEN 90 AND 95는 점수 >= 90 AND 점수 <= 95와 동일한 의미를 가지며, 부등호로 경계값을 제외하는 다른 보기들과 구분된다.
트랜잭션이 정상적으로 완료될 수 없어 Rollback 연산을 실행한 상태는 철회(Aborted) 상태이다.
부분완료(Partially Committed)는 마지막 연산까지 실행한 직후 커밋 전 상태, 완료(Commit)는 트랜잭션이 성공적으로 끝나 데이터베이스에 반영된 상태를 가리키므로 롤백 상황과는 구분된다.
GRANT는 데이터 제어어(DCL)로서 데이터베이스 사용자에게 사용 권한을 부여하는 명령이다.
반대로 권한을 회수하는 명령은 REVOKE이며, ROLLBACK과 COMMIT은 권한 부여·회수가 아니라 트랜잭션을 각각 취소·확정하는 명령이므로 나머지 보기의 설명은 옳지 않다.
테이블 R과 S에 대한 SQL에 대한 SQL문이 실행되었을 때, 실행결과로 옳은 것은?
R
| A | B |
|---|---|
| 1 | A |
| 3 | B |
S
| A | B |
|---|---|
| 1 | A |
| 2 | B |
SELECT A FROM R
UNION ALL
SELECT A FROM S;

UNION ALL은 중복을 제거하지 않고 두 질의 결과를 그대로 이어 붙이므로, 결과는 A열에 1, 3, 1, 2가 차례로 담긴 4행짜리 릴레이션이다.
R의 A열 값은 1과 3, S의 A열 값은 1과 2다. 앞의 질의가 (1, 3)을 내놓고 뒤의 질의가 (1, 2)를 내놓은 뒤, 두 결과가 순서대로 결합된다.
같은 질의를 UNION으로 바꾸면 중복된 1이 하나로 합쳐져 1, 3, 2의 3행이 된다. 두 연산자의 차이가 곧 행 수의 차이로 나타나므로, 중복 제거 여부를 먼저 확인하는 것이 판단의 출발점이다.
분산 데이터베이스 시스템은 분산 처리기(사이트)·분산 데이터베이스·통신 네트워크를 주요 구성 요소로 하며, 위치·중복·병행·장애 투명성을 목표로 논리적으로는 하나의 시스템처럼 동작하지만 물리적으로는 여러 사이트에 분산되어 있다.
P2P 시스템과 단일(중앙집중) 데이터베이스는 분산 데이터베이스 시스템의 구성 요소가 아니므로 해당 설명이 틀린 내용이다.
DROP VIEW V_1 CASCADE 명령은 V_1을 삭제하되, V_1에 종속된 모든 뷰도 함께 삭제한다. 이미지의 코드에서 V_1은 테이블 두 개를 조인하여 정의되었고, V_2는 V_1을 기반으로 정의되어 있으므로 V_2는 V_1에 종속된 상태다. CASCADE 옵션은 이러한 종속 관계를 무시하고 강제로 삭제하는 옵션으로, V_1을 삭제할 때 V_1을 참조하는 V_2도 함께 삭제된다. 만약 RESTRICT 옵션을 사용했다면 V_2가 V_1을 참조하고 있어 V_1 삭제가 거부되겠지만, CASCADE를 명시했으므로 V_1과 V_2 모두 삭제된다.
병행제어의 목적은 여러 사용자가 데이터베이스를 동시에 이용할 때 일관성 유지, 시스템 활용도 최대화, 사용자 응답시간 최소화, 그리고 데이터베이스 공유의 최대화를 달성하는 데 있다.
따라서 데이터베이스 공유를 최소화한다는 설명은 병행제어의 목적과 반대되므로 틀린 설명이다.
IPv6 기본 패킷 헤더는 확장 헤더를 제외하고 40 octet(320비트)의 고정 길이를 가지므로 32 octet이라는 설명은 틀리다.
IPv6의 주소 자동설정(Auto Configuration) 기능과 IPv4가 클래스별로 네트워크·호스트 주소 길이가 다르다는 설명, IPv4의 유니캐스트 지원은 모두 옳은 내용이다.
arr[2][3]={1,2,3,4,5,6}이므로 arr[0]={1,2,3}, arr[1]={4,5,6}이고, int(*p)[3]=arr로 p는 각 행(3개짜리 배열)을 가리키는 포인터다.
*(p[0]+1)은 arr[0][1]=2, *(p[1]+2)는 arr[1][2]=6이므로 첫 줄 출력은 2+6=8이다.
*(*(p+1)+0)은 arr[1][0]=4, *(*(p+1)+1)은 arr[1][1]=5이므로 둘째 줄 출력은 4+5=9이며, 결과는 8, 9이다.
데이터링크 계층은 프레임 전송을 담당하는 계층으로 HDLC·PPP·LLC가 이에 해당하는 프로토콜이다.
HTTP는 웹 통신을 담당하는 응용 계층(Application Layer) 프로토콜이므로 데이터링크 계층에 해당하지 않는다.
C언어에서 두 논리값 중 하나라도 참이면 1, 둘 다 거짓이면 0을 반환하는 연산자는 논리합 연산자 ||(OR)이다.
&&는 논리곱(AND)으로 두 값이 모두 참일 때만 1을 반환하므로 이 문제의 조건과는 다르다.
IPv6 주소는 16비트씩 8부분을 콜론(:)으로 구분한 16진수로 표기하며, "8비트씩 4부분의 10진수 표시"는 IPv4의 점 십진 표기 방식을 설명한 것이라 틀리다.
2^128개의 주소 공간, 트래픽 클래스를 이용한 등급별 품질보장, 확장 헤더를 통한 보안기능(IPSec) 제공은 모두 IPv6의 실제 특성이다.
예외(Exception)는 프로그램 실행(런타임) 중에 발생하는 오류를 의미하며, 컴파일 단계에서 발견되는 문법 오류는 예외가 아니라 컴파일 오류에 해당해 틀린 설명이다.
배열 인덱스 범위 초과나 존재하지 않는 파일 접근은 모두 실행 중에 발생하는 대표적인 예외 상황이다.
IP 계층에서 패킷 전송 중 오류가 발생했을 때 그 오류 정보를 송신측에 알리는 목적으로 사용하는 프로토콜은 ICMP(Internet Control Message Protocol)이다.
ARP는 IP주소를 MAC주소로 변환하는 프로토콜, PPP는 점대점 회선의 데이터링크 프로토콜로 오류 정보 통지가 주 목적이 아니다.
좋은 소프트웨어 설계는 모듈 내부 요소 간 관련성을 나타내는 응집도(Cohesion)는 높게, 모듈 간 상호 의존도를 나타내는 결합도(Coupling)는 낮게 하는 것이 원칙이다.
응집도가 높고 결합도가 낮을수록 모듈의 독립성이 높아져 유지보수와 재사용성이 향상된다.
제시된 P(S)는 S가 0 이하인 동안 대기(skip)하다가 벗어나면 S를 1 감소시키고, V(S)는 S를 1 증가시키는 구조로, 정수형 카운터와 P(wait)·V(signal) 연산으로 임계구역 접근을 제어하는 세마포어(Semaphore)의 전형적인 정의다.
Dekker·Peterson·Lamport 알고리즘은 세마포어 카운터 없이 공유 플래그 변수만으로 상호배제를 구현하는 방식이라 이 형태와 구별된다.
모듈은 독립적인 기능 단위이면서도 다른 모듈과 상호작용(호출·접근)이 가능해야 소프트웨어 전체를 구성할 수 있으므로, "다른 모듈에서의 접근이 불가능해야 한다"는 설명은 모듈의 특징과 맞지 않는다.
독립적인 기능을 가진 단위라는 점, 독립적 컴파일이 가능하다는 점, 유일한 이름을 가져야 한다는 점은 모듈의 실제 특징이다.
Best Fit는 요청 크기 이상인 가용 공간 중 가장 작은 것을 선택하는 배치 전략이다.
20KB·16KB·8KB·40KB 중 17KB를 수용 가능한 공간은 20KB와 40KB이며, 이 중 더 작은 20KB가 선택된다.
내부단편화는 20KB - 17KB = 3KB이다.
while(1) 무한루프 안에서 i가 4가 되면 break로 탈출하고, 그렇지 않으면 ++i로 1씩 증가시킨다.
i는 0→1→2→3→4로 증가하다가 i==4가 되는 순간 조건이 참이 되어 반복문을 빠져나온다.
따라서 printf로 출력되는 값은 i = 4이다.
rs 메서드는 배열을 앞에서부터 훑으며 'B'는 'C'로 바꾸고, 마지막 원소는 바로 앞 원소 값으로, 그 외는 다음 원소 값으로 교체한다.
초기 배열 A,B,D,D,A,B,C를 인덱스 0부터 순서대로 갱신하면 A는 다음원소 B로, B는 'B'이므로 C로, D는 다음원소 D 그대로, D는 다음원소 A로, A는 다음원소 B로, B는 'B'이므로 C로 바뀌고, 마지막 C는 직전 원소(이미 C로 바뀐 값)를 참조해 C가 되어 최종 배열은 B,C,D,A,B,C,C이다.
이를 순서대로 출력하면 BCDABCC이다.
Ant·Maven·Gradle은 소스 컴파일·의존성 관리·패키징 등을 자동화하는 대표적인 빌드 도구이다.
Kerberos는 네트워크 환경에서 티켓 기반으로 사용자를 인증하는 인증 프로토콜로, 빌드 도구와는 무관하다.
FIFO는 가장 먼저 적재된 페이지부터 교체하는 알고리즘이다.
프레임 3개에 참조열 1,2,1,0,4,1,3을 순서대로 적용하면 1→[1], 2→[1,2], 1(적중)→[1,2], 0→[1,2,0], 4→(1 교체)[2,0,4], 1→(2 교체)[0,4,1], 3→(0 교체)[4,1,3]이 된다.
따라서 최종 프레임 상태는 4, 1, 3이다.
p1은 str1, p2는 str2를 가리키므로 str1[1]=p2[2]='V'가 되어 str1은 "KVREA"가 되고, str2[3]=p1[4]='A'가 되어 str2는 "LOVA"가 된다.
strcat(str1, str2)로 str1 뒤에 str2가 이어붙지만 str1[2]는 이미 앞선 대입에서 정해진 'R' 그대로 유지된다.
따라서 *(p1+2), 즉 str1[2]를 출력하면 R이다.

list_data[0]은 리스트의 첫 원소인 문자열 'a'를, dict_data['a']는 딕셔너리에서 키 'a'에 대응하는 값 90을 가리킨다.
두 print문이 차례로 실행되어 첫 줄에 a, 둘째 줄에 90이 출력된다.
C에서 산술연산자 +가 관계연산자 <, 쉬프트연산자 <<보다 먼저 결합하므로 b+2=4가 먼저 계산되어 a<4, 즉 1<4는 참(1)이다.
a<<1은 1을 왼쪽으로 1비트 이동한 2이며, 2<=b는 2<=2로 참(1)이다.
두 참(1) 값을 &&로 결합한 결과는 1이다.


for문은 리스트 a의 각 원소를 순서대로 순회하며 print(i)를 실행하므로, 원소 하나마다 줄바꿈되어 별도의 줄에 출력된다.
따라서 "대", "한", "민", "국"이 한 줄에 한 글자씩 네 줄로 출력된다.
쉘은 사용자 명령을 해석해 커널에 전달하고, 반복 명령을 위한 스크립트 프로그래밍 기능을 제공하며, 초기화 파일로 사용자 환경을 설정하는 명령 해석기이다.
프로세스와 메모리를 관리하는 것은 쉘이 아니라 커널의 역할이다.
나선형 모델(Spiral Model)은 위험 관리(Risk Management) 측면에서 개발 프로세스를 바라보는 모델로, 계획수립·위험분석·개발·고객평가의 주기를 반복하며 시스템을 완성해 나간다.
위험 분석은 주기의 마지막에 단 한 번 수행하는 것이 아니라 반복되는 매 주기마다 수행하여 위험을 지속적으로 식별·관리해야 하므로 해당 설명이 틀린 것이다.
제시된 설명은 공유 디스크를 중심으로 여러 시스템을 클러스터링하여 하나로 묶고, 장애 발생 시 다른 시스템이 업무를 이어받도록 하여 기간 업무 서버의 안정성(고가용성)을 높이는 구성을 서술하고 있다.
이는 고가용성 솔루션(HACMP, High Availability Cluster Multi-Processing)에 해당하며, 흔히 2대의 서버를 연결해 상호 대기 또는 상호 백업 방식으로 구현된다.
위조된 MAC 주소를 대량으로 스위치에 흘려보내 MAC 주소 테이블(CAM 테이블)의 저장 용량을 초과시키면, 스위치는 목적지를 특정하지 못해 모든 포트로 패킷을 뿌리는 더미 허브처럼 동작하게 된다.
이러한 공격을 스위치 재밍(Switch Jamming), 즉 MAC 플러딩이라 하며 이를 통해 공격자는 스니핑이 가능해진다.
제시된 설명은 하드디스크 등 저장장치를 네트워크 장비 없이 호스트 버스 어댑터(HBA)에 직접 연결하는 방식을 서술하고 있다.
이는 DAS(Direct Attached Storage)의 정의로, 저장장치가 서버(호스트)에 전용 케이블로 직결되어 별도의 네트워크 공유 없이 사용되는 저장 방식이다.
취약점 관리는 실제로 동작 중인 서비스와 열려 있는 포트를 위주로 점검하여 불필요한 서비스·악성 프로그램을 확인·제거하고, 보안 패치를 적용하며 무결성을 검사하는 활동으로 이루어진다.
이미 중단된 프로세스나 닫힌 포트는 현재 위협이 되지 않으므로 이를 위주로 확인하는 것은 취약점 관리 활동에 해당하지 않는다.
V 모델은 폭포수 모델을 기반으로 개발 단계(요구분석·설계·구현)와 이에 대응하는 검증 단계(단위·통합·시스템 테스트)를 명확히 짝지어 V자 형태로 나타낸 모델로, Perry가 제안하였다.
따라서 요구 분석 및 설계 단계를 거치지 않는다는 설명은 각 개발 단계와 테스트 단계를 대응시키는 V 모델의 핵심 특징에 반하므로 틀린 설명이다.
블루프린팅(BluePrinting)은 공격 대상이 될 블루투스 장치를 검색하는 정찰 활동을 의미하며, 제시된 보기 중 유일하게 명칭과 설명이 올바르게 연결되어 있다.
참고로 파일 접근·정보 열람 공격은 블루스나프(BlueSnarf), 스팸성 익명 메시지 전송은 블루재킹(BlueJacking), 취약한 연결 관리를 악용해 장비를 제어하는 공격은 블루버그(BlueBug)이므로 나머지 보기는 명칭과 설명이 서로 뒤바뀌어 있다.
Smurf 공격은 멀티캐스트가 아닌 브로드캐스트(Broadcast) 주소로 다량의 ICMP 요청을 보내, 네트워크상의 모든 시스템이 위조된 출발지(공격 대상)로 응답 패킷을 집중시키게 만드는 공격이다.
Ping of Death·SYN Flooding·Land 공격에 대한 나머지 설명은 모두 올바르다.
제시된 설명은 1990년대 David Clark이 제안한 개념으로, 침입자를 유인하기 위해 의도적으로 취약하게 설치해 두고 침입자의 접근을 탐지·기록함으로써 공격 기법과 정보를 수집하는 시스템을 서술하고 있다.
이는 허니팟(Honeypot)의 정의이며, 쉽게 노출되고 공격이 가능해 보이도록 구성해 두는 것이 특징이다.
제시된 설명은 응용 프로그램을 소프트웨어 컨테이너 단위로 배포·배치하는 것을 자동화해 주는 오픈소스 엔진(플랫폼)을 서술하고 있다.
이는 도커(Docker)에 해당하며, 애플리케이션과 실행 환경을 컨테이너로 격리·패키징하여 어디서든 동일하게 실행할 수 있도록 지원한다.
간트 차트의 수평 막대는 각 작업(Task)의 시작일과 종료일, 소요 기간을 표시하는 것이며 필요 인원수를 나타내지 않는다.
따라서 자원 배치 계획에 활용은 되지만 막대 길이 자체가 인원수를 뜻한다는 설명은 틀린 내용이다.
Scrapy는 파이썬 기반의 대표적인 웹 크롤링·스크래핑 프레임워크로, 대량의 웹 페이지를 수집·파싱하는 데 널리 쓰인다.
나머지 보기는 크롤링과 무관한 명칭이다.
자원 삽입(Resource Injection)은 검증되지 않은 외부 입력 값이 파일·소켓 등 시스템 자원의 식별자나 할당량 지정에 그대로 사용되어, 공격자가 임의로 자원을 지정하거나 과도하게 소모시킬 수 있는 보안 약점이다.
보기는 이를 '내부 입력 값'으로 설명하고 있어 틀린 내용이다.
NTFS는 파일·폴더 단위의 접근 제어 목록(ACL)과 암호화를 지원하여 FAT보다 보안이 강화된 파일 시스템이며, 대용량 볼륨 처리·자동 압축·안정성(저널링)이 장점이고 저용량 볼륨에서는 오히려 속도 저하가 발생할 수 있다.
따라서 '보안에 취약'은 NTFS의 특징이 아니다.
DES는 평문을 64비트 블록 단위로 암호화하는 대칭키 블록 암호 알고리즘이다(키 길이는 56비트).
따라서 DES는 64비트 암호화 알고리즘으로 분류된다.
파일의 기본 생성 권한은 666이며, 실제 권한은 로 결정된다.
생성된 파일 권한이 644이므로 , 즉 umask 값은 022이다.
wtmp는 리눅스 시스템에서 사용자의 로그인·로그아웃 이력과 시스템 재부팅 기록을 누적 저장하는 로그 파일로, last 명령어 등을 통해 접속 이력을 조회할 때 참조된다.
LOC 기법의 예측치는 공식으로 산정되며, 낙관치·기대치·비관치 세 가지 추정값을 사용한다.
'모형치'는 이 산정식에 사용되는 항목이 아니다.
DPI(Deep Packet Inspection)는 OSI 7계층 전 구간의 프로토콜과 패킷 내부 콘텐츠(페이로드)까지 분석하여 침입 시도·해킹을 탐지하고 트래픽을 제어하는 패킷 분석 기술이다.
단순 헤더 정보만 보는 방식과 달리 콘텐츠 수준까지 검사하는 점이 핵심이다.
테일러링(Tailoring)은 프로젝트 특성에 맞게 방법론의 절차·산출물 등을 최적화하여 조정하는 활동으로, 예상되는 변화나 위험 요소를 사전에 식별·반영해야 한다.
변화를 배제하고 신속히 진행하는 것은 테일러링의 목적에 반하므로 틀린 설명이다.