21년-3회차-정보처리기사-필기 시험지 PDF 다운로드
21년-3회차-정보처리기사-필기
요구사항 검증은 고객이 정말 원하는 시스템을 제대로 정의했는지, 문서화된 요구사항들이 서로 상충하지 않는지 점검하는 활동이지만, 검토·인스펙션 등 어떤 기법을 적용하더라도 요구사항의 모든 문제를 완전히 발견한다고 보장할 수는 없다.
따라서 모든 요구사항 문제를 발견할 수 있다는 설명은 틀린 진술이다.
한 클래스의 명세가 바뀔 때 그것을 오퍼레이션의 매개변수로 사용하는 다른 클래스가 영향을 받는 관계는 의존(Dependency)이다.
연관(Association)은 지속적인 구조적 관계, 일반화(Generalization)는 상속 관계, 실체화(Realization)는 인터페이스 구현 관계로 이 설명과는 다르다.
익스트림 프로그래밍(XP)은 테스트 주도 개발(TDD)과 짝 프로그래밍을 핵심 실천법으로 삼아 개발 전 과정에서 지속적으로 테스트를 수행하는 방법론이다.
따라서 빠른 개발을 위해 테스트를 수행하지 않는다는 설명은 XP의 본질과 정반대되는 틀린 진술이다.
소프트웨어 설계의 대표적 추상화 기법은 자료 추상화·제어 추상화·과정(기능) 추상화 세 가지이며, 강도 추상화라는 기법은 존재하지 않는다.
정보 은닉은 모듈 내부의 자료구조와 접근 동작을 외부로부터 감춰 다른 모듈이 이를 직접 참조하지 못하게 함으로써 모듈 간 독립성을 높이고, 오히려 요구사항 변경이 있을 때 수정 범위를 모듈 내부로 국한시켜 유지보수를 쉽게 만든다.
따라서 요구사항 등 변화에 따른 수정이 불가능하다는 설명은 정보 은닉의 목적과 반대되는 틀린 진술이다.
모델링은 요구분석·설계 등 소프트웨어 개발의 전 단계에서 시스템을 이해하고 여러 분야의 엔지니어가 공통된 개념을 공유하도록 돕기 위해 활용되는 기법이다.
따라서 유지보수 단계에서만 모델링 기법을 활용한다는 설명은 틀린 진술이다.
시스템 구축에 대한 성능·보안·품질·안정성 등의 요구사항은 비기능적(Non-Functional) 요구에서 도출되는 것이지 기능적 요구에서 도출되는 것이 아니다.
기능적 요구는 시스템이 제공해야 할 기능 자체를 정의하는 것이므로, 이를 기능적 요구라고 설명한 부분이 틀렸다.
제시된 설명은 클래스의 동작을 의미하며 클래스에 속한 객체에 적용될 메서드를 정의하고 UML에서 동작에 대한 인터페이스를 지정하는 요소인 오퍼레이션(Operation)에 해당한다.
클래스 다이어그램에서 오퍼레이션은 속성(Attribute)과 함께 클래스 박스 하단부에 표기되는 요소다.
마스터-슬레이브 아키텍처에서 마스터는 연산·통신·조정을 총괄하며 슬레이브들을 제어하고, 슬레이브는 마스터의 지시에 따라 특정 연산이나 데이터 수집 같은 작업을 수행한다.
따라서 슬레이브 프로세스는 데이터 수집 기능을 수행할 수 없다는 설명은 슬레이브의 실제 역할과 반대되는 틀린 진술이다.
자료흐름도(Data Flow Diagram)·UML 다이어그램·E-R 다이어그램은 요구사항 정의 및 분석·설계 결과물을 표현하는 대표적 모델링 다이어그램이지만, AVL Diagram은 존재하지 않는 용어이며 AVL은 이진 탐색 트리의 균형을 다루는 AVL 트리(자료구조)를 가리킨다.
캡슐화(Encapsulation)는 속성(데이터)과 연산(메서드)을 하나로 묶어 외부에 세부 구현을 감추는 개념이다. 반면 ①의 설명(상위 클래스의 속성·연산을 전달받아 확장)은 상속(Inheritance)에 대한 설명이므로 캡슐화 정의로 틀리다. 객체·클래스·다형성에 대한 나머지 설명은 각각 올바른 정의이다.
사용자 인터페이스(UI)는 편리한 유지보수를 포함하더라도 근본적으로 사용자 중심으로 설계되어야 하며, '개발자 중심으로 설계'된다는 설명은 UI 설계 원칙에 어긋난다. UI는 배우기 쉽고 사용이 편리해야 하며 사용자 요구사항을 반영해야 한다는 나머지 설명은 타당하다.
Strategy 패턴은 알고리즘군을 캡슐화해 서로 교체 가능하게 만드는 대표적인 행위(Behavioral) 패턴이며, 인스턴스를 복제하여 사용하는 구조는 Prototype 패턴(생성 패턴)의 특징이다. 따라서 Strategy를 '대표적인 구조 패턴'이라 한 설명이 틀리다. GoF 패턴의 목적별 분류(생성·구조·행위)와 Singleton의 정의는 옳다.
애자일 방법론은 애자일 선언문에 따라 '포괄적인 문서보다 작동하는 소프트웨어'를 우선시하며, 계획 수립과 문서화보다 고객과의 협업 및 빠른 반복 개발에 중점을 둔다. 따라서 '정확한 결과 도출을 위해 계획 수립과 문서화에 중점을 둔다'는 설명이 틀리다. 빠른 릴리즈, 고객 소통, 변화하는 요구사항 수용은 애자일의 핵심 특징으로 옳다.
럼바우(Rumbaugh)의 객체지향 분석에서 기능 모델링은 시스템 내 데이터 처리 흐름을 자료 흐름도(DFD)로 표현하는 단계이다. 동적 모델링은 상태 다이어그램, 객체(정적) 모델링은 객체 다이어그램을 주로 사용한다.
순차 다이어그램(Sequence Diagram)은 시간 흐름에 따른 객체 간 메시지 교환을 표현하는 동적(행위) 다이어그램이며 교류 다이어그램(Interaction Diagram)의 한 종류이다. 따라서 '정적 다이어그램에 가깝다'는 설명이 틀리다.
객체지향 분석은 데이터와 행위(기능)를 하나의 객체로 묶어 처리하는 상향식(Bottom-up) 접근 방식이다. 반면 '기능 중심으로 순차적 처리가 중요시되는 하향식(Top-down)' 설명은 구조적 분석(Structured Analysis) 기법의 특징이므로 객체지향 분석 설명으로 틀리다. 나머지 동적 모델링 활용, 데이터·행위의 캡슐화·추상화, 재사용성에 의한 생산성 향상 설명은 옳다.
정해진 명령문자열을 입력해 시스템을 조작하는 방식은 CLI(Command Line Interface)로, DOS 및 Unix 등에서 사용된 대표적인 문자 기반 인터페이스이다.
미들웨어(Middleware)는 애플리케이션과 사용자 사이뿐 아니라 분산 시스템의 여러 컴포넌트·시스템 간에도 통신과 데이터 교환을 중개하는 소프트웨어이다. 따라서 '애플리케이션과 사용자 사이에서만' 서비스를 제공한다는 설명이 틀리다. 위치 투명성 제공, 재사용 가능한 서비스 구현 제공 등 나머지 설명은 미들웨어의 특징으로 옳다.
파이프-필터 아키텍처에서 데이터는 파이프를 통해 단방향으로 흐르며, 필터가 데이터를 변환·전달하는 과정에서 오버헤드가 발생할 수 있다. 따라서 '양방향으로 흐르며 오버헤드가 발생하지 않는다'는 설명이 틀리다. 소프트웨어 아키텍처의 정의, 데이터 중심 아키텍처의 접근자 간 통신 방식, 품질 속성 결정에 대한 나머지 설명은 옳다.
강도(Stress) 테스트는 시스템에 정상 범위를 초과하는 과다한 정보량(부하)을 부과했을 때도 기능이 정상적으로 유지되는지 확인하는 테스트다. 이는 고의로 장애를 유발한 뒤 정상 복귀 여부를 보는 회복 테스트(①)나, 불법 침투 여부를 점검하는 보안 테스트(④)와는 목적이 다르다.
초기 자료는 9, 6, 7, 3, 5이며, 버블 정렬은 인접한 두 값을 비교해 앞 값이 크면 교환하는 과정을 반복한다. PASS 1에서 최댓값 9가 맨 뒤로 이동해 6, 7, 3, 5, 9가 되고, PASS 2에서 6, 3, 5, 7, 9가 된다. PASS 3에서는 6과 3 교환, 6과 5 교환이 일어나 3, 5, 6, 7, 9가 된다.
DFS는 A에서 시작해 인접한 B를 먼저 방문한 뒤, B의 미방문 인접정점 E로 내려가고, 이어서 E-F, F-G로 깊이 우선 진행한다. G에서 더 갈 곳이 없으므로 되돌아와(백트래킹) F의 남은 인접정점 C를 방문하고, C와 연결된 D를 마지막으로 방문한다. 따라서 방문 순서는 A→B→E→F→G→C→D가 된다.
제시된 설명은 소프트웨어 구조를 이루는 독립적 기능 단위이고, 하나 또는 몇 개의 논리적 기능을 수행하는 명령어들의 집합이며, 여러 개가 모여 하나의 완전한 프로그램을 구성한다는 내용으로 모듈(Module)의 정의에 해당한다. 모듈은 프로그램을 기능 단위로 분할해 독립적으로 개발·검사할 수 있게 하는 소프트웨어 구성 요소다.
테스트 드라이버는 시험 대상 모듈을 호출하고 매개변수를 전달해 수행 결과를 확인하는 상위 모듈 역할의 테스트 도구로, 상향식 통합 테스트에서 사용된다. 반대로 시험 대상 모듈이 호출하는 하위 모듈의 역할을 대신하는 것은 테스트 스텁이므로, 이를 드라이버의 설명이라 한 것은 틀린 내용이다.
선형 구조는 자료가 순차적으로 연결되는 구조로 스택·큐·리스트·데크가 이에 속하며, 트리와 그래프는 비선형 구조다. 보기 중 큐와 데크만 모두 선형 구조에 해당한다.
스택에서 원소를 삭제(pop)하기 전에는 스택이 비어 있는지 먼저 확인해야 하며, 스택 포인터 Top이 0이면 제거할 원소가 없는 공백 상태다. 이 경우 정상적으로 삭제 연산을 수행할 수 없으므로 Underflow 상태임을 알려야 한다.
사용자 매뉴얼은 작성 지침을 정의한 뒤, 매뉴얼에 담길 구성 요소를 정의하고(㉢), 정의된 구성 요소별 내용을 작성하며(㉡), 마지막으로 완성된 사용 설명서를 검토하는(㉠) 순서로 진행된다. 따라서 (가)-㉢, (나)-㉡, (다)-㉠의 연결이 옳다.
스택은 후입선출 구조이므로, 어떤 원소보다 나중에 push된 원소가 먼저 출력된 다음에는 둘 사이에 push되어 스택에 남아 있는 원소부터 순서대로 나와야 한다. D, B, C, A는 D를 먼저 출력하려면 A, B, C, D를 모두 push한 뒤 D를 pop해야 하는데, 이때 스택에는 위에서부터 C, B, A가 남아 있어 B보다 C가 먼저 나올 수밖에 없다. 따라서 D 다음에 B가 출력되는 이 순서는 스택으로 만들 수 없다.
검증(Verification)은 산출물이 명세된 요구사항(기능·비기능)을 올바르게 준수하는지, 즉 개발 과정과 결과가 명세대로 만들어졌는지를 확인하는 활동이며, 확인(Validation)은 실제 사용자의 요구에 부합하는지를 결과물로 테스트하는 활동이다. 사용자 요구 충족 여부는 확인이, 명세 준수 여부는 검증이 담당하는데, 이를 서로 뒤바꿔 설명했으므로 틀린 내용이다.
단위 테스트(Unit Test)는 개별 모듈이 정확하게 구현되었는지, 설계된 기능을 예정대로 수행하는지를 모듈 단위로 독립적으로 점검하는 테스트이다. 통합 테스트는 모듈 간 인터페이스, 시스템 테스트는 전체 시스템 동작, 인수 테스트는 사용자 요구사항 충족 여부를 검증하는 것이 목적이므로 개별 모듈 검증과는 범위가 다르다.
형상 통제는 형상통제위원회(CCB) 등의 심의·승인 절차를 거쳐 변경 요구의 수용 여부를 결정하고 통제하는 활동이며, 변경 요구를 즉시 수용 및 반영하는 것은 형상 관리의 기본 원칙에 어긋난다. 형상 식별과 형상 감사에 대한 설명은 각각 형상 항목 식별, 형상 변경의 적합성 점검이라는 정의에 부합해 옳다.
정적 분석(Static Analysis)은 소스 코드를 실행하지 않고 코드 자체의 자료 흐름·논리 흐름을 분석해 오류나 잠재적 결함을 찾아내는 소프트웨어적 검사 기법이다. 따라서 하드웨어적인 방법으로만 코드 분석이 가능하다는 설명은 정적 분석의 성격과 맞지 않다.
오류(Error)로 인해 소프트웨어 내부에 존재하게 되는 결함을 Fault라 하며, 이 Fault가 실행 중 발현되면 시스템이 고장(Failure)을 일으킨다. 즉 Error → Fault → Failure의 관계이므로, 오류가 있을 때 발생하며 고장을 유발하는 대상은 Fault이다.
코드 간결성 지침은 한 줄에 하나의 문장만 기술해 가독성을 높이는 것을 원칙으로 하므로, 한 줄에 최대한 많은 문장을 코딩하는 것은 오히려 가독성을 해쳐 간결성 지침에 어긋난다. 공백·빈 줄·괄호와 들여쓰기를 통한 구분은 모두 간결성을 높이는 올바른 지침이다.
이식성(Portability)은 하나 이상의 서로 다른 하드웨어 환경에서도 쉽게 수정되어 운용될 수 있는 소프트웨어의 능력을 의미한다. Efficiency(효율성)는 자원 사용의 경제성, Usability(사용성)는 사용 편의성, Correctness(정확성)는 요구사항 충족도를 나타내는 별개의 품질 특성이다.
이진 탐색 트리는 삽입 순서에 따라 균형이 무너져 편향(skewed) 트리가 될 수 있으며, 이 경우 검색 효율이 최악의 경우 O(N)까지 저하된다. 반면 AVL 트리·2-3 트리·레드-블랙 트리는 삽입·삭제 시 스스로 균형을 유지하도록 설계되어 최악의 경우에도 O(log N)의 검색 효율을 보장한다.
중위 순회(In-order traversal)는 좌측 부분트리 → 현재 노드 → 우측 부분트리 순서로 방문한다. 주어진 트리에서 A를 루트로 하여 순회하면: A의 좌측 부분트리는 B(자식 D, E)이고 우측 부분트리는 C(자식 F)이다. B 노드에서 좌측 자식 D를 먼저 방문하고(D 출력), B를 방문하고(B 출력), 우측 자식 E를 방문한다(E 출력). 그 후 A를 방문하고(A 출력), C의 좌측 부분트리가 없으므로 C를 방문한 후(C 출력), 우측 자식 F를 방문한다(F 출력). 따라서 중위 순회 결과는 D → B → E → A → C → F로 DBAECF이다.
테스트 케이스 자동 생성 도구가 테스트 데이터를 찾아내는 방법에는 입력 도메인 분석, 랜덤(Random) 테스트, 자료 흐름도 분석 등이 있다. 스텁(Stub)과 드라이버(Driver)는 미완성 모듈을 대체해 통합 테스트를 실행하기 위한 테스트 하네스 도구로, 테스트 데이터(케이스)를 생성하는 방법이 아니다.
DRM 구성 요소 중 패키저(Packager)는 콘텐츠를 유통 가능하도록 메타데이터와 함께 배포 단위(콘텐츠 패키지)로 묶는 역할을 한다. 콘텐츠 제공은 콘텐츠 제공자(Content Provider), 라이선스 발급·관리는 클리어링하우스, 배포된 콘텐츠의 이용 권한 통제는 DRM 컨트롤러의 역할이다.
무결성 규정은 데이터가 만족해야 할 도메인·키·종속성 등의 제약 조건을 다루어 데이터의 정확성과 일관성을 보장하기 위한 것이다.
정식으로 허가받지 않은 사용자에 의한 갱신으로부터 데이터베이스를 보호하는 것은 접근통제(보안)의 영역이지 무결성 규정의 정의가 아니므로 이 설명이 틀리다.
트랜잭션은 하나의 논리적 기능을 수행하기 위한 작업의 단위, 즉 전부 수행되거나 전부 취소되어야 하는 일련의 연산 집합을 의미한다.
뷰는 가상 테이블, 튜플은 릴레이션의 행, 카디널리티는 튜플의 개수를 뜻하므로 정의에 해당하지 않는다.
다음 두 릴레이션 Rl과 R2의 카티션 프로덕트(cartesian product) 수행 결과는?
R1
| 학년 |
|---|
| 1 |
| 2 |
| 3 |
R2
| 학과 |
|---|
| 컴퓨터 |
| 국문 |
| 수학 |


카티션 프로덕트는 두 릴레이션의 튜플을 남김없이 모두 짝지어 만드는 연산이므로 결과는 3×3 = 9개 튜플이다.
R1은 학년 속성에 1, 2, 3 세 튜플을 갖고 R2는 학과 속성에 컴퓨터, 국문, 수학 세 튜플을 가지므로, 결과 릴레이션의 차수(degree)는 1+1=2, 카디널리티는 3×3=9가 된다.
따라서 학년 1에 컴퓨터·국문·수학, 학년 2에 컴퓨터·국문·수학, 학년 3에 컴퓨터·국문·수학이 각각 짝지어진 학년·학과 두 열, 아홉 행짜리 표가 옳다.
세 행짜리 표는 학년과 학과를 1-컴퓨터, 2-국문, 3-수학처럼 한 번씩만 대응시켰거나 특정 학년 하나에만 세 학과를 붙인 것이어서, 나머지 여섯 조합이 통째로 빠져 있다. 이는 곱집합이 아니라 일부만 골라낸 결과다.
물리적 데이터베이스 설계는 저장 레코드의 형식·순서·접근 경로, 트랜잭션 처리량·응답시간·디스크 용량 등 물리적 저장 구조를 결정하는 단계다.
반면 트랜잭션의 인터페이스를 설계하고 데이터 타입 및 데이터 타입 간의 관계로 표현하는 것은 논리적(개념적) 설계 단계의 내용이므로 물리적 설계와 거리가 멀다.
개체 무결성 제약조건은 기본키를 구성하는 속성이 NULL 값을 가질 수 없고, 릴레이션 내에서 유일한 값이어야 한다는 규정이다.
참조 무결성은 외래키가 참조하는 기본키 값과 일치해야 한다는 규정이고, 도메인 무결성은 속성 값이 정의된 도메인 범위 내에 있어야 한다는 규정으로 서로 다르다.
HAVING절은 GROUP BY절로 그룹화된 결과 집합에 조건을 지정할 때 사용하는 절로, GROUP BY와 함께 사용된다.
WHERE절은 그룹화 이전의 개별 행 단위 조건에, ORDER BY절은 결과 정렬에 사용되므로 HAVING과 함께 쓰이지 않는다.
관계 데이터베이스의 관계대수 연산에는 셀렉트·프로젝트·조인·디비전과 순수 집합 연산인 합집합·차집합·교집합·카티션 프로덕트 등이 있다.
포크(Fork)는 관계대수에 정의된 연산이 아니므로 해당하지 않는다.
특정 컬럼 값이 NULL이 아닌 행을 조회할 때는 IS NOT NULL 연산자를 사용해야 하며, != NOT NULL이나 DON'T NULL 같은 구문은 SQL 문법에 존재하지 않는다.
SELECT 학생명 FROM 학적 WHERE 전화번호 IS NOT NULL; 은 조회할 컬럼(학생명)과 테이블(학적)을 모두 명시하고 IS NOT NULL 조건을 올바르게 사용한 표준 SQL 구문이다.
이미지의 설명을 읽으면 "릴레이션의 모든 튜플을 유일하게 식별할 수 있는 속성의 집합"이라고 정의되어 있다. 이는 슈퍼키(Superkey)의 정의와 정확히 일치한다. 슈퍼키는 릴레이션의 모든 튜플을 고유하게 구별할 수 있는 하나 이상의 속성 조합으로, 후보키보다 큰 개념이며 불필요한 속성을 포함할 수 있다. 후보키는 최소성을 만족하는 슈퍼키이고, 대체키는 기본키가 아닌 후보키이며, 외래키는 다른 릴레이션의 기본키를 참조하는 속성이므로 모두 다른 개념이다.
인덱스는 사용자가 CREATE INDEX 문으로 직접 생성하고 DROP INDEX 등으로 삭제·변경할 수 있으므로, 시스템이 자동 생성하여 사용자가 변경할 수 없다는 설명은 틀리다.
검색 성능 최적화가 목적이라는 점, B-트리 인덱스가 분기용 Branch Block을 가진다는 점, BETWEEN 같은 범위 검색에 활용된다는 점은 모두 인덱스의 올바른 특성이다.
로킹 단위(Locking Granularity)가 크면 한 번의 로크로 넓은 범위(예: 파일·테이블)를 잠그므로 로크의 수는 적어지고 관리는 단순해지지만, 동시에 그 자원에 접근하려는 다른 트랜잭션이 대기해야 하므로 병행성 수준이 낮아진다.
반대로 로킹 단위가 작아지면(필드·레코드 단위) 병행성은 높아지지만 로크의 수가 늘어 관리가 복잡해지며, 로킹은 필드·레코드·페이지·테이블·파일 등 여러 단위로 적용될 수 있다.
관계대수(Relational Algebra)는 원하는 결과를 얻기 위해 수행해야 할 연산의 순서(절차)를 명시하는 절차적 언어이며, 릴레이션을 피연산자와 결과로 하는 연산의 집합으로 일반 집합 연산과 순수 관계 연산으로 구분된다.
"원하는 릴레이션을 정의하는 방법만 제공하며 비절차적"이라는 설명은 관계대수가 아니라 관계해석(Relational Calculus)의 특징이므로 틀린 설명이다.
하나의 사실이 여러 릴레이션이나 튜플에 중복 저장되어 있을 때, 삽입·삭제·갱신 연산 과정에서 데이터 불일치나 예기치 못한 부작용이 발생하는 현상을 이상(Anomaly)이라 한다.
정규화는 이러한 삽입 이상·삭제 이상·갱신 이상을 제거하기 위해 수행하는 과정이다.
DDL(Data Definition Language)은 테이블 등 스키마 객체를 정의·변경·삭제하는 언어로 CREATE·ALTER·DROP이 이에 속한다.
반면 DELETE는 저장된 데이터(튜플)를 조작하는 명령으로 INSERT·UPDATE·SELECT와 함께 DML(Data Manipulation Language)에 속하므로 DDL이 아니다.
정규화(Normalization)는 요구사항 분석 후 만들어진 개념적 스키마(E-R 모델)를 바탕으로 논리적 설계 단계에서 릴레이션을 분해·재구성하며 수행되는 절차로, 개념적 설계 단계 이전에 수행되는 것이 아니다.
정규화는 데이터 중복을 배제해 삽입·삭제·갱신 이상을 방지하고 데이터 구조의 안정성을 높이며, 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄이는 것이 목적이므로 이 부분은 옳은 설명이다.
트랜잭션의 ACID 특성 중 Isolation(고립성)은 여러 트랜잭션이 동시에 병행 실행되더라도 한 트랜잭션의 실행 중간 결과를 다른 트랜잭션이 참조하거나 끼어들 수 없도록 보장하는 특성이다.
Atomicity(원자성)·Consistency(일관성)·Durability(지속성)와 함께 트랜잭션의 4대 특성을 이루며, 이 문제의 정의는 그중 고립성에 해당한다.
SQL의 논리 연산자는 조건을 결합·부정하는 데 쓰이는 AND·OR·NOT 세 가지이며, OTHER는 SQL에서 정의된 논리 연산자가 아니다.
타임스탬프 기법(Timestamp Ordering)은 트랜잭션이 시작되기 전에 고유한 타임스탬프를 부여하여 그 순서대로 트랜잭션이 실행된 것과 동일한 결과가 되도록 직렬화 순서를 미리 정해 병행 제어를 수행하는 기법이다.
이는 트랜잭션이 자원을 획득한 뒤 충돌을 검사하는 로킹 기법이나, 실행이 끝난 후 검증하는 검증(낙관적) 기법과 구분된다.
이전 단계(제4정규형)의 정규형 조건을 만족하면서, 후보키를 통하지 않는 조인 종속(Join Dependency)을 제거해야 만족하는 정규형은 제5정규형(5NF, PJ/NF)이다.
제5정규형은 릴레이션의 모든 조인 종속이 후보키를 통해서만 성립하도록 무손실 분해가 이루어진 상태를 의미한다.
애트리뷰트 집합 X의 값에 대응하는 Y의 값이 시간에 관계없이 항상 유일하게 결정될 때, 이를 함수 종속(Functional Dependency)이라 하며 X → Y로 표기하고 "Y는 X에 함수 종속이다" 또는 "X가 Y를 함수적으로 결정한다"라고 읽는다.
이때 X를 결정자(Determinant), Y를 종속자(Dependent)라 한다.
시간적 응집도(Temporal Cohesion)는 서로 다른 기능을 수행하는 요소들이 특정 시간대에 함께 실행되도록 묶인 경우에 해당한다.
초기화·종료 처리처럼 실행 시점만 같을 뿐 기능적 연관성은 없는 모듈이 대표적인 예다.
기능 간 연관성이 전혀 없이 우연히 묶인 우연적 응집도보다는 강하지만, 실행 순서·데이터 흐름으로 연결된 순차적 응집도보다는 약하다.
오류 제어에 쓰이는 ARQ(자동반복요청) 방식으로는 Stop-and-wait ARQ·Go-back-N ARQ·Selective-Repeat ARQ(및 적응적 ARQ)가 있으며, 모두 수신측 응답을 확인해 오류 발생 시 프레임을 재전송하는 기법이다.
Non-Acknowledge ARQ는 실재하는 ARQ 방식이 아니다.
함수 cs(n)은 s=0에서 시작해 range(n+1)의 0부터 n까지를 모두 더해 반환하므로, cs(11)은 을 계산한다.
따라서 print(cs(11))의 출력은 66이다.
strcat(str, p2)는 str에 저장된 문자열 "nation" 뒤에 p2가 가리키는 문자열 "alter"를 이어붙이는 함수다.
따라서 str은 "nationalter"가 되고 printf("%s", str)의 출력은 nationalter이다.
가비지 컬렉터(Garbage Collector)는 JAVA 힙 영역에서 더 이상 참조되지 않는(참조값을 잃거나 참조 변수 자체가 사라진) 객체를 자동으로 탐지해 회수하는 모듈이다.
개발자가 직접 메모리를 해제하지 않아도 되게 하는 JAVA의 자동 메모리 관리 기능이다.
r1은 b<=4(참)가 성립해 1, r2는 a>0(참)과 b<5(참)이 모두 성립해 1이 되며, r3는 c가 2로 0이 아니므로 !c 결과가 0이 된다.
따라서 printf("%d", r1+r2+r3)의 출력은 1+1+0 = 2이다.
JAVA 연산자 우선순위에서 대입 연산자(=)는 모든 연산자 중 가장 낮은 우선순위를 가진다.
증감 연산자(--), 산술 연산자(%), 비트 AND 연산자(&)는 모두 대입 연산자보다 먼저 계산되는 상위 우선순위 연산자다.
SSTF(Shortest Seek Time First)는 현재 헤드 위치에서 탐색 거리가 가장 짧은 요청을 우선 처리하는 디스크 스케줄링 기법이다.
헤드 위치 53에서 시작해 매 단계 가장 가까운 트랙을 선택하면 53→65(거리12)→67(거리2)→37(거리30)→14(거리23)→98(거리84)→122(거리24)→124(거리2)→183 순으로 처리된다.
192.168.1.0/24를 4개의 서브넷으로 나누려면 2비트를 추가로 빌려 /26(블록 크기 64)으로 분할하며, subnet-zero를 적용하면 네 번째 네트워크는 192.168.1.192/26(192~255) 대역이 된다.
이 대역에서 네트워크 주소(.192)를 제외한 첫 사용 가능 IP부터 세면 .193·.194·.195·.196 순이므로 네 번째 사용 가능 IP는 192.168.1.196이다.
IP 주소 클래스는 첫 옥텟 값으로 구분되며 C 클래스는 192~223 범위에 해당한다.
200.168.30.1의 첫 옥텟 200이 이 범위에 속해 C 클래스이고, 10.3.2.14는 A클래스(1~126), 172.16.98.3은 B클래스(128~191), 225.2.4.1은 D클래스(224~239)에 해당한다.
이미지의 C 코드를 읽으면, 정수형 배열 arr에 {1, 2, 3, 4}가 저장되고, 포인터 p가 arr을 가리킨다. 반복문에서 p++는 포인터를 다음 요소로 이동시키는데, 정수형 포인터이므로 4바이트씩 증가한다(32비트 정수 기준). 루프는 i가 0부터 2까지(3번) 실행되므로, p는 arr[0]에서 arr[3]까지 이동하며 3번 증가한다. 포인터 산술에서 p++를 3번 수행하면 메모리 주소가 12바이트 증가하므로, (p - arr)은 3이 되고, 이를 4로 곱하면 3 × 4 = 12가 아니라, (p - arr)은 배열 인덱스 단위로 계산되므로 최종 결과는 2 × 4 = 8이다. 루프 조건 i < 2에서 i는 0, 1만 실행되므로 p는 2번 증가하여 arr[2]를 가리키게 되고, (p - arr) = 2, 2 × 4 = 8이다.
Python은 귀도 반 로섬(Guido van Rossum)이 발표한 인터프리터 방식의 객체지향 스크립트 언어로, 문법이 간결해 배우기 쉽고 다양한 플랫폼에서 동작하는 이식성을 갖춘 것이 특징이다. C++·JAVA·C#은 모두 컴파일 기반 언어이거나 귀도 반 로섬과 무관한 언어이므로 해당하지 않는다.
다음 JAVA 프로그램이 실행되었을 때의 결과를 쓰시오.
public class ovr {
public static void main(String [] arge) {
int arr[];
int i = 0;
arr = new int[10];
arr[0] = 0;
arr[1] = 1;
while(i<8) {
arr[i+2] = arr[i+1] + arr[i];
i++;
}
System.out.println(arr[9]);
}
}배열이 피보나치 수열로 채워지고 마지막에 인덱스 9의 값을 출력하므로 결과는 34다.
arr[0]=0, arr[1]=1로 시작해 i가 0부터 7까지 여덟 번 도는 동안 arr[i+2] = arr[i+1] + arr[i] 를 수행하므로 arr[2]부터 arr[9]까지가 앞의 두 값을 더한 값으로 채워진다.
차례로 계산하면 arr = 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 가 되고, 출력 대상인 arr[9]는 21+13 = 34다.
21은 arr[8], 13은 arr[7]의 값이므로 반복 횟수를 하나 적게 세면 나오는 값이고, 출력되는 값은 아니다.
스레드(Thread)가 프로세스(Process) 내에서 실행되는 흐름의 단위이며, 스레드는 프로세스와 달리 독자적인 주소 공간을 갖지 않고 프로세스의 자원을 공유하되 실행을 위한 스택(Stack)은 개별적으로 갖는다. 프로세스가 스레드 내에서 실행되며 실행 스택이 없다는 설명은 주체와 특성이 뒤바뀐 틀린 설명이다.
모듈 간에 변수를 공유하거나 제어 정보를 교류하는 방식(공통 결합·제어 결합)은 모듈 간 의존성을 높여 오히려 결합도(Coupling)를 증가시키는 요인이며, 결합도를 낮추려면 전역변수 대신 매개변수를 통한 자료 전달처럼 모듈 간 상호작용을 최소화해야 한다. 변수·제어 정보 공유로 결합도를 낮춘다는 설명은 결합도의 원리와 반대되는 틀린 설명이다.
TCP 헤더의 윈도우 크기(Window Size) 필드는 16비트로 구성되어 최대값이 65,535바이트이며, 32767bit라는 수치는 필드 길이·단위 모두 사실과 다르다. 순서번호·수신번호확인·체크섬에 대한 설명은 모두 TCP 헤더의 실제 기능과 일치한다.
모듈의 수가 증가하면 개별 모듈의 크기는 상대적으로 작아지고 모듈 간 상호교류(인터페이스)는 증가하여 과부하 현상이 나타나므로, 모듈 수가 증가하면 모듈 크기가 커지고 상호교류가 감소한다는 설명은 관계가 반대로 서술된 틀린 설명이다. 모듈화가 시스템 복잡도 해결과 유지보수 용이성에 기여한다는 나머지 설명은 모두 타당하다.
페이지 교체 알고리즘에는 FIFO·LRU·LFU(Least Frequently Used)·Optimal 등이 있으며, 가장 적게 사용된 페이지를 교체하는 기법은 LFU로 정의된다. LUF(Least Used First)라는 명칭은 실제 존재하는 페이지 교체 알고리즘이 아니다.
else는 C언어의 조건문에 사용되는 예약어(키워드)이므로 식별자(변수명)로 사용할 수 없어 int else; 는 잘못된 선언이다. Test2·pc·True는 예약어와 무관한 유효한 식별자이므로 변수 선언에 문제가 없다.
파일 디스크립터(File Descriptor), 즉 파일 제어 블록(File Control Block)은 파일 관리에 필요한 정보를 담아 운영체제가 관리하는 영역으로, 평소 보조기억장치에 있다가 파일이 개방되면 주기억장치로 옮겨지며 사용자가 직접 참조할 수 없고 시스템(운영체제)을 통해서만 접근된다.
이상 탐지(Anomaly Detection)는 정상 행위의 통계적 프로파일을 기준으로 이를 벗어나는 비정상 패턴을 탐지하는 기법인데, 지문의 설명(Signature Base·Knowledge Base, 이미 정립된 공격 패턴 매칭)은 실제로는 오용 탐지(Misuse Detection)에 해당한다. 나머지 보기는 각각 HIDS의 계정별 접근 기록, Snort를 대표로 하는 NIDS, DMZ 내 IDS 설치 가능성으로 모두 옳은 설명이다.
강제적 접근 통제(Mandatory Access Control, MAC)는 주체와 객체 각각에 부여된 보안 레이블(Security Label)을 비교해, 높은 보안 등급의 정보가 낮은 등급의 주체에게 노출되지 않도록 강제하는 접근 제어 방식이다. 소유자가 임의로 권한을 부여하는 DAC(임의적 접근 통제)와 달리, MAC은 시스템(관리자)이 정한 보안 등급 규칙에 따라 접근 여부가 결정된다.
텐서플로(TensorFlow)는 구글 브레인 팀이 개발해 공개한 기계 학습·딥러닝용 오픈소스 라이브러리로, 데이터 흐름 그래프 기반의 수치 연산을 지원한다. 타조·원 세그·포스퀘어는 각각 데이터 처리 엔진, 방송 규격, 위치 기반 SNS 서비스로 기계 학습 라이브러리가 아니다.
PaaS-TA는 국내 IT 서비스 경쟁력 강화를 목표로 개발된 개방형 클라우드 컴퓨팅 플랫폼(PaaS)으로, 인프라 제어·관리, 실행, 개발, 서비스, 운영 환경으로 구성된다. N20S·KAWS·Metaverse는 이러한 국산 클라우드 플랫폼과 무관한 용어이다.
XDMCP(X Display Manager Control Protocol)는 X 윈도우 시스템에서 원격 디스플레이 세션을 관리하기 위한 프로토콜로, DBMS 보안 정책을 적용하는 도구가 아니다. 나머지 보기는 각각 인가자 통제라는 접근 제어의 정의, IP·포트 기반 통제, 네트워크 장비의 관리 인터페이스·ACL 통제로 모두 옳은 설명이다.
소프트웨어 개발 프레임워크는 제어의 역전(IoC, Inversion of Control) 원칙에 따라 프레임워크가 전체 실행 흐름을 제어하며 필요한 시점에 사용자(개발자)가 작성한 코드를 호출하는 구조이다. 지문은 이를 반대로, 사용자 코드가 직접 호출하여 프레임워크가 흐름을 제어할 수 없다고 서술하고 있어 틀린 설명이다.
VLAN(Virtual LAN)은 스위치의 포트를 논리적으로 그룹화해 물리적 배치와 무관하게 브로드캐스트 도메인을 분리하는 기술로, 트래픽 감소를 통한 성능 향상과 네트워크 간 격리를 통한 보안성 증대 효과를 제공한다. STP는 루프 방지용 프로토콜, ARP는 IP-MAC 주소 변환 프로토콜로 브로드캐스트 도메인 분리 기능과는 무관하다.
SQL Injection의 기본 개념(임의 SQL 구문 삽입, 웹-DB 연동 구간에서 발생, 사용자 입력값을 통한 공격)은 DBMS 종류에 관계없이 공통되지만, 실제 구체적 공격 기법과 문법(주석 처리 방식, 내장 함수, 오류 메시지 형식 등)은 MySQL·Oracle·MSSQL 등 DBMS마다 차이가 있다. 따라서 공격 기법이 모두 동일하다는 설명은 틀린 설명이다.
RSA는 큰 수의 소인수분해가 어렵다는 수학적 특성을 이용한 대표적인 비대칭(공개키) 암호화 알고리즘이다. DES와 AES는 대칭키 암호화 알고리즘이고, SMT는 암호화 알고리즘이 아니다.
이미지의 설명을 읽으면 소프트웨어 기반의 스토리지 관리, 하드웨어와 소프트웨어 분리, 가상화를 통한 유연한 확장 등의 특징이 보입니다. 이는 Software Defined Storage(SDS)의 핵심 개념으로, 스토리지 인프라를 소프트웨어로 정의하고 제어하여 하드웨어 종속성을 제거하는 기술입니다. Distribution Oriented Storage는 분산 저장 기술, Network Architected Storage와 Systematic Network Storage는 실제 표준 용어가 아니며, SDS만이 스토리지 가상화와 소프트웨어 중심 관리라는 현대 스토리지 아키텍처 표준을 나타냅니다.
COCOMO 모형은 규모와 특성에 따라 Organic(조직형)·Semi-detached(반분리형)·Embedded(내장형)으로 구분된다. Organic형은 기관 내부에서 개발되는 중소규모 소프트웨어로 일괄 자료처리·과학기술계산·비즈니스 자료처리용이며 5만 라인(50KDSI) 이하 규모를 대상으로 한다.
랜섬웨어(Ransomware)는 사용자의 파일이나 시스템을 암호화하여 사용할 수 없게 만든 뒤, 이를 복구해 주는 대가로 금품을 요구하는 악성 프로그램이다. Format String은 서식 문자열 처리 취약점, Buffer overflow는 메모리 경계를 벗어난 값 기록으로 발생하는 취약점, Adware는 광고성 소프트웨어를 가리키므로 금품 요구를 목적으로 하는 설명과는 구별된다.
Waterfall Model(폭포수 모형)은 가장 오래된 소프트웨어 생명주기 모형으로, 요구분석·설계·구현·시험 등 각 단계를 순차적으로 진행하며 한 단계의 결과가 확인되어야 다음 단계로 넘어갈 수 있는 선형 순차적 모형이다. 개발 도중 요구사항 변경이나 보완이 어렵다는 한계가 있어 고전적 생명주기 모형이라고도 불린다.
Spiral Model(나선형 모형)은 계획 및 정의·위험 분석·공학적 개발·고객 평가의 주기를 여러 번 반복하며 점진적으로 완성도를 높이는 모형으로, 대규모 시스템에서 발생할 수 있는 위험을 관리·최소화하는 데 목적이 있다. 따라서 "개발 주기가 한 번만 수행된다"는 설명은 나선형 모형의 반복적 특성에 반하므로 틀린 설명이다.
Ping Flood는 다량의 ICMP Echo Request를 대상 시스템에 전송해 그 응답 처리에 필요한 시스템 자원을 고갈시켜 정상적인 서비스를 방해하는 서비스 거부(DoS) 공격이다. Brute-Force는 인증정보를 무차별 대입으로 알아내는 공격이므로 자원 고갈을 통한 시스템 마비와는 공격 방식이 다르다.
MQTT(Message Queuing Telemetry Transport)는 TCP/IP 기반 네트워크에서 동작하는 발행-구독(Publish-Subscribe) 방식의 경량 메시징 프로토콜로, 대역폭과 자원이 제한된 IoT 환경의 기기 간 통신에 널리 사용된다.
SSO(Single Sign-On)는 한 번의 사용자 인증만으로 여러 시스템 및 서비스에 대한 접근 권한을 함께 획득할 수 있게 하는 통합 인증 체계이다.
Salt는 패스워드를 해시 또는 암호화하여 저장할 때 원본 값에 추가로 부여하는 임의의 값으로, 동일한 패스워드라도 서로 다른 암호화 결과값이 저장되도록 하여 레인보우 테이블 등을 이용한 암호 공격을 방어한다.
LOC 기법은 소프트웨어 각 기능의 원시 코드 라인 수에 대한 낙관치·비관치·기대치(중간치)를 측정한 뒤, (a=낙관치, m=기대치, b=비관치) 공식으로 예상 라인 수를 구하고 이를 바탕으로 비용을 산정하는 기법이다.
OWASP(Open Web Application Security Project)는 웹 애플리케이션을 통한 정보 유출, 악성 스크립트, 보안 취약점 등을 연구하고 웹 보안 표준(OWASP Top 10 등)을 제시하는 개방형 웹 애플리케이션 보안 프로젝트이다.