문제지 PDF · 웹 정답 해설

정보처리기사 필기 2026년 2회 CBT 편집복원 100문항

정보처리기사 필기 2026년 2회 CBT 편집복원 100문항을 과목별로 풀고 문항별 정답과 상세해설을 확인하세요.

후기복원 100문항 시험기간 2026-05-09 ~ 2026-05-29 근거 기준일 2026-10-05

정보처리기사 필기 2026년 2회 CBT 편집복원 100문항 안내

정보처리기사 필기 2026년 2회 CBT 편집복원 100문항을 과목별로 풀고 문항별 정답과 상세해설을 확인하세요.

2026년 2회 범위의 후기복원 분류 대표 학습 세트입니다. CBT 원문이나 공식 정답표를 제공하는 자료가 아닙니다. 100문항의 해설을 기술 문서와 필요한 독립 계산으로 새로 편집 검토했으며, 질문·조건·보기를 바로잡은 문항은 학습용 개정문항으로 표시합니다.

정보처리기사 전체 자료 · 정보처리기사 CBT 학습실

정보처리기사 필기 기출문제 · 소프트웨어 설계

1. XP 팀의 실천으로 보기 어려운 것은?

  1. 일정을 줄이기 위해 자동화 테스트를 생략한다
  2. 짧은 주기로 결과를 전달한다
  3. 요구 변경을 반복 계획에 반영한다
  4. 고객 피드백을 개발에 활용한다
정답과 해설 보기

정답: 1

정답은 ①이다. XP는 짧은 간격으로 작동하는 소프트웨어를 전달하고, 테스트와 고객의 반응을 통해 다음 작업을 조정한다. 자동화 테스트를 없애면 변경으로 기존 기능이 깨졌는지 빨리 알아낼 수 없으므로 이 피드백 순환이 약해진다.

예를 들어 주문 기능을 고친 뒤 기존 결제 테스트를 즉시 실행하면 잘못된 변경을 작은 단계에서 발견할 수 있다. 일정이 빠듯할수록 검증을 생략하는 대신 작은 기능 단위와 자동화된 검증을 함께 유지하는 것이 XP의 취지다. 나머지 세 보기는 짧은 전달 주기·변화 반영·고객 참여에 해당한다.

선지별 해설

  • ① 정답. 자동화 테스트 생략은 빠르고 반복 가능한 피드백을 잃게 한다.
  • ② 오답. 작은 릴리스를 자주 전달하는 것은 XP의 실천이다.
  • ③ 오답. 반복 계획을 조정하여 변경된 요구의 우선순위를 반영한다.
  • ④ 오답. 고객은 요구와 우선순위, 인수 기준에 지속적으로 참여한다.

편집 해설 근거: Ron Jeffries, What is Extreme Programming? (2011) — Customer Tests; Small Releases; Planning Game

2. XP가 제시하는 핵심 가치 다섯 가지에 포함되지 않는 것은?

  1. 의사소통
  2. 단순성
  3. 정형 분석
  4. 존중
정답과 해설 보기

정답: 3

정답은 ③ 정형 분석이다. XP의 다섯 가치는 의사소통, 단순성, 피드백, 용기, 존중이다. 여기서 가치는 특정 도구나 문서 양식의 이름이 아니라 팀이 개발 판단을 할 때 지향하는 기준이다.

정형 분석은 수학적 명세와 논리 등을 이용해 시스템 성질을 분석하는 방법을 가리킬 수 있지만, XP의 다섯 가치 목록에 속하지 않는다. 이를 선택한다고 정형 분석이 쓸모없거나 XP 프로젝트에서 금지된다는 뜻은 아니다. ‘가치 목록에 포함되는가’와 ‘개발에 사용할 수 있는가’를 구별해야 한다.

선지별 해설

  • ① 오답. 의사소통은 XP의 가치 중 하나다.
  • ② 오답. 필요한 기능을 단순하게 설계하려는 단순성은 XP 가치다.
  • ③ 정답. 분석 기법에 관한 말이며 XP의 다섯 가치 명칭에 포함되지 않는다.
  • ④ 오답. 팀원과 기여를 존중하는 것은 XP 가치다.

편집 해설 근거: Ron Jeffries, What is Extreme Programming? (2011) — 첫 단락의 five values

3. 여러 유스케이스가 반드시 수행하는 공통 절차를 별도 유스케이스로 빼고 «include»로 연결했다. 이 관계의 이름은?

  1. 포함 관계
  2. 확장 관계
  3. 일반화 관계
  4. 연관 관계
정답과 해설 보기

정답: 1

정답은 ① 포함 관계이다. 여러 유스케이스가 같은 행동을 공통으로 필요로 하면 그 행동을 별도 유스케이스로 분리하고 «include»로 참조할 수 있다. 예를 들어 주문과 환불 과정에서 필요한 공통 확인 절차를 재사용하는 모델을 만들 수 있다.

포함하는 유스케이스에서 포함 지점에 이르면 포함된 행동을 수행한다. 조건이 맞을 때 기존 유스케이스에 부가 행동을 넣는 «extend»와 구별한다. 일반화는 더 일반적인 유스케이스와 특수한 유스케이스의 관계이고, 연관은 참여·연결을 나타내므로 공통 행동의 포함을 뜻하지 않는다.

선지별 해설

  • ① 정답. 공통 행동을 포함해 재사용하는 «include» 관계다.
  • ② 오답. 확장은 정해진 확장 지점에 부가 행동을 삽입하는 관계다.
  • ③ 오답. 일반 요소와 특수 요소의 상속·특수화 관계다.
  • ④ 오답. 참여자와 유스케이스 등의 연결을 나타내며 공통 절차 포함 관계가 아니다.

편집 해설 근거: OMG UML 2.5.1 (2017) — §18.1.3.2 Extends; §18.1.3.3 Includes

4. DoDAF 2.0에서 시스템 자원·구성·상호연결이 운용·능력 요구를 어떻게 지원하는지 표현하는 관점은?

[학습용 개정문항]

  1. Systems Viewpoint
  2. Standards Viewpoint
  3. Operational Viewpoint
  4. All Viewpoint
정답과 해설 보기

정답: 1

정답은 ① Systems Viewpoint이다. DoDAF 2.0에서 이 관점은 시스템 자원과 구성, 상호연결 등이 운용·능력 요구를 어떻게 지원하는지 표현한다. 예를 들어 운용자가 필요한 정보 교환을 어떤 시스템과 인터페이스로 실현하는지 보여 준다.

Operational Viewpoint는 수행할 활동과 필요한 정보 교환 같은 운용 관점에, Standards Viewpoint는 적용할 표준·규칙에 초점을 둔다. All Viewpoint는 전체 아키텍처에 공통인 범위와 용어 등을 다룬다. 뷰 이름은 프레임워크마다 다르므로 모든 아키텍처의 공통 분류처럼 외우지 않도록 적용 판본을 명시했다.

선지별 해설

  • ① 정답. 운용 요구를 지원하는 시스템 자원·구성·상호연결을 표현한다.
  • ② 오답. 적용하거나 준수할 표준·규칙에 초점을 둔다.
  • ③ 오답. 필요한 운용 활동·정보 교환을 표현하는 관점이다.
  • ④ 오답. 범위·용어 등 여러 관점에 걸친 공통 정보를 다룬다.

편집 해설 근거: DoD CIO, DoDAF 2.0 Systems Viewpoint — Systems Viewpoint 소개 및 SV-1·SV-2 설명; DoD CIO, DoDAF 2.0 Viewpoints — DoDAF Viewpoints and Models

5. 다음 GoF 패턴 중 행위 패턴은?

  1. Builder
  2. Visitor
  3. Prototype
  4. Bridge
정답과 해설 보기

정답: 2

정답은 ② Visitor이다. 행위 패턴은 객체 사이의 책임 분배나 알고리즘·협력 방식을 다룬다. Visitor는 여러 요소로 이루어진 객체 구조에 수행할 연산을 별도 방문자에 모아, 구조와 연산을 분리하는 패턴이다.

예를 들어 문서의 여러 종류 노드를 순회하며 출력하거나 통계를 내는 연산을 방문자로 둘 수 있다. Builder와 Prototype은 객체 생성 방법에 관한 생성 패턴이고, Bridge는 추상부와 구현부를 분리해 독립적으로 바꾸는 구조 패턴이다. 이름이 낯설면 ‘생성 방식·구조 연결·행동 수행’ 중 어떤 문제를 해결하는지 먼저 구분한다.

선지별 해설

  • ① 오답. 복잡한 객체를 단계적으로 구성하는 생성 패턴이다.
  • ② 정답. 구조의 요소를 방문하여 수행할 연산을 분리하는 행위 패턴이다.
  • ③ 오답. 기존 객체를 복제하여 생성하는 생성 패턴이다.
  • ④ 오답. 추상부와 구현부를 분리하는 구조 패턴이다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Design §4.4 Design Patterns and Styles

6. 모듈 독립성을 높이는 일반적인 설계 방향은?

  1. 낮은 응집도와 높은 결합도
  2. 높은 응집도와 낮은 결합도
  3. 낮은 응집도와 낮은 결합도
  4. 높은 응집도와 높은 결합도
정답과 해설 보기

정답: 2

정답은 ② 높은 응집도와 낮은 결합도이다. 응집도는 한 모듈 안의 요소들이 하나의 목적에 얼마나 긴밀하게 관련되는가이고, 결합도는 서로 다른 모듈이 얼마나 의존하는가이다. 내부 책임을 모으고 외부 의존을 줄이면 모듈을 이해하고 바꾸기 쉬워진다.

예를 들어 결제 모듈이 결제 검증과 승인 처리에 집중하고 주문 모듈과는 정해진 인터페이스로만 통신하면 이 방향에 가깝다. 낮은 결합도는 어떤 통신도 하지 말라는 뜻이 아니다. 필요한 협력은 유지하면서 상대의 내부 구현까지 알아야 하는 불필요한 의존을 줄인다는 의미다.

선지별 해설

  • ① 오답. 내부 목적은 흩어지고 외부 의존은 커져 독립성에 불리하다.
  • ② 정답. 내부 관련성을 높이고 모듈 사이 의존을 낮춘다.
  • ③ 오답. 결합도가 낮아도 내부 책임이 흩어져 있으면 좋은 응집이 아니다.
  • ④ 오답. 내부 관련성은 높지만 외부 의존까지 높아 독립성 목표와 다르다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Design §1.4 Software Design Principles, Coupling·Cohesion

7. UML 다이어그램 중 구조 다이어그램으로 분류되는 것은?

  1. 활동 다이어그램
  2. 상태 머신 다이어그램
  3. 시퀀스 다이어그램
  4. 배치 다이어그램
정답과 해설 보기

정답: 4

정답은 ④ 배치 다이어그램이다. 배치 다이어그램은 실행 환경과 장치 등의 노드, 그곳에 배치하는 산출물, 연결을 표현하는 구조 다이어그램이다. 웹 서버와 데이터베이스 서버에 어떤 소프트웨어를 배치하는지가 한 예이다.

활동 다이어그램은 작업 흐름, 상태 머신은 상태와 전이, 시퀀스 다이어그램은 참여자 사이 메시지의 순서를 나타내므로 행위 쪽에 속한다. 구조는 어떤 요소가 어떻게 구성되는가, 행위는 실행 중 어떤 일이 어떤 흐름으로 일어나는가라는 관점으로 구별하면 이름 암기를 줄일 수 있다.

선지별 해설

  • ① 오답. 활동과 흐름을 표현하는 행위 다이어그램이다.
  • ② 오답. 상태와 이벤트에 따른 전이를 표현하는 행위 다이어그램이다.
  • ③ 오답. 객체·참여자 사이 메시지 순서를 표현하는 상호작용 다이어그램이다.
  • ④ 정답. 노드와 산출물의 배치 구조를 표현한다.

편집 해설 근거: OMG UML 2.5.1 (2017) — Annex A UML Diagram Taxonomy; Clause 19 Deployments

8. UML 확장 메커니즘에 관한 설명으로 틀린 것은?

  1. 스테레오타입은 기존 요소에 추가 의미를 준다
  2. 태그 값은 이름과 값 형태의 정보를 덧붙인다
  3. 제약은 요소가 만족할 규칙을 표현한다
  4. 사용할 때마다 UML 메타모델에 새 메타클래스를 직접 추가해야 한다
정답과 해설 보기

정답: 4

정답은 ④이다. UML 프로파일은 기존 UML 모델 요소에 분야별 의미와 제약을 덧붙이는 방법이다. 스테레오타입은 기존 메타클래스의 용도를 특수화하고, 태그 값은 그 스테레오타입 속성의 값을 나타내며, 제약은 만족해야 할 규칙을 표현한다.

예를 들어 클래스에 서비스라는 역할을 부여하고 버전 값을 덧붙일 수 있다. 이를 사용할 때마다 UML 메타모델에 새로운 메타클래스를 직접 추가해야 하는 것은 아니다. UML 2.5.1은 프로파일의 제한된 확장과 MOF 수준의 메타모델 변경을 구별한다. 따라서 확장 장치의 사용을 메타모델 재정의와 동일시한 ④가 틀렸다.

선지별 해설

  • ① 오답. 스테레오타입은 기존 모델 요소에 분야별 의미를 부여할 수 있다.
  • ② 오답. 태그 값은 스테레오타입의 속성에 값을 지정하는 수단이다.
  • ③ 오답. 제약은 모델이 만족해야 할 규칙을 나타낸다.
  • ④ 정답. 프로파일 사용마다 UML 메타모델 자체에 새 메타클래스를 만들 필요는 없다.

편집 해설 근거: OMG UML 2.5.1 (2017) — §12.3.1.1 Positioning Profiles versus Metamodels, MOF and UML; §12.3.3

9. 연산의 사전조건·사후조건과, 객체가 외부에 안정된 상태로 제공될 때 만족해야 할 클래스 불변식을 명세하는 설계 방식은?

[학습용 개정문항]

  1. 계약에 의한 설계
  2. 프로토콜 우선 설계
  3. 자료 흐름 설계
  4. 관계형 설계
정답과 해설 보기

정답: 1

정답은 ① 계약에 의한 설계이다. 연산을 호출하는 쪽이 지킬 사전조건과, 연산을 제공하는 쪽이 보장할 사후조건을 명시한다. 클래스 불변식은 객체가 외부에 안정된 상태로 제공되는 경계에서 만족해야 할 성질이다.

예를 들어 잔액을 바꾸는 공개 연산은 입력 금액이 양수라는 사전조건과 처리 후 잔액에 관한 사후조건을 가질 수 있다. 내부 갱신의 중간 단계에서는 클래스 불변식이 일시적으로 깨졌다가 반환 전에 복구될 수 있다. 그러므로 클래스 불변식을 ‘모든 실행 명령 사이에서 항상 참’이라고 설명하면 부정확하다. 루프의 특정 지점에서 확인하는 루프 불변식과도 구별한다.

선지별 해설

  • ① 정답. 사전조건·사후조건·불변식으로 제공자와 호출자의 의무를 명세한다.
  • ② 오답. 통신 규약을 우선 정하는 것만으로 계약 조건의 명세를 뜻하지 않는다.
  • ③ 오답. 데이터의 흐름을 중심으로 한 설계와 구별된다.
  • ④ 오답. 관계형 데이터 구조에 초점을 둔 설계 명칭이다.

편집 해설 근거: Eiffel Software, Design by Contract and Assertions — Preconditions and Postconditions; Valid State for Instances

10. 접수된 순서대로 0001, 0002, 0003처럼 번호를 붙이는 코드 체계는?

  1. 연상 코드
  2. 블록 코드
  3. 순차 코드
  4. 표의 숫자 코드
정답과 해설 보기

정답: 3

정답은 ③ 순차 코드이다. 0001, 0002, 0003처럼 등록 순서에 따라 다음 번호를 부여하는 방식이다. 번호 자체에 상품의 종류나 크기 같은 의미를 담는 것보다 대상을 차례대로 식별하는 데 목적이 있다. 앞의 0은 표시 자리수를 맞춘 것이다.

연상 코드는 의미를 떠올릴 수 있는 문자 등을 사용하고, 블록 코드는 분류별로 번호 구간을 배정한다. 표의 숫자 코드(유효숫자 코드)는 코드의 일부 숫자에 길이·용량 같은 속성 의미를 부여한다. DB의 sequence는 순번 생성의 구현 예가 될 수 있으나, 실제 DB의 취소·캐시 처리까지 포함하면 항상 빈 번호 없는 연속값이 보장되는 것은 아니다.

선지별 해설

  • ① 오답. 기억할 의미를 담은 문자·기호 등을 사용하는 방식이다.
  • ② 오답. 분류별로 번호 범위를 나누어 배정하는 방식이다.
  • ③ 정답. 정해진 순서대로 일련번호를 부여한다.
  • ④ 오답. 숫자 자리에 크기·규격 등의 속성 의미를 담는 방식이다.

편집 해설 근거: PostgreSQL 18, CREATE SEQUENCE — Description; INCREMENT; Examples; Notes

11. 프로세스가 IP 주소와 포트를 사용해 상대 프로세스와 송수신 통로를 만드는 연계 기술은?

  1. DB 링크
  2. 소켓
  3. 스크럼
  4. 프로토타이핑
정답과 해설 보기

정답: 2

정답은 ② 소켓이다. 소켓은 프로그램이 통신에 사용하는 끝점과 인터페이스를 제공한다. 인터넷 소켓에서는 IP 주소로 호스트 쪽 주소를, 포트 번호로 그 호스트의 통신 서비스를 식별한다. Python의 IPv4 소켓 주소도 (host, port) 쌍으로 나타낸다.

예를 들어 클라이언트가 서버의 주소와 포트로 접속해 데이터를 주고받는 과정에 소켓을 사용한다. DB 링크는 데이터베이스 간 접근 장치, Scrum은 개발 프레임워크, 프로토타이핑은 시제품을 통해 요구 등을 확인하는 활동이다. 모든 소켓이 반드시 IP와 포트를 쓰는 것은 아니며 로컬 Unix 소켓 등 다른 주소 계열도 있다.

선지별 해설

  • ① 오답. 데이터베이스 간 원격 객체 접근을 위한 연결 개념이다.
  • ② 정답. 네트워크 프로세스 통신을 위한 끝점과 API를 제공한다.
  • ③ 오답. 팀의 제품 개발을 위한 프레임워크다.
  • ④ 오답. 시제품으로 요구·설계 등을 확인하는 개발 활동이다.

편집 해설 근거: Python 3.14, socket — Low-level networking interface — Socket families, AF_INET의 (host, port); AF_UNIX

12. 위험 관리에서 위험 징후와 상태를 프로젝트 진행 중 계속 추적하는 활동은?

  1. 위험 식별
  2. 위험 회피
  3. 위험 대응
  4. 위험 모니터링
정답과 해설 보기

정답: 4

정답은 ④ 위험 감시이다. 이미 확인한 위험의 상태와 지표를 계속 관찰해 위험이 커졌는지, 대응이 효과를 내는지, 새로운 변화가 생겼는지 확인하는 활동이다. 예를 들어 외부 서비스의 장애 빈도를 주기적으로 확인하고 대응 계획의 발동 조건에 도달했는지 살필 수 있다.

위험 식별은 무엇이 잘못될 수 있는지 찾아내는 활동이고, 회피는 위험을 발생시키는 활동 자체를 하지 않는 대응 방식이다. 대응은 회피·완화 등으로 위험을 다루는 더 넓은 활동이다. 감시 결과에 따라 다시 식별·평가·대응할 수 있으므로 단계가 한 번만 진행된다고 이해하지 않는다.

선지별 해설

  • ① 오답. 위험 후보와 원인 등을 찾아내는 활동이다.
  • ② 오답. 위험을 유발하는 활동을 피하는 대응 방식이다.
  • ③ 오답. 위험을 줄이거나 수용하는 조치를 결정·수행하는 활동이다.
  • ④ 정답. 상태 변화와 대응 효과를 지속적으로 추적한다.

편집 해설 근거: NIST SP 800-30 Rev.1 (2012) — §2.1 Risk Management, fourth component: monitoring

13. 상태 머신에서 한 상태에서 다른 상태로 옮겨가게 만드는 발생 사실은?

  1. 상태
  2. 이벤트
  3. 가드 조건
  4. 전이
정답과 해설 보기

정답: 2

정답은 ② 이벤트이다. 이벤트는 메시지 수신이나 시간 도달처럼 상태 머신이 반응할 수 있는 발생을 규정한다. 대기 상태에서 ‘시작 버튼을 누름’이 발생하여 실행 상태로 옮겨가는 예에서 버튼 입력이 이벤트이고, 옮겨가는 관계가 전이이다.

가드 조건은 해당 전이를 실행할 수 있는지 검사하는 논리 조건이다. 같은 이벤트가 와도 가드가 거짓이면 그 전이를 선택하지 않을 수 있다. UML에는 명시적인 외부 이벤트를 적지 않는 완료 전이도 있으므로, 모든 전이가 반드시 외부 입력 하나 때문에 일어난다는 식으로 확대하지 않는다.

선지별 해설

  • ① 오답. 특정 시점에 시스템이 처한 상황을 나타낸다.
  • ② 정답. 전이의 트리거가 반응할 수 있는 발생 사실에 해당한다.
  • ③ 오답. 전이 가능 여부를 제한하는 논리 조건이다.
  • ④ 오답. 상태 사이 이동 관계 자체를 나타내며 발생 사실의 명칭이 아니다.

편집 해설 근거: OMG UML 2.5.1 (2017) — §13.3 Events; §14.2.3.8 Transitions 및 Completion Transitions

14. SWEBOK가 설명하는 아키텍처 뷰와 뷰포인트의 역할로 옳지 않은 것은?

  1. 모든 이해관계자의 서로 다른 관심사를 하나의 표현으로 강제한다
  2. 특정 이해관계자의 관심사를 다루는 표현을 제공한다
  3. 한 아키텍처에 여러 뷰를 둘 수 있다
  4. 뷰포인트는 뷰를 구성하는 규약을 제공한다
정답과 해설 보기

정답: 1

정답은 ①이다. 아키텍처의 이해관계자는 서로 다른 관심사를 가진다. 운영자는 배치와 장애 대응, 개발자는 모듈 의존, 사용자는 기능 흐름을 중요하게 볼 수 있다. 이 모든 내용을 하나의 그림에 무조건 밀어 넣으면 오히려 이해하기 어려워진다.

뷰는 특정 관심사를 다루는 아키텍처의 표현이고, 뷰포인트는 그 뷰를 작성·해석하는 규칙과 관례이다. 여러 뷰를 사용하는 것은 서로 무관한 설계를 따로 만든다는 뜻이 아니다. 관심사에 맞게 표현을 나누되 같은 시스템에 대한 일관성을 유지해야 한다.

선지별 해설

  • ① 정답. 모든 관심사를 한 뷰로 강제하는 것이 뷰·뷰포인트의 취지는 아니다.
  • ② 오답. 이해관계자 관심사에 맞는 표현을 선택한다는 설명은 맞다.
  • ③ 오답. 복잡한 아키텍처를 여러 뷰로 표현할 수 있다.
  • ④ 오답. 뷰포인트는 작성·해석에 사용하는 관례와 규칙을 제공한다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Architecture §2.1 Architecture Views and Viewpoints, p.2-5

15. 주 컴퓨터가 처리하기 전에 통신 입력을 모아 형식 변환·오류 확인 등을 담당해 부하를 줄이는 장치는?

  1. EAI
  2. FEP
  3. GPL
  4. Duplexing
정답과 해설 보기

정답: 2

정답은 ② FEP(Front-End Processor)이다. 통신 입력을 먼저 받아 필요한 형식 처리·전송 제어 등을 수행하여 호스트의 통신 부담을 나누는 전위 처리기를 뜻한다. 구체적으로 어느 처리를 맡기는지는 시스템 구현에 따라 달라진다.

핵심은 ‘호스트 앞에서 통신 처리를 분담한다’는 역할이다. EAI는 여러 기업 응용의 통합, GPL은 소프트웨어 라이선스, 이중화는 장애에 대비해 구성요소 등을 중복 두는 방식이다. 전위 처리기를 웹 화면을 만드는 프런트엔드 개발과 같은 뜻으로 이해해서는 안 된다.

선지별 해설

  • ① 오답. Enterprise Application Integration은 기업 응용 사이 통합 개념이다.
  • ② 정답. 호스트의 통신 기능을 분담하는 전위 처리기다.
  • ③ 오답. GNU General Public License라는 소프트웨어 라이선스다.
  • ④ 오답. 구성요소를 이중으로 두는 이중화 개념이다.

편집 해설 근거: RFC 1008, Implementation Guide for the ISO Transport Protocol (1987) — §2.4 Front end processor

16. 객체와 클래스의 관계를 잘못 설명한 것은?

  1. 객체는 상태와 행동, 식별성을 가질 수 있다
  2. 객체는 공통 특성을 지닌 클래스들의 집합이다
  3. 클래스는 유사 객체의 공통 명세다
  4. 객체의 상태는 속성 값으로 표현할 수 있다
정답과 해설 보기

정답: 2

정답은 ②이다. 객체는 상태와 행동을 가진 개별 실체이며, 클래스는 그 객체들이 공통으로 갖는 구조와 행동을 정의한다. 예를 들어 자전거 클래스에 속도와 기어, 가속 동작을 정의하면 서로 다른 자전거 객체는 각각 다른 현재 속도를 가질 수 있다.

따라서 객체를 여러 클래스를 모아 놓은 집합이라고 설명하면 관계를 뒤집은 것이다. 객체의 정체성은 현재 속성값이 같은 다른 객체와도 구별될 수 있다는 뜻이다. 같은 클래스의 두 객체가 현재 상태값이 같다고 해서 반드시 하나의 객체가 되는 것은 아니다.

선지별 해설

  • ① 오답. 객체를 상태·행동·정체성으로 파악하는 설명은 맞다.
  • ② 정답. 객체는 클래스의 인스턴스로 이해하며 클래스들의 집합이 아니다.
  • ③ 오답. 클래스는 인스턴스가 공유할 구조와 행동을 정의한다.
  • ④ 오답. 객체의 상태는 특정 시점의 속성값들로 나타낼 수 있다.

편집 해설 근거: Oracle Java Tutorials (JDK 8), What Is an Object? — What Is an Object? 본문과 bicycle 예시; OMG UML 2.5.1 (2017) — §9 Classification, Classifier와 InstanceSpecification

17. 스크럼에서 스프린트 종료까지 남은 작업량을 시간 흐름에 따라 표시하는 차트는?

  1. 사용자 스토리
  2. 번다운 차트
  3. 칸반 보드
  4. 간트 차트
정답과 해설 보기

정답: 2

정답은 ② 번다운 차트이다. 가로축에 시간, 세로축에 남은 작업량을 두어 일이 얼마나 남았고 어떤 속도로 줄고 있는지 살펴보는 도구다. 완료한 양을 누적하는 번업 차트와는 세로축의 의미가 다르다.

유저 스토리는 사용자 관점의 요구 표현이고, 칸반 보드는 작업의 진행 상태와 흐름을 시각화한다. 간트 차트는 작업의 예정 기간과 일정 관계를 막대로 나타낸다. Scrum Guide 2020은 번다운 등을 유용한 예측 관행의 예로 들지만, 번다운 차트 자체를 반드시 갖춰야 하는 공식 산출물로 규정하지는 않는다.

선지별 해설

  • ① 오답. 사용자 요구·가치를 표현하는 항목이며 시간별 잔여량 그래프가 아니다.
  • ② 정답. 시간에 따른 남은 작업량을 그리는 차트다.
  • ③ 오답. 작업 카드의 상태와 흐름을 나타내는 보드다.
  • ④ 오답. 작업별 일정과 기간을 막대로 나타내는 차트다.

편집 해설 근거: Agile Alliance, Burndown Chart — What is Burndown Chart?; Schwaber·Sutherland, The Scrum Guide (2020) — The Sprint, forecast progress 단락

18. 분산된 구성요소가 중개자를 통해 위치를 찾고 원격 서비스를 호출하도록 하는 아키텍처 패턴은?

  1. Master-Slave
  2. Client-Server
  3. Pipe-Filter
  4. Broker
정답과 해설 보기

정답: 4

정답은 ④ Broker이다. 브로커는 요청하는 쪽과 서비스를 제공하는 쪽 사이에서 요청 전달 등을 중개하여 분산 구성요소의 협력을 돕는다. 클라이언트가 서버의 위치와 통신 세부를 모두 직접 다루지 않도록 하는 것이 중요한 목적이다.

CORBA의 ORB는 객체 요청을 중개하는 구체적 예이다. Master-Slave는 한 요소가 작업을 나누고 다른 요소들이 수행하는 구조, Client-Server는 서비스 요청자와 제공자의 기본 역할 구분, Pipe-Filter는 변환 단계를 연결한 흐름에 초점이 있다. Broker는 클라이언트·서버와 함께 사용될 수 있지만 질문의 결정적 단서는 중개자다.

선지별 해설

  • ① 오답. 작업을 지시·분배하는 주체와 수행 주체를 나눈 구조다.
  • ② 오답. 요청자와 제공자의 역할만으로는 중개자라는 특징을 충분히 지정하지 않는다.
  • ③ 오답. 데이터가 변환 필터와 파이프를 거치는 구조다.
  • ④ 정답. 분산 구성요소 사이의 요청과 위치 관련 세부를 중개한다.

편집 해설 근거: Oracle Tuxedo 22, ORB Software — Oracle Tuxedo ORB Software 첫 두 단락

19. 소프트웨어 설계의 대표적인 추상화 유형으로 보기 어려운 것은?

  1. 자료 추상화
  2. 제어 추상화
  3. 과정 추상화
  4. 강도 추상화
정답과 해설 보기

정답: 4

정답은 ④ 강도 추상화이다. 자료 추상화는 내부 표현 대신 자료와 허용 연산에 집중하고, 과정 추상화는 세부 단계 대신 하나의 의미 있는 절차·함수로 작업을 표현한다. 제어 추상화는 반복이나 선택처럼 동작을 어떤 순서로 실행할지 묶어 표현한다.

예를 들어 스택을 배열인지 연결 리스트인지 몰라도 push와 pop으로 사용하는 것은 자료 추상화, 정렬을 sort 함수로 부르는 것은 과정 추상화, 원소를 순회하는 반복 구조는 제어 추상화의 예다. 강도는 이 세 범주와 같은 대표 추상화 명칭이 아니다. 추상화를 단순히 내용을 흐리게 만드는 것이라고 이해하지 않는다.

선지별 해설

  • ① 오답. 자료의 표현 방식과 사용 연산을 분리하는 대표 추상화다.
  • ② 오답. 선택·반복 등 실행 순서의 세부를 묶어 표현하는 추상화다.
  • ③ 오답. 작업 절차를 하나의 의미 있는 연산으로 표현하는 추상화다.
  • ④ 정답. 제시된 소프트웨어 추상화의 대표 범주에 해당하지 않는다.

편집 해설 근거: MIT Laboratory for Computer Science, Programming Methodology Group Progress Report 1975–76, Memo 150 (1977) — p.3, procedural·control·data abstractions 및 스택 예시

20. SWEBOK가 설명하는 소프트웨어 설계 원칙과 직접 관계가 가장 먼 것은?

  1. 관심사 분리
  2. 정보 은닉
  3. 운영 후 유지보수 비용 집계
  4. 모듈화
정답과 해설 보기

정답: 3

정답은 ③ 운용 유지보수 비용 집계이다. 관심사 분리, 정보 은닉, 모듈화는 소프트웨어를 어떻게 나누고 경계를 정할지 안내하는 설계 원칙이다. 각각 따로 이해할 문제를 구분하고, 불필요한 내부 세부를 감추고, 명확한 인터페이스를 가진 단위로 구성하는 데 도움을 준다.

비용 집계는 운용·유지보수에 드는 금액을 모으고 분석하는 경제·관리 활동이다. 설계 선택이 유지보수 비용에 영향을 줄 수 있고 비용이 중요한 판단 기준인 것은 맞지만, 비용을 집계하는 활동 자체가 나머지 세 가지와 같은 설계 원칙이 되는 것은 아니다.

선지별 해설

  • ① 오답. 서로 다른 관심사를 분리하여 복잡성을 관리하는 설계 원칙이다.
  • ② 오답. 사용자에게 불필요한 내부 구현 정보를 감추는 설계 원칙이다.
  • ③ 정답. 비용을 측정·분석하는 활동이며 제시된 설계 원칙의 범주와 다르다.
  • ④ 오답. 소프트웨어를 명확한 역할과 인터페이스를 가진 단위로 나눈다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Design §1.4 Software Design Principles

정보처리기사 필기 기출문제 · 소프트웨어 개발

21. 배열 8, 3, 6, 2, 5를 버블 정렬로 오름차순 정렬한다. 왼쪽부터 인접한 두 값을 비교해 큰 값을 오른쪽으로 보내는 첫 번째 전체 통과 직후의 배열은?

[학습용 개정문항]

  1. 3, 8, 6, 2, 5
  2. 2, 3, 6, 8, 5
  3. 3, 6, 8, 2, 5
  4. 3, 6, 2, 5, 8
정답과 해설 보기

정답: 4

정답은 ④ 3, 6, 2, 5, 8이다. 왼쪽부터 이웃한 두 값을 비교하여 큰 값을 오른쪽으로 보내는 한 통과를 수행한다. 8과 3을 바꾸면 3, 8, 6, 2, 5가 되고, 다음에 8과 6을 바꾸면 3, 6, 8, 2, 5가 된다. 이어 8과 2, 8과 5를 차례로 바꾸면 3, 6, 2, 5, 8이다.

첫 통과에서 최댓값 8의 마지막 위치가 정해지지만 나머지 부분까지 정렬되는 것은 아니다. 한 번의 교환을 한 통과로 세면 ①을 고르기 쉽다. 버블 정렬은 반대 방향으로 순회할 수도 있으므로, 이 개정 문항에는 순회 방향을 명시했다.

선지별 해설

  • ① 오답. 첫 번째 인접 비교·교환 직후이며 전체 통과가 아니다.
  • ② 오답. 지정한 방향의 네 번 비교 결과가 아니다.
  • ③ 오답. 두 번째 인접 비교까지 수행한 중간 배열이다.
  • ④ 정답. 첫 전체 통과 후 최댓값 8이 오른쪽 끝에 놓인다.

편집 해설 근거: NIST DADS — bubble sort — Definition; pass와 마지막 위치 확정에 관한 Note

22. 중위식 (P-Q)×R+S÷T를 후위식으로 올바르게 바꾼 것은?

  1. P Q R – × S T ÷ +
  2. P Q – R × S T ÷ +
  3. P Q – R S × T ÷ +
  4. P Q R × – S T + ÷
정답과 해설 보기

정답: 2

정답은 ② P Q – R × S T ÷ +이다. 후위식은 연산자를 그 연산의 두 피연산자 뒤에 놓는다. 먼저 괄호의 P-Q는 P Q -이고, 그 결과에 R을 곱하므로 P Q – R ×가 된다. 오른쪽 S÷T는 S T ÷이며 두 결과를 더하는 +가 맨 뒤에 온다.

따라서 전체는 [P Q – R ×] [S T ÷] +이다. 왼쪽부터 계산할 때 피연산자는 스택에 넣고 연산자를 만나면 오른쪽·왼쪽 피연산자 순서로 꺼내 계산한다. 특히 뺄셈과 나눗셈은 꺼낸 두 값의 순서를 바꾸면 의미가 달라진다.

선지별 해설

  • ① 오답. Q-R을 먼저 계산하여 원래의 P-Q와 다르다.
  • ② 정답. (P-Q)×R과 S÷T를 각각 만든 다음 합한다.
  • ③ 오답. R과 S를 먼저 곱하여 식의 묶음이 달라진다.
  • ④ 오답. Q×R을 P에서 빼고 S+T로 나누는 다른 계산 구조다.

편집 해설 근거: GNU dc manual — reverse Polish notation — GNU dc manual, introduction 및 Arithmetic

23. W3C ODRL 권리 정책 모델이 직접 표현하려는 대상으로 보기 어려운 것은?

  1. 분석용 데이터 마트의 집계 스키마
  2. 자산에 허용되는 행위
  3. 자산에 금지되는 행위
  4. 허가에 붙는 의무
정답과 해설 보기

정답: 1

정답은 ① 분석용 데이터 마트의 집계 스키마이다. ODRL은 자산의 이용에 관한 허용, 금지, 의무 등을 표현하는 권리 정책 모델이다. 예를 들어 어떤 사진을 표시할 수 있는지, 재배포를 금지하는지, 이용하려면 출처 표시나 지불 같은 의무가 있는지를 표현한다.

집계 스키마는 데이터를 어떤 차원과 측정값으로 묶어 분석할지 정하는 데이터 구조 문제이다. 데이터 마트 자체를 ODRL 정책의 자산으로 삼을 수는 있지만, 집계 테이블의 구조를 설계하는 것이 ODRL의 직접 목적은 아니다. 모델이 가리키는 자산과 모델이 표현하는 권리 내용을 구분한다.

선지별 해설

  • ① 정답. 분석용 테이블의 집계 구조는 권리 정책 모델의 직접 표현 대상이 아니다.
  • ② 오답. Permission은 자산에 허용되는 행위를 표현한다.
  • ③ 오답. Prohibition은 자산에 금지되는 행위를 표현한다.
  • ④ 오답. Duty는 허가에 붙는 의무 등을 표현할 수 있다.

편집 해설 근거: W3C Recommendation — ODRL Information Model 2.2 — §1 Introduction; §2 ODRL Information Model, Permission·Prohibition·Duty

24. 아래 함수에 (15,15)와 (5,15)를 각각 입력했다. 두 if가 만드는 네 분기 결과 중 실행된 비율은?

int g(int a,int b){ int r=0; if(a>10) r++; if(b>10) r+=2; else r--; return r; }
  1. 50%
  2. 75%
  3. 80%
  4. 100%
정답과 해설 보기

정답: 2

정답은 ② 75%이다. 두 if에는 각각 참과 거짓의 결과가 있으므로 분기 결과는 모두 네 개다. (15,15)를 넣으면 a>10과 b>10이 모두 참이다. (5,15)를 넣으면 첫 조건은 거짓, 둘째 조건은 참이다. 서로 다른 실행 결과를 합치면 첫 if의 참·거짓과 둘째 if의 참, 총 세 개를 실행했다.

따라서 3÷4×100=75%이다. 같은 분기를 두 번 통과해도 새 분기를 하나 더 덮은 것으로 세지 않는다. 첫 if에 else가 없어도 거짓 경로는 존재한다. 둘째 if의 거짓 경로를 실행하는 입력을 추가해야 이 네 분기 결과 기준으로 100%가 된다.

선지별 해설

  • ① 오답. 두 테스트 실행 수나 한 테스트에서 간 경로만으로 비율을 정하지 않는다.
  • ② 정답. 서로 다른 분기 결과 네 개 중 세 개를 실행했다.
  • ③ 오답. 분모는 문장 수가 아니라 네 분기 결과다.
  • ④ 오답. b>10이 거짓인 분기는 한 번도 실행하지 않았다.

편집 해설 근거: ISTQB CTFL Syllabus 2018 v3.1.1 — §4.3.2 Decision Testing and Coverage; §4.3.3

25. 변경 가능성이 큰 구현 세부를 모듈 내부에 감추고 공개 인터페이스만 노출하는 원리는?

  1. 정보 은닉
  2. 분할 정복
  3. 자료 정렬
  4. 원형 큐
정답과 해설 보기

정답: 1

정답은 ① 정보 은닉이다. 모듈을 사용하는 쪽에는 필요한 인터페이스를 공개하고, 바뀔 수 있는 자료 표현이나 알고리즘 같은 내부 결정을 감춘다. 예를 들어 저장 모듈의 내부를 파일에서 DB로 바꾸더라도 공개된 저장·조회 계약을 유지하면 호출자의 변경을 줄일 수 있다.

정보 은닉은 단순히 소스 코드를 비공개로 배포한다거나 모든 필드를 암호화한다는 뜻이 아니다. 설계에서 변경의 영향을 경계 안에 가두려는 원리다. 분할 정복은 문제를 작은 부분으로 나누어 해결하는 전략이고, 자료 정렬과 원형 큐는 각각 알고리즘 작업과 자료구조에 해당한다.

선지별 해설

  • ① 정답. 내부 구현 결정을 감추고 필요한 인터페이스를 노출한다.
  • ② 오답. 문제를 분해해 부분 해를 결합하는 해결 전략이다.
  • ③ 오답. 데이터를 정해진 순서로 배치하는 작업이다.
  • ④ 오답. 배열 끝과 처음을 연결해 사용하는 큐 구현 방식이다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Design §1.4, Encapsulation 및 Separation of interface and implementation

26. 시험 실행 결과가 요구된 결과와 일치하는지 판정해 통과·실패 결론을 내리는 기준 또는 주체는?

  1. 테스트 오라클
  2. 테스트 드라이버
  3. 테스트 스텁
  4. 테스트 하네스
정답과 해설 보기

정답: 1

정답은 ① 테스트 오라클이다. 테스트에 입력을 주고 결과를 얻는 것만으로는 올바르게 동작했는지 알 수 없다. 실제 결과를 기대 결과나 규칙과 비교하여 맞고 틀림을 판정하는 기준·수단이 오라클이다. 명확한 요구 명세, 참조 구현, 전문가 판단 등이 그 역할을 할 수 있다.

드라이버는 피시험 코드를 호출하고, 스텁은 아직 연결하지 않은 하위 기능을 대신한다. 하네스는 시험 실행을 위한 전체 지원 환경에 가깝다. 자동 테스트 도구를 갖추었더라도 무엇을 올바른 결과로 볼지 결정하지 못하면 오라클 문제는 남는다.

선지별 해설

  • ① 정답. 관찰한 결과의 올바름과 통과·실패를 판정한다.
  • ② 오답. 피시험 모듈에 입력을 주어 호출하는 역할이다.
  • ③ 오답. 피시험 모듈이 호출하는 의존 기능을 대신하는 역할이다.
  • ④ 오답. 시험 실행을 지원하는 환경·도구 묶음이며 판정 기준 자체와 다르다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Testing §1.2.7 The Oracle Problem, p.5-5

27. 상향식 단위 통합 시험에서 아직 없는 상위 호출 모듈을 대신해 피시험 모듈을 호출하는 가상 모듈은?

  1. 스텁
  2. 드라이버
  3. 테스트 슈트
  4. 테스트 데이터
정답과 해설 보기

정답: 2

정답은 ② 드라이버이다. 상향식 통합은 낮은 수준의 모듈부터 묶어 시험하므로 그 모듈을 호출해 줄 상위 코드가 아직 없을 수 있다. 이때 입력을 전달하고 호출 결과를 받는 시험용 상위 코드를 드라이버라고 한다.

반대로 상위 모듈은 있지만 호출될 하위 모듈이 없으면 하위 동작을 흉내 내는 스텁을 둔다. 예를 들어 결제 계산 함수를 직접 호출하는 임시 main은 드라이버 역할이고, 계산 함수가 호출하는 아직 없는 요율 조회 함수를 고정 응답으로 대체하면 스텁 역할이다. 위치 이름보다 누가 누구를 호출하는지로 판단한다.

선지별 해설

  • ① 오답. 호출을 받는 하위 의존 모듈을 대신한다.
  • ② 정답. 상위 호출자 대신 피시험 모듈을 호출한다.
  • ③ 오답. 함께 실행할 테스트 케이스들의 묶음이다.
  • ④ 오답. 시험에 사용하는 입력값 등의 데이터다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Testing §8.2 Categories of Tools, Test harnesses; Software Construction §3.7 Integration

28. 입력 크기 n이 커져도 기본 연산 횟수가 일정한 알고리즘에 대해, 보기 중 증가 차수가 가장 작은 점근적 시간 상한은?

[학습용 개정문항]

  1. O(1)
  2. O(log n)
  3. O(n)
  4. O(n²)
정답과 해설 보기

정답: 1

정답은 ① O(1)이다. 입력 크기 n이 커져도 기본 연산을 일정한 횟수만 수행하면 상수 시간으로 나타낸다. 예를 들어 이미 확보된 배열에서 한 위치의 값을 읽는 연산은 다른 조건이 같다면 전체 배열 길이에 비례해 모든 원소를 훑을 필요가 없다.

O 표기는 충분히 큰 n에서의 상한이므로 상수 함수는 수학적으로 O(n) 같은 느슨한 상한에도 속한다. 이 문항은 보기 중 증가 차수가 가장 작은 상한을 묻는다고 명시했다. O(log n), O(n), O(n²)는 각각 로그·선형·제곱 증가를 비교할 때 쓰는 대표 표기다. O(1)이 항상 1초 또는 명령 한 번이라는 뜻은 아니다.

선지별 해설

  • ① 정답. n에 무관한 일정 횟수에 대해 보기 중 가장 작은 차수의 상한이다.
  • ② 오답. 더 느슨한 상한일 수 있으나 가장 작은 차수의 선택이 아니다.
  • ③ 오답. 선형 상한보다 상수 상한으로 더 정확히 제한할 수 있다.
  • ④ 오답. 제곱 상한은 이 조건에 지나치게 느슨하다.

편집 해설 근거: NIST DADS — Big-O notation — Definition의 asymptotic upper bound 및 Note

29. 소프트웨어 형상관리에 대한 설명으로 틀린 것은?

  1. 변경과 버전을 식별하고 통제한다
  2. 문서·코드·테스트 산출물이 관리 대상이 될 수 있다
  3. Ant·Maven·Gradle은 대표적인 형상관리 저장소다
  4. 개발과 유지보수 전 과정에서 활용할 수 있다
정답과 해설 보기

정답: 3

정답은 ③이다. 형상관리는 코드뿐 아니라 요구 문서, 설계, 테스트 등 관리 대상의 상태와 버전을 식별하고 변경을 통제·추적하는 활동이다. 버전 관리 저장소는 그 활동을 지원하는 수단 중 하나이지 형상관리의 전부는 아니다.

Ant, Maven, Gradle은 주로 컴파일·시험·패키징 등을 구성하고 실행하는 빌드 도구다. Git 등의 저장소와 연동할 수 있고 빌드 과정도 형상관리와 관련되지만, 세 도구 자체를 대표적인 형상관리 저장소라고 부르면 범주가 틀린다. 특히 Maven 저장소의 라이브러리 보관 기능과 소스 변경 이력을 관리하는 저장소를 혼동하지 않는다.

선지별 해설

  • ① 오답. 관리 대상의 상태와 변경을 식별·통제하는 설명은 맞다.
  • ② 오답. 문서·코드·시험 산출물도 형상 항목으로 관리할 수 있다.
  • ③ 정답. 세 이름은 빌드 도구이며 소스 버전 관리 저장소의 이름이 아니다.
  • ④ 오답. 형상관리는 개발 후 유지보수 단계에도 필요하다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Configuration Management, Introduction 및 §2 Software Configuration Identification; Apache Ant User Manual, Introduction — Introduction; Apache Maven, What is Maven? — Maven’s Objectives; Providing a uniform build system; Gradle Build Tool, project introduction (2026-10-05 확인) — Gradle Build Tool 소개

30. 모든 입력 조합 대신 각 인자 값의 쌍이 적어도 한 번 나타나도록 시험 조합을 줄이는 기법은?

  1. 분류 트리 시험
  2. 유스케이스 시험
  3. 페어와이즈 시험
  4. 상태 전이 시험
정답과 해설 보기

정답: 3

정답은 ③ 페어와이즈 시험이다. 서로 다른 입력 인자 두 개를 고를 때 가능한 값의 조합이 시험 집합 안에 한 번 이상 등장하도록 케이스를 구성한다. 예를 들어 브라우저·운영체제·언어가 있다면 브라우저–운영체제, 브라우저–언어, 운영체제–언어의 값 쌍을 모두 덮도록 한다.

모든 인자의 전체 조합을 실행하는 것보다 케이스를 줄일 수 있지만 모든 결함을 찾는 보장은 아니다. 세 개 이상의 인자가 함께 특정 값을 가질 때만 드러나는 결함은 놓칠 수 있다. 두 입력값만 시험한다는 뜻이 아니라 여러 인자의 모든 두 인자 조합을 대상으로 한다는 점이 핵심이다.

선지별 해설

  • ① 오답. 입력 공간을 분류와 선택 조합으로 구조화하는 방식이며 모든 값 쌍 보장과 동일하지 않다.
  • ② 오답. 사용자의 목표와 시나리오에서 테스트를 도출한다.
  • ③ 정답. 서로 다른 두 인자의 값 조합을 빠짐없이 포함하도록 구성한다.
  • ④ 오답. 시스템의 상태와 전이에서 테스트를 도출한다.

편집 해설 근거: NIST ACTS — combinatorial methods — Interactions Involved in Software Failures, pairwise 및 2-way 설명

31. 큐에 대한 설명으로 틀린 것은?

  1. 삽입과 삭제가 서로 다른 쪽에서 일어난다
  2. 후입선출 구조다
  3. 삭제 쪽을 Front라 부른다
  4. 삽입 연산은 Rear에 원소를 더한다
정답과 해설 보기

정답: 2

정답은 ② 후입선출 구조라는 설명이다. 일반적인 큐는 먼저 들어온 원소가 먼저 나가는 FIFO 구조이다. 삽입하는 쪽을 rear, 삭제하는 쪽을 front라고 부른다. A, B, C를 차례로 넣었다면 일반 큐에서는 A, B, C 순으로 꺼낸다.

후입선출 LIFO는 마지막에 들어간 C를 먼저 꺼내는 스택의 대표 성질이다. 원형 큐는 배열 공간을 순환해 사용하는 구현이지만 FIFO 순서는 유지한다. 우선순위 큐나 양방향 큐처럼 별도 규칙을 갖는 자료구조가 있으므로, 여기서는 문항이 지정한 기본 큐의 동작을 판단한다.

선지별 해설

  • ① 오답. 기본 큐는 rear 삽입과 front 삭제를 구분한다.
  • ② 정답. 후입선출은 스택의 성질이며 기본 큐는 선입선출이다.
  • ③ 오답. 삭제가 이루어지는 쪽을 front라고 부른다.
  • ④ 오답. 새 원소는 rear 쪽에 추가한다.

편집 해설 근거: NIST DADS — queue — Definition 및 enqueue·dequeue의 설명

32. 한 모듈만 고립해 수행하는 단위 시험으로 직접 확인하기 가장 어려운 결함은?

  1. 서로 다른 두 모듈의 실제 연동 계약 불일치
  2. 반복문 종료 조건 오류
  3. 모듈 내부 계산식 오류
  4. 지역 변수 초기화 오류
정답과 해설 보기

정답: 1

정답은 ① 실제 두 모듈의 연동 계약 불일치이다. 한 모듈을 고립해 시험하면 그 내부 반복문, 계산식, 초기화 등은 직접 실행하고 관찰할 수 있다. 그러나 실제 상대 모듈을 함께 연결하지 않으면 양쪽이 서로 다르게 이해한 데이터 형식이나 호출 순서 문제를 직접 확인하기 어렵다.

예를 들어 한쪽은 금액을 원 단위 정수로 보내는데 다른 쪽은 소수 단위로 해석한다면 실제 연동 시험이 중요하다. 모의 객체와 계약 테스트로 이 위험을 줄일 수는 있지만, 모의 객체가 잘못된 가정을 그대로 따라 만들었다면 단위 시험이 통과해도 통합이 실패할 수 있다.

선지별 해설

  • ① 정답. 실제 두 모듈의 상호작용은 고립된 한 모듈만으로 직접 검증하기 어렵다.
  • ② 오답. 모듈 내부 루프에 입력을 주어 종료 조건을 관찰할 수 있다.
  • ③ 오답. 계산 결과를 기대값과 비교해 내부 계산을 확인할 수 있다.
  • ④ 오답. 초기화와 사용 경로를 실행하여 모듈 내부 결함을 확인할 수 있다.

편집 해설 근거: ISTQB CTFL Syllabus 2018 v3.1.1 — §2.2.1 Component Testing; §2.2.2 Integration Testing

33. 테스트 케이스 명세의 일반 구성 항목으로 보기 어려운 것은?

  1. 입력 데이터
  2. 수행 조건
  3. 예상 결과
  4. 프로젝트 총개발비
정답과 해설 보기

정답: 4

정답은 ④ 프로젝트 총개발비이다. 테스트 케이스는 어떤 조건에서 어떤 입력과 절차를 실행하고 무엇을 기대하는지 명확히 해야 한다. 그래야 다른 사람이 같은 시험을 재현하고 실제 결과와 예상 결과를 비교할 수 있다.

예를 들어 ‘로그인 실패’라는 제목만 쓰기보다 계정 상태, 입력한 비밀번호, 실행 순서, 기대 메시지와 접근 거부 여부를 적는 방식이다. 총개발비는 프로젝트의 예산·관리 정보로 유용하지만 개별 케이스의 수행 조건과 통과 판단을 정의하는 일반 구성 요소는 아니다. 양식별로 추가 메타데이터가 있다는 사실과 핵심 구성은 구별한다.

선지별 해설

  • ① 오답. 시험을 실행할 입력값이 필요하다.
  • ② 오답. 사전조건·환경 등 수행 조건이 필요하다.
  • ③ 오답. 결과를 판정할 예상 결과가 필요하다.
  • ④ 정답. 프로젝트 예산 정보이며 일반적인 개별 테스트 케이스 구성 항목이 아니다.

편집 해설 근거: ISTQB CTFL Syllabus 2018 v3.1.1 — §1.4.2 Test design; §1.4.3 Test Work Products

34. 검색 키를 더 작은 범위의 정수 주소로 매핑해 해시 테이블의 위치를 정하는 것은?

  1. 선택 정렬
  2. 해시 함수
  3. 후위 순회
  4. 원형 큐
정답과 해설 보기

정답: 2

정답은 ② 해시 함수이다. 검색 키를 해시 테이블의 주소나 버킷을 선택하는 값으로 대응시키는 함수다. 예를 들어 정수 키를 10으로 나눈 나머지를 주소로 쓰면 27은 7번 위치로 대응된다. 빠른 탐색을 위해 긴 키 전체를 순서대로 비교하는 일을 줄이는 데 사용한다.

가능한 키 수가 주소 수보다 많으면 서로 다른 키가 같은 주소로 갈 수 있다. 이를 충돌이라고 하며 체이닝이나 개방 주소법 같은 별도의 처리 방법이 필요하다. 해시 함수라는 이름만으로 충돌이 없거나 암호학적으로 안전하다는 뜻은 아니다. 정렬·순회·큐는 이 키-주소 변환과 다른 역할이다.

선지별 해설

  • ① 오답. 남은 원소의 최소값 등을 골라 순서대로 배치하는 정렬이다.
  • ② 정답. 키를 테이블 위치를 정하는 해시 값으로 사상한다.
  • ③ 오답. 트리의 자식들을 먼저 방문하는 순회 방식이다.
  • ④ 오답. FIFO 큐를 순환 공간으로 구현하는 방식이다.

편집 해설 근거: NIST DADS, hash function — Definition 및 hash table 관련 설명

35. 클린 코드 원칙에 어긋나는 것은?

  1. 의도가 드러나는 이름을 사용한다
  2. 같은 로직을 가능한 많이 복제한다
  3. 함수의 책임을 작게 유지한다
  4. 불필요한 복잡성을 줄인다
정답과 해설 보기

정답: 2

정답은 ② 같은 로직을 가능한 많이 복제한다는 설명이다. 같은 규칙이 여러 위치에 복제되면 변경 때 일부만 고치기 쉽고, 버그 수정도 여러 곳에서 반복해야 한다. 의미가 같은 책임은 적절한 함수나 모듈로 모아 관리하면 일관성을 유지하기 쉽다.

의도가 드러나는 이름과 이해할 수 있는 작은 책임, 불필요한 복잡성 감소는 코드를 읽고 고치기 위한 방향이다. 다만 모양이 비슷하다는 이유만으로 모든 코드를 성급하게 공통화하면 오히려 복잡해질 수 있다. 이 문제는 무조건적인 중복 확대가 원칙이라는 주장이 잘못되었는지를 묻는다.

선지별 해설

  • ① 오답. 역할과 의도가 읽히는 이름은 이해를 돕는다.
  • ② 정답. 같은 변경을 여러 곳에 반복해야 하므로 중복을 목표로 늘리는 것은 부적절하다.
  • ③ 오답. 명확한 작은 책임은 함수의 이해와 변경을 돕는다.
  • ④ 오답. 요구에 불필요한 복잡성을 줄이는 방향은 타당하다.

편집 해설 근거: Google Engineering Practices, What to look for in a code review — Complexity; Naming; Ron Jeffries, What is Extreme Programming? (2011) — Design Improvement (Refactoring)

36. 이진 탐색 트리의 일반 규칙으로 틀린 것은?

[학습용 개정문항]
서로 다른 키만 저장하는 기본 이진 탐색 트리를 기준으로 한다.

  1. 각 노드는 최대 두 자식을 가진다
  2. 왼쪽 부분트리 키는 부모보다 작다
  3. 오른쪽 부분트리 키는 부모보다 크다
  4. 큰 키는 반드시 왼쪽 자식으로 삽입한다
정답과 해설 보기

정답: 4

정답은 ④이다. 이 문항은 서로 다른 키를 가진 기본 이진 탐색 트리를 기준으로 한다. 각 노드에 대해 왼쪽 부분트리의 모든 키는 그 노드보다 작고, 오른쪽 부분트리의 모든 키는 크다. 큰 키를 반드시 왼쪽 자식에 넣는다는 설명은 이 순서 규칙과 반대이다.

예를 들어 루트가 10이면 6은 왼쪽 방향, 14는 오른쪽 방향으로 탐색하며 삽입 위치를 찾는다. ‘왼쪽 자식 하나’만 비교하는 것이 아니라 부분트리 전체가 경계 조건을 만족해야 한다. 중복 키를 허용하는 구현은 별도 배치 규칙이 필요하므로 학습 조건을 명시했다.

선지별 해설

  • ① 오답. 이진 트리의 각 노드는 최대 두 자식을 갖는다.
  • ② 오답. 중복 없는 키 조건에서 왼쪽 부분트리의 키는 더 작다.
  • ③ 오답. 중복 없는 키 조건에서 오른쪽 부분트리의 키는 더 크다.
  • ④ 정답. 큰 키는 오른쪽 방향으로 배치해야 하므로 규칙과 반대다.

편집 해설 근거: NIST DADS — binary search tree — Definition

37. IPsec에 대한 설명으로 옳지 않은 것은?

  1. 암호화에 단방향 해시만 사용할 수 있다
  2. ESP는 기밀성과 무결성·인증 서비스를 제공할 수 있다
  3. 전송 모드와 터널 모드가 있다
  4. AH는 무결성과 데이터 출처 인증을 제공한다
정답과 해설 보기

정답: 1

정답은 ①이다. 단방향 해시만으로 원문을 복원 가능한 형태로 암호화할 수는 없다. IPsec은 IP 계층에서 보안 서비스를 제공하는 체계이며, AH와 ESP는 서로 다른 기능을 갖는 보안 프로토콜이다.

AH는 무결성과 데이터 출처 인증 등을 제공하지만 기밀성을 위한 암호화를 제공하지 않는다. ESP는 설정과 알고리즘에 따라 기밀성, 무결성·인증 서비스를 제공할 수 있다. 전송 모드는 주로 원래 IP 패킷의 상위 계층 부분을 보호하고, 터널 모드는 내부 IP 패킷을 캡슐화한다. 해시·인증과 복호화 가능한 암호화를 같은 동작으로 외우지 않는다.

선지별 해설

  • ① 정답. IPsec 암호화를 단방향 해시만으로 한다는 설명은 틀리다.
  • ② 오답. ESP는 기밀성 및 무결성·인증 서비스를 제공할 수 있다.
  • ③ 오답. IPsec에는 전송 모드와 터널 모드가 있다.
  • ④ 오답. AH의 대표 서비스는 무결성과 데이터 출처 인증이다.

편집 해설 근거: IETF RFC 4301 — IPsec architecture — §3.2 How IPsec Works; §4.1 Definition and Scope

38. 개발자 환경에서 사용자가 개발자와 함께 통제된 조건으로 수행하는 인수 시험은?

  1. 동치분할 시험
  2. 회귀 시험
  3. 알파 시험
  4. 베타 시험
정답과 해설 보기

정답: 3

정답은 ③ 알파 시험이다. 이 문항의 결정적 조건은 개발 조직의 환경에서 사용자가 참여해 통제된 방식으로 시험한다는 것이다. 알파 시험에서는 실제 사용을 가정한 평가로 제품을 외부에 넓게 제공하기 전 문제를 확인한다.

베타 시험은 잠재·실제 사용자 등이 자신의 환경에서 제품을 사용하며 평가하는 형태로 구별한다. 동치분할은 입력 영역을 대표값으로 나누는 테스트 설계 기법이고, 회귀 시험은 변경으로 기존 기능이 손상되지 않았는지를 확인하는 목적이다. 시험 장소·참여자와 케이스 설계 기법·시험 목적은 서로 다른 분류 축이다.

선지별 해설

  • ① 오답. 입력을 동치 집합으로 나누는 케이스 설계 기법이다.
  • ② 오답. 변경 후 기존 기능의 영향 여부를 확인하는 시험 목적이다.
  • ③ 정답. 개발 조직의 환경에서 사용자 등과 수행하는 인수 시험에 해당한다.
  • ④ 오답. 사용자의 자체 환경에서 수행하는 형태와 구별된다.

편집 해설 근거: ISTQB CTFL Syllabus 2018 v3.1.1 — §2.2.4 Acceptance Testing, Alpha and beta testing

39. 시스템 간 메시지 교환에 널리 쓰이는 데이터 표현 형식이 아닌 것은?

  1. AJTML
  2. JSON
  3. XML
  4. YAML
정답과 해설 보기

정답: 1

정답은 ① AJTML이다. JSON, XML, YAML은 구조화된 데이터를 표현하는 공개 명세가 있는 형식이다. JSON은 객체와 배열 같은 구조, XML은 요소와 속성의 마크업, YAML은 사람이 읽기 쉬운 직렬화를 제공한다.

AJTML은 이 보기에서 널리 쓰이는 데이터 교환 형식으로 제시할 근거가 없는 용어이다. 이를 모든 곳에서 절대 존재하지 않는 문자열이라고 증명하는 문제가 아니라, 나머지 세 형식의 확립된 명세와 용도를 구별하는 문제다. 서로 다른 형식을 사용하면 동일 데이터를 표현하더라도 구문과 자료형 규칙이 달라 변환 시 확인이 필요하다.

선지별 해설

  • ① 정답. 보기의 다른 세 가지처럼 통용되는 데이터 교환 형식으로 제시된 명칭이 아니다.
  • ② 오답. JSON은 RFC 8259에 규정된 데이터 교환 형식이다.
  • ③ 오답. XML은 W3C의 구조화된 문서·데이터 표현 명세가 있다.
  • ④ 오답. YAML은 공개 명세가 있는 데이터 직렬화 언어다.

편집 해설 근거: IETF RFC 8259 — JSON — §1 Introduction; W3C Recommendation — XML 1.0 — §1 Introduction; YAML 1.2.2 specification — §1.1 Goals

40. 배열 42, 18, 35, 9, 27에 최소값 선택 정렬을 적용한다. 매 회전마다 미정렬 구간의 최솟값을 그 구간의 첫 값과 교환할 때 3회전 뒤 배열은?

[학습용 개정문항]

  1. 9, 18, 35, 42, 27
  2. 9, 18, 42, 35, 27
  3. 9, 18, 27, 42, 35
  4. 18, 9, 27, 35, 42
정답과 해설 보기

정답: 3

정답은 ③ 9, 18, 27, 42, 35이다. 각 회전에서 아직 정렬되지 않은 구간의 최솟값을 그 구간의 첫 값과 교환한다. 처음에는 9를 42와 바꾸어 9, 18, 35, 42, 27이 된다. 두 번째 구간의 최솟값 18은 이미 제자리에 있어 배열이 그대로다.

세 번째 구간 35, 42, 27의 최솟값은 27이므로 35와 바꾸어 9, 18, 27, 42, 35가 된다. 교환이 없는 두 번째 회전도 최솟값을 찾는 한 회전으로 센다. ‘최소값을 이동’하는 구현이 교환인지 삽입 이동인지에 따라 뒤쪽 상태가 달라질 수 있어 교환 규칙을 명시했다.

선지별 해설

  • ① 오답. 첫 회전과 두 번째 회전 뒤의 배열이다.
  • ② 오답. 세 번째 회전이면 27이 세 번째 위치에 와야 한다.
  • ③ 정답. 세 번째 최솟값 27을 35와 교환한 결과다.
  • ④ 오답. 첫 회전에 9가 맨 앞에 확정된다는 조건과 다르다.

편집 해설 근거: NIST DADS — selection sort — Definition; Note의 in-place swapping

정보처리기사 필기 기출문제 · 데이터베이스 구축

41. PostgreSQL의 트랜잭션 격리 수준 표에서 Read Committed 수준에 발생 가능하다고 표시된 현상은?

  1. Dirty Read
  2. 항상 Serializable
  3. Nonrepeatable Read
  4. 모든 Serialization Anomaly 차단
정답과 해설 보기

정답: 3

정답은 ③ Nonrepeatable Read(비반복 읽기)이다. PostgreSQL의 Read Committed에서는 한 명령이 시작할 때 보이는 커밋된 데이터를 읽는다. 같은 트랜잭션 안에서 조회를 다시 실행하기 전에 다른 트랜잭션이 값을 바꾸고 커밋하면 두 조회의 결과가 달라질 수 있다.

예를 들어 처음 읽은 잔액이 100이고 다른 트랜잭션의 커밋 뒤 다시 읽은 잔액이 80이라면 비반복 읽기이다. 아직 커밋하지 않은 값을 읽는 Dirty Read는 이 수준에서 허용하지 않는다. 그렇다고 모든 실행이 직렬화 가능해지는 것은 아니며, 서로 다른 시점의 명령이 읽는 상태 차이를 함께 고려해야 한다.

선지별 해설

  • ① 오답. PostgreSQL Read Committed는 미커밋 변경을 읽지 않는다.
  • ② 오답. Read Committed가 항상 Serializable과 같은 보장을 주는 것은 아니다.
  • ③ 정답. 두 명령 사이의 다른 트랜잭션 커밋으로 읽은 값이 달라질 수 있다.
  • ④ 오답. 이 수준은 모든 직렬화 이상을 차단하지 않는다.

편집 해설 근거: PostgreSQL 18 — Transaction Isolation — §13.2, Table 13.1 Transaction Isolation Levels; §13.2.1 Read Committed

42. 판매(고객, 금액)에 A: 1200·800, B: 500·700·300, C: 2500 한 건이 있다. 다음 SQL 결과는?

SELECT 고객, SUM(금액) FROM 판매 GROUP BY 고객 HAVING COUNT(*) >= 2;
  1. A 2000, B 1500
  2. A 2000, B 1500, C 2500
  3. B 1500만 반환
  4. A 1200, B 700
정답과 해설 보기

정답: 1

정답은 ① A 2000, B 1500이다. GROUP BY 고객은 같은 고객의 행을 하나의 그룹으로 묶는다. A 그룹은 두 행의 합이 1200+800=2000이고, B 그룹은 세 행의 합이 500+700+300=1500이다. C 그룹은 합이 2500이지만 행이 한 개뿐이다.

HAVING COUNT(*) >= 2는 그룹을 만든 다음 각 그룹의 행 수를 검사하므로 C를 제외한다. WHERE가 개별 입력 행을 거르는 것과 구별한다. 또한 ORDER BY가 없으므로 A와 B의 출력 순서는 보장되지 않는다. 보기의 핵심은 반환되는 두 고객과 각각의 합계이다.

선지별 해설

  • ① 정답. 행 수가 2 이상인 A·B의 합계가 각각 2000·1500이다.
  • ② 오답. C는 한 행뿐이므로 HAVING 조건을 통과하지 못한다.
  • ③ 오답. A도 두 행으로 COUNT(*) >= 2를 만족한다.
  • ④ 오답. SUM은 임의의 원래 행 값이 아니라 그룹 전체 금액을 더한다.

편집 해설 근거: PostgreSQL 18 — Aggregate Functions tutorial — §2.7 Aggregate Functions, GROUP BY·HAVING 예시

43. ER 다이어그램의 기호와 의미가 잘못 연결된 것은?

[학습용 개정문항]
사각형·타원·마름모를 사용하는 전통적인 ER 표기 관례를 기준으로 한다.

  1. 사각형-개체
  2. 타원-속성
  3. 마름모-관계
  4. 삼각형-일반 속성
정답과 해설 보기

정답: 4

정답은 ④ 삼각형-일반 속성이다. 이 학습용 문항은 사각형·타원·마름모를 사용하는 전통적인 ER 표기 관례를 기준으로 한다. 개체 집합은 사각형, 속성은 타원, 관계 집합은 마름모로 표현한다. 예를 들어 사원은 개체, 사원 이름은 속성, 사원과 부서의 소속은 관계에 해당한다.

삼각형은 일부 확장 ER 표기에서 ISA 등의 일반화·특수화 관계를 나타낼 수 있으나 일반 속성의 표시는 아니다. ER 모델의 표기법은 도구와 관례에 따라 달라질 수 있으므로 모든 ER 다이어그램이 반드시 같은 도형을 써야 한다는 뜻으로 외우지 않는다.

선지별 해설

  • ① 오답. 이 표기 관례에서 사각형은 개체 집합을 나타낸다.
  • ② 오답. 타원은 속성을 나타낸다.
  • ③ 오답. 마름모는 관계 집합을 나타낸다.
  • ④ 정답. 일반 속성을 삼각형으로 나타내지 않으며 타원을 쓴다.

편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, ER Model — ER Model Basics 및 Entity Sets·Relationship Sets의 도식

44. 관계형 데이터베이스의 개체 무결성을 올바르게 설명한 것은?

  1. 기본키를 이루는 속성은 NULL이 될 수 없다
  2. 외래키는 언제나 서로 다른 값이어야 한다
  3. 모든 일반 속성은 기본키와 같은 도메인을 쓴다
  4. 한 테이블에는 후보키가 하나만 존재한다
정답과 해설 보기

정답: 1

정답은 ①이다. 기본키는 한 행을 유일하게 식별하도록 선택한 키이므로 중복될 수 없고, 기본키를 이루는 각 열은 NULL일 수 없다. 복합 기본키라면 여러 열을 합친 값의 유일성과 각 열의 NOT NULL 조건을 함께 생각한다.

외래키는 다른 행의 키를 참조할 수 있는 값이며 여러 자식 행이 같은 부모를 참조할 수 있으므로 항상 서로 달라야 하는 것은 아니다. 일반 속성의 자료형이나 값 범위가 기본키와 같을 필요도 없다. 한 테이블에 여러 후보키가 있고 그중 하나를 기본키로 정하는 것은 가능하다.

선지별 해설

  • ① 정답. 기본키를 구성하는 모든 열은 NULL을 허용하지 않는다.
  • ② 오답. 여러 행이 같은 부모를 가리키는 외래키 값을 가질 수 있다.
  • ③ 오답. 각 속성의 도메인은 그 속성의 의미에 맞게 정한다.
  • ④ 오답. 후보키는 여러 개일 수 있고 그중 하나를 기본키로 선택한다.

편집 해설 근거: PostgreSQL 18 — Constraints — §5.5.4 Primary Keys; §5.5.5 Foreign Keys; Ramakrishnan·Gehrke, Database Management Systems 3판, Relational Model — Key Constraints

45. 잠금 단위를 테이블처럼 크게 잡을 때 일반적으로 나타나는 효과는?

  1. 동시에 접근할 수 있는 트랜잭션 수가 줄어든다
  2. 잠금 개수가 늘고 관리 비용이 반드시 커진다
  3. 교착 상태가 논리적으로 불가능해진다
  4. 레코드와 페이지는 잠금 대상이 될 수 없다
정답과 해설 보기

정답: 1

정답은 ① 동시에 접근할 수 있는 트랜잭션 수가 줄어든다는 설명이다. 같은 작업량을 처리할 때 테이블 전체를 잠그면 그 안의 서로 다른 행을 다루려는 작업도 기다릴 수 있어 일반적으로 동시성이 낮아진다. 작은 레코드 잠금보다 보호 범위가 넓기 때문이다.

반대로 전체 테이블을 하나의 잠금으로 관리하면 많은 개별 행 잠금을 관리할 때보다 잠금 수와 관리 부담을 줄일 여지가 있다. 이는 잠금 모드와 작업 부하가 같다는 일반 비교이며 모든 구현에서 비용이 반드시 같은 방향으로 변한다는 보장은 아니다. 큰 단위를 써도 여러 자원의 대기 순서가 얽히면 교착 상태는 가능하다.

선지별 해설

  • ① 정답. 더 넓은 범위를 잠그므로 독립적으로 진행할 작업이 줄어들 수 있다.
  • ② 오답. 큰 단위는 필요한 잠금 수를 줄일 수 있으며 비용 증가가 필연적이지 않다.
  • ③ 오답. 큰 단위 잠금만으로 교착 상태가 논리적으로 없어지지 않는다.
  • ④ 오답. 레코드·페이지도 구현에 따라 잠금 단위로 사용할 수 있다.

편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, Concurrency Control — Multiple-Granularity Locking 및 lock granularity 설명

46. 릴레이션에서 튜플을 유일하게 식별하면서 불필요한 속성을 더 포함하지 않는 키는?

[학습용 개정문항]

  1. 슈퍼키
  2. 후보키
  3. 외래키
  4. 검색키
정답과 해설 보기

정답: 2

정답은 ② 후보키이다. 슈퍼키는 튜플을 유일하게 식별하는 속성 집합이고, 후보키는 그중 어떤 속성도 더 뺄 수 없는 최소 슈퍼키다. 여기서 최소성은 글자 수나 저장공간이 가장 작다는 뜻이 아니라 식별에 불필요한 속성이 없다는 뜻이다.

예를 들어 학번만으로 학생을 식별하면 {학번, 이름}도 슈퍼키지만 이름을 제거해도 되므로 후보키는 아니다. {학번}은 후보키가 될 수 있다. 기존 보기의 대체키도 기본키로 선택하지 않은 후보키이므로 정의를 동시에 만족할 수 있었다. 이를 검색키로 바꾸어 정답 범주의 중첩을 해소했다.

선지별 해설

  • ① 오답. 유일성은 만족하지만 불필요한 속성을 더 포함할 수 있다.
  • ② 정답. 유일성과 최소성을 모두 만족하는 키의 명칭이다.
  • ③ 오답. 다른 행의 키를 참조하는 역할이며 이 정의와 다르다.
  • ④ 오답. 검색을 위한 속성일 수 있으나 유일성과 최소성이 자동 보장되지 않는다.

편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, Relational Model — Key Constraints, superkey와 key의 minimality

47. 뷰에 대한 설명으로 옳은 것은?

  1. 뷰는 항상 조회 결과 행을 별도 파일에 영구 저장한다
  2. 뷰를 이용하면 특정 열이나 행만 노출하는 논리적 창을 만들 수 있다
  3. 모든 뷰는 제한 없이 INSERT·UPDATE·DELETE할 수 있다
  4. 기본 테이블과 무관하게 같은 정의를 영구 유지한다
정답과 해설 보기

정답: 2

정답은 ②이다. 일반 뷰는 저장해 둔 질의 정의를 통해 기본 테이블의 특정 열이나 조건에 맞는 행을 보여 주는 논리적 창이다. 예를 들어 직원 테이블에서 이름과 부서만 보여 주고 급여 열을 뺀 뷰를 만들 수 있다.

일반 뷰는 조회한 모든 결과 행을 반드시 별도 파일에 영구 보관하는 물리화 뷰와 다르다. 갱신 가능 여부는 정의와 DBMS 규칙에 따라 달라지며 집계·조인 등을 포함한 모든 뷰가 무조건 갱신되는 것은 아니다. 기본 테이블이나 참조 열에 의존하므로 그 구조가 사라져도 아무 영향 없이 같은 정의를 유지한다고 할 수 없다.

선지별 해설

  • ① 오답. 일반 뷰의 질의 정의 저장과 물리화된 결과 저장을 혼동했다.
  • ② 정답. 필요한 열·행을 선택해 논리적인 접근 창을 만들 수 있다.
  • ③ 오답. 갱신 가능성은 뷰의 정의와 DBMS 제약에 따른다.
  • ④ 오답. 뷰는 참조하는 기본 테이블과 열의 구조에 의존한다.

편집 해설 근거: PostgreSQL 18 — CREATE VIEW — Description; Updatable Views

48. 다음 중 데이터 조작어(DML)가 아닌 것은?

  1. INSERT
  2. UPDATE
  3. ALTER
  4. DELETE
정답과 해설 보기

정답: 3

정답은 ③ ALTER이다. DML은 저장된 행 데이터를 넣고 바꾸고 지우는 등의 조작을 한다. INSERT는 새 행 추가, UPDATE는 기존 행 값 수정, DELETE는 조건에 맞는 행 삭제에 사용한다.

ALTER TABLE은 열을 추가하거나 제약조건을 바꾸는 등 테이블 정의를 변경하는 DDL 계열 명령이다. 예를 들어 직원의 급여값을 올리는 것은 UPDATE이지만 직원 테이블에 급여라는 열을 새로 만드는 것은 ALTER TABLE이다. SELECT의 세부 분류 관례가 달라도 이 문항의 네 보기에서 구조 변경 명령과 행 조작 명령의 차이는 분명하다.

선지별 해설

  • ① 오답. 새 행을 추가하는 데이터 조작 명령이다.
  • ② 오답. 기존 행의 값을 수정하는 데이터 조작 명령이다.
  • ③ 정답. 객체 정의를 바꾸는 명령으로 DML 분류에 속하지 않는다.
  • ④ 오답. 조건에 해당하는 행을 삭제하는 데이터 조작 명령이다.

편집 해설 근거: PostgreSQL 18 — Data Manipulation — Chapter 6 Data Manipulation; PostgreSQL 18 — UPDATE — Description

49. 외래키에 대한 설명으로 틀린 것은?

  1. 기본키가 아닌 나머지 후보키를 모두 외래키라고 한다
  2. 다른 릴레이션의 키를 참조해 관계를 표현할 수 있다
  3. 외래키 값에는 참조 무결성 제약이 적용될 수 있다
  4. 여러 속성을 묶어 외래키를 만들 수도 있다
정답과 해설 보기

정답: 1

정답은 ①이다. 기본키로 고르지 않은 나머지 후보키는 대체키라고 부르며 외래키가 아니다. 외래키는 같은 테이블 또는 다른 테이블의 참조 가능한 키 값과 연결하여 관계를 표현하는 역할이다.

예를 들어 사원의 부서번호가 부서 테이블의 부서번호를 참조하면 사원 쪽 부서번호가 외래키다. 여러 열을 조합한 복합 외래키도 가능하고, 참조 무결성 제약을 선언하면 없는 부모 키를 참조하는 변경을 제한할 수 있다. 외래키 여부는 그 값이 기본키로 선택되었는가가 아니라 어떤 키를 참조하도록 정의되었는가로 판단한다.

선지별 해설

  • ① 정답. 선택되지 않은 후보키는 대체키이며 외래키와 다른 분류다.
  • ② 오답. 다른 릴레이션의 키 참조로 관계를 표현할 수 있다.
  • ③ 오답. 외래키 선언을 통해 참조 무결성을 강제할 수 있다.
  • ④ 오답. 여러 열을 묶은 복합 외래키도 만들 수 있다.

편집 해설 근거: PostgreSQL 18 — Constraints — §5.5.5 Foreign Keys; Ramakrishnan·Gehrke, Database Management Systems 3판, Relational Model — Key Constraints

50. 사원 테이블에 행이 5개 있고 급여 열에는 3000, NULL, 4200, 3000, 5100이 저장돼 있다. SELECT 급여 FROM 사원; 이 반환하는 행 수는?

  1. 1
  2. 3
  3. 4
  4. 5
정답과 해설 보기

정답: 4

정답은 ④ 5행이다. SELECT 급여 FROM 사원은 조건으로 행을 제거하거나 중복을 없애지 않고 각 행의 급여값을 반환한다. 따라서 3000, NULL, 4200, 3000, 5100의 다섯 행이 나온다. 같은 급여 3000이 두 번 있다는 이유로 한 행이 사라지지 않으며 NULL인 행도 결과에 포함된다.

SELECT DISTINCT 급여라면 중복 3000을 한 번만 남겨 네 행이 되고, COUNT(급여)는 NULL이 아닌 값만 세어 4가 된다. COUNT(*)는 행을 세어 5이다. 질의가 행을 조회하는지, 중복을 제거하는지, NULL을 제외해 집계하는지를 구별해야 한다.

선지별 해설

  • ① 오답. SUM·COUNT 같은 집계 없이 단일 결과 행으로 합치지 않는다.
  • ② 오답. 서로 다른 비NULL 값의 수를 묻는 질의가 아니다.
  • ③ 오답. DISTINCT나 NULL 제외 조건이 없으므로 네 행으로 줄지 않는다.
  • ④ 정답. 원래 다섯 행의 급여값을 각각 반환한다.

편집 해설 근거: PostgreSQL 18 — SELECT — SELECT ALL과 DISTINCT의 처리 설명

51. 분산 데이터베이스에서 응용 프로그램이 데이터가 어느 서버에 저장됐는지 몰라도 접근할 수 있는 성질은?

  1. 위치 투명성
  2. 복제 투명성
  3. 병행 투명성
  4. 장애 투명성
정답과 해설 보기

정답: 1

정답은 ① 위치 투명성이다. 응용 프로그램이 데이터의 물리적 저장 위치를 직접 지정하거나 계속 의식하지 않아도 논리적인 이름으로 접근할 수 있게 하는 성질이다. 예를 들어 주문 데이터가 다른 서버로 이동해도 동일한 논리 이름으로 조회할 수 있도록 하는 방식이다.

복제 투명성은 여러 사본의 존재와 관리를 숨기고, 병행 투명성은 동시 작업의 간섭을 다루며, 장애 투명성은 장애 상황의 영향을 감추거나 줄이는 데 초점이 있다. 네 가지는 함께 제공될 수 있지만 질문은 ‘어느 서버에 있는가’를 모른다는 위치에 관한 단서를 준다.

선지별 해설

  • ① 정답. 저장된 서버·물리적 위치를 몰라도 접근할 수 있는 성질이다.
  • ② 오답. 복수 사본의 존재·선택을 사용자가 의식하지 않는 성질이다.
  • ③ 오답. 동시에 수행되는 여러 작업의 간섭을 관리하는 성질이다.
  • ④ 오답. 장애가 사용자 동작에 주는 영향을 감추거나 완화하는 성질이다.

편집 해설 근거: Oracle Database — Distributed Database Concepts — §31.5.1.1 Location Transparency

52. 한 부서에는 여러 사원이 속할 수 있지만 각 사원은 한 부서에만 속한다. 부서와 사원의 대응 관계는?

  1. 1:1
  2. 1:N
  3. N:M
  4. N:1만 가능
정답과 해설 보기

정답: 2

정답은 ② 1:N이다. 관계를 부서에서 사원 방향으로 읽는다. 한 부서에는 여러 사원이 속할 수 있으므로 부서 하나에 사원 여러 명이 대응하고, 각 사원은 한 부서에만 속하므로 반대쪽은 하나로 제한된다.

예를 들어 개발부에 세 명, 인사부에 두 명이 있어도 한 사원이 동시에 두 부서에 속하지 않는 조건이다. 사원에서 부서 방향으로 읽으면 N:1이라고 표현할 수 있지만, 문항에서 물은 부서:사원의 방향은 1:N이다. 여러 부서에 사원이 겹쳐 소속되는 N:M 조건을 임의로 추가해서는 안 된다.

선지별 해설

  • ① 오답. 한 부서에 여러 사원이 허용되므로 1:1이 아니다.
  • ② 정답. 부서 하나에 여러 사원이 대응하는 방향이다.
  • ③ 오답. 한 사원이 여러 부서에 속하는 조건이 없다.
  • ④ 오답. 사원:부서라는 반대 방향은 N:1이지만 부서:사원은 1:N이다.

편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, ER Model — Key Constraints 및 one-to-many 관계 도식

53. 트랜잭션의 ACID 특성에 포함되지 않는 것은?

  1. 원자성
  2. 동시성
  3. 고립성
  4. 지속성
정답과 해설 보기

정답: 2

정답은 ② 동시성이다. ACID는 원자성(Atomicity), 일관성(Consistency), 고립성 또는 격리성(Isolation), 지속성(Durability)의 머리글자이다. 여러 작업이 함께 수행된다는 동시성은 중요하지만 C가 가리키는 낱말은 Consistency이다.

원자성은 작업 단위의 전부 반영 또는 취소, 일관성은 정의된 규칙을 만족하는 상태의 유지, 격리성은 동시 트랜잭션 사이 관찰과 간섭의 통제, 지속성은 커밋 결과의 보존이다. 동시성을 높이려면 적절한 격리·제어가 필요하므로 동시성과 격리성이 서로 무관하다는 뜻은 아니다.

선지별 해설

  • ① 오답. Atomicity에 해당하는 ACID 속성이다.
  • ② 정답. C는 Concurrency가 아니라 Consistency, 즉 일관성이다.
  • ③ 오답. Isolation에 해당하는 속성이다.
  • ④ 오답. Durability에 해당하는 속성이다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Computing Foundations §6.2 Data Models and Storage Models, p.16-18; PostgreSQL 18, 3.4 Transactions — §3.4 Transactions, atomic·all-or-nothing·permanent·concurrent 설명; Ramakrishnan·Gehrke, Database Management Systems 3판, Relational Model — Integrity Constraints

54. 관계대수에 대한 설명으로 틀린 것은?

  1. 입력과 결과가 릴레이션인 닫힘 성질을 가진다
  2. 원하는 결과를 얻는 연산 절차를 표현한다
  3. 일반 집합 연산과 순수 관계 연산을 포함한다
  4. 프레디킷 해석에 기반한 비절차적 언어다
정답과 해설 보기

정답: 4

정답은 ④이다. 관계대수는 선택·투영·조인 같은 연산을 조합하여 원하는 릴레이션을 얻는 방법을 표현한다. 연산의 입력도 결과도 릴레이션이므로 결과를 다시 다른 연산의 입력으로 넣는 닫힘 성질이 있다.

술어 논리의 조건을 사용해 원하는 결과가 무엇인지를 선언하는 설명은 관계해석에 해당한다. 예를 들어 특정 부서의 사원만 선택한 다음 이름 열을 투영하는 연산 구성이 관계대수의 예다. 관계대수의 절차적 표현을 실제 DB 실행기가 반드시 그 순서 그대로 실행한다는 의미로 확대하면 안 된다. 질의 최적화는 동등한 다른 실행 계획을 사용할 수 있다.

선지별 해설

  • ① 오답. 릴레이션에서 릴레이션을 만드는 닫힘 성질은 맞다.
  • ② 오답. 연산의 조합으로 결과 도출 방법을 표현한다.
  • ③ 오답. 합집합 등의 집합 연산과 선택·투영 등의 관계 연산을 포함한다.
  • ④ 정답. 술어 논리에 기반한 비절차적 표현은 관계해석의 특징이다.

편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, Relational Calculus — Relational Calculus 및 Expressive Power of Algebra and Calculus

55. 학과 테이블에서 교수명이 ‘김’으로 시작하는 행의 학과번호를 900으로 바꾸는 SQL은?

  1. UPDATE 학과 SET 학과번호=900 WHERE 교수명 LIKE '김%';
  2. UPDATE 학과 TO 학과번호=900 WHERE 교수명 LIKE '김%';
  3. UPDATE 학과 SET 학과번호=900 WHERE 교수명 LIKE '%김%';
  4. MODIFY 학과 SET 학과번호=900 WHERE 교수명='김';
정답과 해설 보기

정답: 1

정답은 ①이다. 행 값을 수정하는 기본 구문은 UPDATE 테이블 SET 열=새값 WHERE 조건이다. 따라서 학과 테이블의 학과번호를 900으로 바꾸려면 UPDATE 학과 SET 학과번호=900을 쓰고, 교수명이 김으로 시작하는 조건을 WHERE에 둔다.

LIKE의 %는 길이가 0 이상인 임의 문자열을 뜻한다. 김%는 처음이 김인 값을 선택하므로 김, 김민수 등이 해당하고 이김수는 해당하지 않는다. %김%는 앞뒤 어디에든 김이 있는 값을 허용하여 범위가 넓다. 따옴표 안의 패턴과 열 변경에 쓰는 SET 키워드를 함께 확인한다.

선지별 해설

  • ① 정답. 올바른 UPDATE·SET 구문과 김으로 시작하는 패턴을 사용한다.
  • ② 오답. 열 값 지정에 TO가 아니라 SET을 사용한다.
  • ③ 오답. %김%는 김이 중간이나 끝에 있어도 선택한다.
  • ④ 오답. 제시된 MODIFY 구문은 올바른 UPDATE 문이 아니며 =는 김 한 값만 비교한다.

편집 해설 근거: PostgreSQL 18 — UPDATE — Synopsis 및 Description; PostgreSQL 18, 9.7 Pattern Matching — §9.7.1 LIKE

56. 하위 개체 하나가 상위 개체 하나만 갖고 전체를 트리로 표현하는 데이터 모델은?

  1. 관계 모델
  2. 네트워크 모델
  3. 계층 모델
  4. 객체관계 모델
정답과 해설 보기

정답: 3

정답은 ③ 계층 모델이다. 자료를 루트에서 시작하는 부모–자식의 트리 구조로 조직하며, 기본 구조에서 루트가 아닌 자식은 부모 하나에 속한다. 예를 들어 회사 아래 부서, 부서 아래 사원을 배치하는 경로를 생각할 수 있다.

네트워크 모델은 더 일반적인 연결 관계를 다룰 수 있고, 관계 모델은 테이블과 관계 연산으로 데이터를 표현한다. 객체관계 모델은 관계형 구조에 객체적 자료형 등의 기능을 확장한 것이다. 현실의 자료 관계가 언제나 트리라는 뜻은 아니며, 한 항목이 여러 상위 항목과 연결되어야 한다면 단순 계층 구조만으로는 표현에 제약이 생긴다.

선지별 해설

  • ① 오답. 테이블과 관계 연산을 중심으로 표현한다.
  • ② 오답. 트리보다 일반적인 연결 관계를 다루는 모델이다.
  • ③ 정답. 하나의 부모에서 여러 자식으로 내려가는 트리 구조다.
  • ④ 오답. 관계 모델에 객체적 기능을 확장한 모델이다.

편집 해설 근거: E. F. Codd — A Relational Model of Data (paper mirror) — §1.2.3 Access Path Dependence, tree-structured files와 network models의 비교

57. 데이터베이스 인덱스에 대한 설명으로 틀린 것은?

  1. 검색 경로를 줄이기 위한 보조 자료구조다
  2. 추가 인덱스는 쓰기 비용과 저장공간을 늘릴 수 있다
  3. 표준 생성·삭제 명령은 ADD INDEX와 DELETE INDEX뿐이다
  4. 테이블 삭제 시 그 테이블의 인덱스도 함께 제거된다
정답과 해설 보기

정답: 3

정답은 ③이다. 인덱스는 조건에 맞는 행을 찾을 때 사용할 수 있는 보조 접근 구조다. 책의 색인처럼 전체를 훑는 대신 필요한 범위를 빨리 찾는 데 도움을 주지만, 데이터 삽입·변경·삭제 때 인덱스도 유지해야 하고 저장공간을 차지한다.

PostgreSQL에서는 CREATE INDEX와 DROP INDEX를 사용한다. SQL 표준 자체는 인덱스의 생성·삭제 명령을 정의하지 않으므로 ADD INDEX와 DELETE INDEX만 표준이라는 주장도 틀리다. DBMS별 구문을 확인해야 하며, 일부 제품에서 ALTER TABLE … ADD INDEX를 지원한다는 사실과 보편적인 표준 명령이라는 주장은 다르다.

선지별 해설

  • ① 오답. 검색을 돕는 보조 자료구조라는 설명은 맞다.
  • ② 오답. 추가 구조의 유지와 저장에 비용이 든다.
  • ③ 정답. 제품별 명령이 다르며 SQL 표준에 이 두 명령만 규정되어 있지 않다.
  • ④ 오답. PostgreSQL에서는 테이블을 삭제하면 해당 인덱스도 제거된다.

편집 해설 근거: PostgreSQL 18 — Indexes — Chapter 11 Indexes, introductory paragraph; PostgreSQL 18, CREATE INDEX — Synopsis; Compatibility

58. R의 차수는 3, 카디널리티는 8이고 S의 차수는 5, 카디널리티는 4다. R×S의 차수와 카디널리티는?

  1. 8, 32
  2. 15, 12
  3. 8, 12
  4. 15, 32
정답과 해설 보기

정답: 1

정답은 ① 차수 8, 카디널리티 32이다. 카티션 곱은 R의 각 튜플과 S의 모든 튜플을 조합한다. 한 결과 튜플에는 R의 세 속성과 S의 다섯 속성이 함께 들어가므로 차수는 3+5=8이다.

R의 여덟 튜플 각각에 S의 네 튜플이 대응하므로 결과 튜플 수는 8×4=32이다. 열 수는 더하고 행 수는 곱한다는 차이를 기억한다. 여기에는 조인 조건이나 WHERE 필터가 없으므로 대응하는 값이 같은 행만 선택하는 조인과 혼동하면 안 된다. 동일한 속성 이름이 있으면 출처를 구별해 다룬다.

선지별 해설

  • ① 정답. 속성 수는 3+5=8, 튜플 수는 8×4=32이다.
  • ② 오답. 차수에 곱셈, 튜플 수에 덧셈을 적용하여 연산을 바꾸었다.
  • ③ 오답. 튜플 수는 8+4가 아니라 모든 쌍의 수 8×4이다.
  • ④ 오답. 차수는 두 릴레이션의 속성 개수를 더한다.

편집 해설 근거: PostgreSQL 18 — Cross Join — §7.2.1.1 Joined Tables, CROSS JOIN

59. 관계형 데이터베이스의 일반적인 테이블 파티션 방식으로 보기 어려운 것은?

  1. 범위 분할
  2. 해시 분할
  3. 목록 분할
  4. 유닛 처리 분할
정답과 해설 보기

정답: 4

정답은 ④ 유닛 처리 분할이다. 범위 분할은 날짜나 번호 구간으로, 목록 분할은 정해진 값 목록으로, 해시 분할은 분할 키의 해시 결과로 행을 나눈다. 예를 들어 월별 주문을 날짜 범위로 나누면 특정 월을 조회할 때 관련 파티션만 살필 수 있다.

세 방식은 PostgreSQL의 선언적 파티션에서도 명시적으로 지원한다. 유닛 처리 분할은 이들과 나란히 쓰는 일반적인 테이블 파티션 방법의 명칭이 아니다. 파티셔닝을 했다고 모든 쿼리가 자동으로 빨라지는 것은 아니며 분할 키와 질의 조건, 파티션 개수에 따라 효과와 비용이 달라진다.

선지별 해설

  • ① 오답. 분할 키의 값 구간에 따라 행을 나누는 방식이다.
  • ② 오답. 해시 값을 이용해 파티션을 선택하는 방식이다.
  • ③ 오답. 명시한 값 목록에 따라 파티션을 선택하는 방식이다.
  • ④ 정답. 제시된 일반적인 테이블 파티션 방식에 해당하지 않는다.

편집 해설 근거: PostgreSQL 18 — Table Partitioning — §5.12.2 Declarative Partitioning

60. 자식 테이블의 외래키가 부모 테이블에 존재하는 키를 가리키도록 유지하는 제약은?

  1. 도메인 무결성
  2. 개체 무결성
  3. 참조 무결성
  4. 사용자 정의 무결성
정답과 해설 보기

정답: 3

정답은 ③ 참조 무결성이다. 자식의 외래키 값이 존재하지 않는 부모를 가리켜 관계가 끊어지는 일을 막는 규칙이다. 예를 들어 주문의 고객번호가 고객 테이블의 키를 참조한다면, 참조 제약에 맞지 않는 고객번호를 임의로 저장할 수 없게 한다.

부모를 삭제·변경할 때의 동작은 제한, 연쇄 변경 등 선언된 정책에 따라 달라진다. 또한 외래키의 NULL 허용 여부와 MATCH 조건은 별도로 봐야 하며, 기본 설정에서 NULL인 참조를 허용할 수도 있다. 개체 무결성은 기본키의 식별, 도메인 무결성은 열 값의 범위·자료형에 관한 규칙이다.

선지별 해설

  • ① 오답. 개별 열 값의 자료형·범위 등 허용 조건에 관한 제약이다.
  • ② 오답. 기본키가 행을 유효하게 식별하도록 하는 규칙이다.
  • ③ 정답. 외래키와 참조 대상 키 사이의 유효한 연결을 유지한다.
  • ④ 오답. 응용 업무별로 추가한 규칙의 넓은 범주이며 이 질문의 구체적 명칭은 참조 무결성이다.

편집 해설 근거: PostgreSQL 18 — Constraints — §5.5.5 Foreign Keys, referential integrity 및 ON DELETE·MATCH 설명

정보처리기사 필기 기출문제 · 프로그래밍 언어 활용

61. 다음 C 프로그램의 출력은?

#include <stdio.h>
int main(void){ char s[]="CODE"; char *p=s; s[1]='A'; printf("%c%c", *(p+1), *(p+3)); }
  1. AE
  2. AO
  3. CD
  4. CE
정답과 해설 보기

정답: 1

정답은 ① AE이다. s는 수정 가능한 문자 배열이며 초기 내용은 C, O, D, E, 문자열 끝 표시 순서다. p는 s의 첫 원소를 가리킨다. s[1]을 A로 바꾸면 배열 내용은 CADE가 되며 p 역시 같은 배열을 계속 가리킨다.

따라서 *(p+1)은 두 번째 문자 A, *(p+3)은 네 번째 문자 E이다. 포인터에 1을 더하는 것은 가리키는 원소 하나만큼 이동하는 뜻이고 인덱스는 0부터 시작한다. printf의 %c%c는 두 문자를 공백 없이 이어 출력하므로 AE가 된다. 문자열 리터럴 자체를 포인터로 가리켜 수정하는 코드와는 다르다.

선지별 해설

  • ① 정답. 수정된 인덱스 1의 A와 인덱스 3의 E를 출력한다.
  • ② 오답. O는 이미 A로 바뀌었고 두 번째 출력 위치도 3이다.
  • ③ 오답. 인덱스 0과 2의 문자를 출력하는 코드가 아니다.
  • ④ 오답. 첫 출력은 p 자체가 아니라 p+1 위치다.

편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.5.2.1 Array subscripting; §6.5.6 Additive operators; §7.21.6.1의 c 변환

62. C11에서 함수 블록 내부의 자동 변수 이름으로 사용할 수 없는 것은? (해당 이름은 앞서 선언되거나 매크로로 정의되지 않았다.)

[학습용 개정문항]

  1. data02
  2. int01
  3. _sub
  4. short
정답과 해설 보기

정답: 4

정답은 ④ short이다. short는 C 언어가 정수형 선언에 사용하는 키워드이므로 일반 변수 이름으로 사용할 수 없다. data02와 int01은 문자로 시작하고 뒤에 숫자가 붙은 식별자이며, int01 전체가 키워드 int와 같은 토큰은 아니다.

_sub는 함수 블록 내부의 연결 없는 자동 변수 이름이라는 이 문항 조건에서 사용할 수 있다. 다만 밑줄로 시작하는 이름에는 예약 규칙이 있다. 파일 범위의 밑줄 이름이나 밑줄 뒤 대문자·밑줄이 오는 이름은 별도 제한을 받으므로 ‘밑줄로 시작하면 어디서든 안전하다’고 일반화하면 안 된다.

선지별 해설

  • ① 오답. 문자로 시작하며 뒤에 숫자를 포함할 수 있다.
  • ② 오답. int01은 키워드 int와 다르므로 변수 이름으로 사용할 수 있다.
  • ③ 오답. 이 문항의 블록 내부 자동 변수 조건에서는 예약된 형태가 아니다.
  • ④ 정답. short는 C의 자료형 키워드이다.

편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.4.1 Keywords; §6.4.2.1 Identifiers; §7.1.3 Reserved identifiers

63. POSIX 계열에서 현재 프로세스를 복제해 새 프로세스를 만드는 대표 시스템 호출은?

  1. ls
  2. cat
  3. fork
  4. chmod
정답과 해설 보기

정답: 3

정답은 ③ fork이다. POSIX의 fork()는 호출한 프로세스를 바탕으로 자식 프로세스를 생성한다. 성공하면 부모에는 자식의 프로세스 ID가, 자식에는 0이 반환되어 각 프로세스가 어느 쪽인지 구별할 수 있다. 실패하면 자식은 생성되지 않고 -1을 반환한다.

생성 후 부모와 자식은 별도 프로세스로 실행된다. fork가 새 프로그램 파일을 곧바로 읽어 실행하는 호출인 것은 아니며, 다른 프로그램으로 실행 이미지를 바꾸는 동작은 exec 계열과 구별한다. ls·cat은 파일 관련 유틸리티이고 chmod는 권한 변경에 관한 이름이다.

선지별 해설

  • ① 오답. 디렉터리 내용 등을 나열하는 유틸리티다.
  • ② 오답. 파일 내용을 이어 출력하는 유틸리티다.
  • ③ 정답. 호출 프로세스를 바탕으로 자식 프로세스를 만든다.
  • ④ 오답. 파일 접근 권한을 바꾸는 명령·함수 이름이다.

편집 해설 근거: The Open Group, POSIX.1-2024 fork() — DESCRIPTION; RETURN VALUE

64. C에서 printf와 scanf 선언을 사용하기 위한 올바른 전처리 지시문은?

  1. #import <stdio.h>
  2. #include <stdio.h>
  3. #import <studio.h>
  4. #include <studio.h>
정답과 해설 보기

정답: 2

정답은 ② #include <stdio.h>이다. C의 #include 전처리 지시문은 지정한 헤더의 내용을 번역 과정에 포함한다. 표준 입출력 헤더 stdio.h에는 printf와 scanf를 올바르게 호출하는 데 필요한 선언 등이 제공된다.

stdio는 standard input/output에서 온 이름이고 studio가 아니다. 또한 #import를 C11의 표준 헤더 포함 지시문으로 사용할 수는 없다. 다른 언어나 특정 구현의 확장에 비슷한 지시문이 있다는 사실과 표준 C 구문을 구별한다. 헤더를 포함하는 것과 실제 프로그램의 라이브러리를 연결하는 단계도 서로 다른 과정이다.

선지별 해설

  • ① 오답. 표준 C의 헤더 포함 지시문은 #include이다.
  • ② 정답. 지시문과 헤더 이름이 모두 올바르다.
  • ③ 오답. #import와 studio.h 모두 문항의 표준 C 사용과 맞지 않는다.
  • ④ 오답. studio.h가 아니라 stdio.h이다.

편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.10.2 Source file inclusion; §7.21 Input/output <stdio.h>

65. 다음 C 프로그램의 출력은?

#include <stdio.h>
int f(int x){ static int s=5; int a=5; s+=x; a+=x; return s-a; }
int main(void){ int r=0; for(int i=1;i<=4;i++) r=f(i); printf("%d",r); }
  1. 0
  2. 3
  3. 6
  4. 10
정답과 해설 보기

정답: 3

정답은 ③ 6이다. s는 static 지역 변수이므로 한 번 5로 초기화된 뒤 호출 사이에 값을 유지한다. a는 자동 지역 변수이므로 f를 호출할 때마다 5로 초기화된다. x가 1, 2, 3, 4로 바뀔 때 s는 6, 8, 11, 15이고 a는 각각 6, 7, 8, 9이다.

반환값 s-a는 순서대로 0, 1, 3, 6이다. main의 r=f(i)는 이전 r에 더하는 연산이 아니라 대입이므로 마지막 반환값 6만 남는다. static을 사용했다고 변수가 전역 이름으로 바뀌는 것은 아니며 이름의 범위와 저장 수명은 별개로 이해한다.

선지별 해설

  • ① 오답. 첫 호출의 반환값이며 이후 s가 누적되는 사실을 놓쳤다.
  • ② 오답. 세 번째 호출의 반환값으로 반복이 한 번 더 진행된다.
  • ③ 정답. 마지막에는 s=15, a=9이므로 차가 6이다.
  • ④ 오답. 입력 1+2+3+4의 합과 함수의 마지막 반환값은 다르다.

편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.2.4 Storage durations of objects; §6.7.9 Initialization

66. OSI 계층 중 같은 링크에 직접 연결된 노드 사이의 프레임 전송, 오류 검출, 흐름 제어를 담당하는 계층은?

  1. 데이터 링크 계층
  2. 물리 계층
  3. 세션 계층
  4. 표현 계층
정답과 해설 보기

정답: 1

정답은 ① 데이터 링크 계층이다. 이 계층은 같은 링크를 이용하는 인접 노드 사이에서 데이터를 프레임으로 구분하고 링크 수준의 오류 검출 등을 처리한다. 물리 계층이 전기·광 신호 등으로 비트를 전달하는 것보다 한 단계 위에서 전송 단위를 해석한다.

흐름 제어와 오류 회복의 구체적 제공 여부는 프로토콜과 서비스 방식에 따라 다르다. 따라서 모든 데이터 링크 프로토콜이 모든 기능을 반드시 같은 방식으로 제공한다는 뜻은 아니다. 여러 링크를 거치는 경로 선택이나 종단 간 전체 전송과 구별하여 ‘한 링크의 프레임’이라는 단서를 찾는다.

선지별 해설

  • ① 정답. 링크 수준의 프레임 구분과 오류 검출 등에 해당한다.
  • ② 오답. 물리적인 비트·신호 전송을 담당한다.
  • ③ 오답. 대화·동기점 등 세션 관리에 관한 계층이다.
  • ④ 오답. 데이터 구문과 표현 형식에 관한 계층이다.

편집 해설 근거: ITU-T X.200 (07/1994), OSI Basic Reference Model — §7.6.4.5~7.6.4.9, framing·error detection·flow control

67. 다음 C 프로그램의 출력은?

#include <stdio.h>
void a(int x,int y){int t=x;x=y;y=t;}
void b(int *x,int *y){int t=*x;*x=*y;*y=t;}
int main(void){int x=4,y=9;a(x,y);b(&x,&y);printf("%d",x*10+y);}
  1. 44
  2. 49
  3. 94
  4. 99
정답과 해설 보기

정답: 3

정답은 ③ 94이다. a(x,y)는 정수값 4와 9를 복사해서 받는다. a 내부의 x와 y만 교환하므로 main의 두 변수는 여전히 4와 9이다. b(&x,&y)는 두 변수의 주소를 값으로 전달하고, *x와 *y를 통해 그 주소의 실제 정수값을 바꾼다.

따라서 b가 끝난 뒤 main의 x=9, y=4이고 x*10+y=90+4=94이다. C는 포인터 인수도 값으로 전달한다. 다만 복사된 주소를 역참조하여 호출자 객체에 접근할 수 있으므로 ‘포인터를 쓰면 언어의 인수 전달 방식 자체가 참조 전달로 바뀐다’고 설명하지 않는다.

선지별 해설

  • ① 오답. 두 값을 모두 4로 만드는 대입은 없다.
  • ② 오답. a만 실행한 상태를 유지한 값이며 b가 실제로 교환한다.
  • ③ 정답. 주소를 통한 교환 후 9×10+4=94이다.
  • ④ 오답. 두 값을 모두 9로 만들지 않고 임시 변수로 교환한다.

편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.5.2.2 Function calls; §6.5.3.2 Address and indirection operators

68. 192.168.10.0/24를 동일 크기의 4개 서브넷으로 나눴다. 네 번째 서브넷의 네 번째 사용 가능 주소는?

  1. 192.168.10.192
  2. 192.168.10.195
  3. 192.168.10.196
  4. 192.168.10.254
정답과 해설 보기

정답: 3

정답은 ③ 192.168.10.196이다. /24를 같은 크기 네 개로 나누려면 서브넷 구분 비트가 2개 더 필요하므로 /26이 된다. 각 서브넷의 주소 수는 2^(32-26)=64개이며 시작 주소의 마지막 옥텟은 0, 64, 128, 192이다.

네 번째 서브넷은 .192부터 .255까지이고, 일반적인 호스트 주소 배정에서 .192는 네트워크 주소, .255는 브로드캐스트 주소다. 사용 가능한 첫 주소 .193부터 세면 .193, .194, .195, .196 순서이므로 네 번째는 .196이다. 네트워크 주소 자체를 첫 호스트로 세면 한 칸 어긋난다.

선지별 해설

  • ① 오답. 네 번째 서브넷의 네트워크 주소로 호스트 주소가 아니다.
  • ② 오답. .193부터 세면 세 번째 사용 가능 주소다.
  • ③ 정답. .193, .194, .195에 이어 네 번째가 .196이다.
  • ④ 오답. 이 서브넷의 마지막 일반 호스트 주소다.

편집 해설 근거: RFC 4632, Classless Inter-domain Routing (2006) — §3.1, prefix length와 address blocks

69. 다음 Java 코드의 출력은?

class A { int f(int x){return x+2;} int g(int x){return f(x)*2;} }
class B extends A { int f(int x){return super.f(x)+3;} }
A v=new B(); System.out.print(v.g(4));

[학습용 개정문항]
A와 B의 클래스 선언은 같은 파일에 있으며, 마지막 줄의 객체 생성과 출력문은 main 메서드 내부에서 실행한다.

  1. 12
  2. 14
  3. 16
  4. 18
정답과 해설 보기

정답: 4

정답은 ④ 18이다. v의 선언 자료형은 A이지만 실제 객체는 B이다. B는 g를 재정의하지 않았으므로 A의 g(4)를 실행한다. 그러나 g 내부의 f(x)는 현재 객체에 대한 가상 호출이어서 재정의된 B.f(4)를 선택한다.

B.f(4)의 super.f(4)는 A.f(4)를 직접 호출하여 4+2=6을 얻는다. 여기에 3을 더해 B.f는 9를 반환하고, A.g가 이를 두 배로 하여 18이다. ‘A 메서드 안에서 호출했으니 언제나 A.f’라는 판단은 틀리다. super 호출과 일반 가상 메서드 호출의 차이를 함께 추적한다.

선지별 해설

  • ① 오답. B의 재정의된 f를 무시하고 A.f 결과만 두 배로 계산했다.
  • ② 오답. super.f(4)의 +2와 B.f의 +3을 모두 반영하지 않은 값이다.
  • ③ 오답. 실제 호출 순서의 6→9→18 계산과 맞지 않는다.
  • ④ 정답. A.f(4)=6, B.f(4)=9, g(4)=18이다.

편집 해설 근거: Oracle Java SE 25 Language Specification, Chapter 15 Expressions — §15.12.4.4 Locate Method to Invoke

70. C의 정수형 자료형은?

  1. int
  2. float
  3. double
  4. void
정답과 해설 보기

정답: 1

정답은 ① int이다. int는 C의 기본 정수형 중 하나로 정수 범위의 값을 표현한다. float와 double은 실수 값을 근사 표현하는 부동소수점형이고, void는 함수가 값을 반환하지 않음을 나타내는 등의 용도로 쓰는 불완전형이다.

정수형이라고 크기가 모든 환경에서 반드시 4바이트인 것은 아니다. 구현은 C 표준이 정한 최소 범위와 크기 관계를 만족해야 하며 정확한 크기는 환경에서 확인한다. 또한 문자형 char도 C의 넓은 정수형 분류에 속하지만 이 문항의 보기에는 없으므로 네 보기 중 정수형인 int를 고른다.

선지별 해설

  • ① 정답. C의 표준 정수형이다.
  • ② 오답. 부동소수점형이다.
  • ③ 오답. float보다 낮지 않은 정밀도를 제공하는 부동소수점형이다.
  • ④ 오답. 값을 저장하는 정수형이 아니며 반환값 없음 등을 나타낸다.

편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.2.5 Types

71. 다음 C 프로그램의 출력은?

#include <stdio.h>
int main(void){ int a[4]={7,11,13,17}; int *p=a; int s=0; for(int i=1;i<4;i++) s+=p[i]; printf("%d",s); }
  1. 41
  2. 48
  3. 31
  4. 37
정답과 해설 보기

정답: 1

정답은 ① 41이다. p는 배열 a의 첫 원소를 가리키므로 p[i]는 a[i]와 같은 원소를 읽는다. 반복문의 i는 1에서 시작하고 i<4인 동안 실행하므로 1, 2, 3 세 번만 사용된다.

따라서 더하는 값은 a[1]=11, a[2]=13, a[3]=17이며 합은 11+13+17=41이다. a[0]=7은 포함하지 않는다. 배열 길이가 4라는 사실과 반복이 4번 실행된다는 판단은 같지 않다. 초기값·계속 조건·증감식을 함께 읽고 실제로 방문하는 인덱스를 먼저 나열하면 실수를 줄일 수 있다.

선지별 해설

  • ① 정답. 인덱스 1,2,3의 11+13+17 합계다.
  • ② 오답. 배열 전체 합 48로, 반복에 포함되지 않은 7까지 더했다.
  • ③ 오답. 실제로 방문하는 세 원소의 합과 일치하지 않는다.
  • ④ 오답. 시작 인덱스와 끝 조건을 적용한 합계가 아니다.

편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.5.2.1 Array subscripting; §6.8.5.3 The for statement

72. 다음 C 프로그램의 출력은?

#include <stdio.h>
int main(void){ int a[5]={5,10,15,20,25}; int i=0; int x=a[i++]; x+=a[++i]; int y=a[++i]; y+=a[i++]; printf("%d,%d",x,y); }
  1. 15,35
  2. 20,40
  3. 20,45
  4. 25,45
정답과 해설 보기

정답: 2

정답은 ② 20,40이다. 처음 i=0에서 a[i++]는 현재 인덱스 0의 값 5를 사용한 뒤 i를 1로 만든다. 다음 문장 a[++i]는 i를 먼저 2로 만든 뒤 a[2]=15를 사용하므로 x=5+15=20이다.

이어서 a[++i]는 i=3의 값 20을 y에 넣는다. 마지막 a[i++]도 증가 전 인덱스 3의 값 20을 사용한 뒤 i를 4로 만들므로 y=20+20=40이다. 각 증감이 별도의 완전한 식에 있어 앞 문장의 변화가 다음 문장 전에 끝난다. 순서가 정해지지 않은 같은 식 안의 중복 증감 예와 혼동하지 않는다.

선지별 해설

  • ① 오답. 두 번째 문장의 전위 증가를 반영하면 x는 15가 아니라 20이다.
  • ② 정답. 방문 인덱스는 0,2,3,3이며 x=20, y=40이다.
  • ③ 오답. 마지막 i++는 증가 전의 a[3]을 읽으므로 25를 더하지 않는다.
  • ④ 오답. 전위·후위 증가를 실제 순서대로 적용한 결과가 아니다.

편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.5.2.4 Postfix increment and decrement; §6.5.3.1 Prefix increment and decrement; §6.8 Expressions and statements

73. 다음 C 프로그램의 출력 문자는?

#include <stdio.h>
int main(void){ char c='0'+7; printf("%c",c); }
  1. 0
  2. 7
  3. 55
  4. 오류
정답과 해설 보기

정답: 2

정답은 ② 문자 7이다. 문자 상수 '0'의 코드값에 정수 7을 더하면 숫자 문자 '7'에 해당하는 값이 된다. C 표준은 기본 실행 문자 집합에서 숫자 문자 0부터 9의 값이 연속으로 증가하도록 요구하므로 이 계산을 반드시 ASCII 환경으로만 제한할 필요가 없다.

printf의 %c는 그 값을 문자로 출력한다. ASCII라면 내부 코드값은 55이지만 %d가 아니라 %c이므로 화면에 두 숫자 55를 출력하는 것이 아니다. 숫자 7, 문자 '7', 문자열 "7"은 서로 다른 표현이므로 어떤 값을 어떤 형식으로 출력하는지 구별한다.

선지별 해설

  • ① 오답. '0'에 7을 더했으므로 그대로 0을 출력하지 않는다.
  • ② 정답. 계산 결과의 문자값을 %c로 출력하면 7이다.
  • ③ 오답. ASCII 코드값 55를 정수로 출력하는 %d 형식이 아니다.
  • ④ 오답. 숫자 문자 연속성이 보장되므로 유효한 C 표현이다.

편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §5.2.1 Character sets ¶3; §7.21.6.1 c conversion

74. C의 비트 단위 논리 연산자가 아닌 것은?

  1. ^
  2. ?
  3. &
  4. ~
정답과 해설 보기

정답: 2

정답은 ② ?이다. C에서 ^는 비트별 XOR, &는 두 정수에 적용할 때 비트별 AND, ~는 각 비트를 반전하는 보수 연산자다. 예를 들어 같은 위치의 두 비트가 다르면 XOR 결과가 1이 되고, 둘 다 1이면 AND 결과가 1이다.

?는 :와 함께 조건 ? 참일 때의 식 : 거짓일 때의 식이라는 조건 연산자를 구성한다. 정수 각 비트에 논리 연산을 하는 용도가 아니다. &는 한 피연산자 앞에 쓰이면 주소 연산자이기도 하므로 기호만 외우기보다 문법상 피연산자 수와 자료형을 함께 본다.

선지별 해설

  • ① 오답. ^는 정수에 대한 비트별 배타적 OR이다.
  • ② 정답. ?: 조건 연산자의 일부이며 비트 단위 논리 연산자가 아니다.
  • ③ 오답. 두 정수 사이의 &는 비트별 AND이다.
  • ④ 오답. ~는 정수의 비트별 보수 연산자다.

편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.5.10 Bitwise AND; §6.5.11 Bitwise exclusive OR; §6.5.3.3 Unary arithmetic; §6.5.15 Conditional operator

75. 프레임 3개가 비어 있고 FIFO를 사용한다. 참조열 1,2,3,1,4,2,5의 페이지 부재 횟수는?

  1. 4회
  2. 5회
  3. 6회
  4. 7회
정답과 해설 보기

정답: 2

정답은 ② 5회이다. 비어 있는 세 프레임에 1,2,3을 처음 읽을 때 각각 부재가 나므로 누적 3회다. 다음 1은 이미 있어 적중하며, FIFO는 적중했다고 입장 순서를 바꾸지 않는다. 다음 4에서 가장 먼저 들어온 1을 내보내므로 4회째 부재다.

그 뒤 2는 아직 있어 적중한다. 마지막 5에서는 현재 가장 오래 머문 2를 내보내므로 누적 5회이다. 부재가 발생한 참조는 1,2,3,4,5의 다섯 위치이고, 적중한 1과 2는 다시 적재하지 않는다. 가장 오래 전에 사용한 페이지를 고르는 LRU와 도착 순서를 쓰는 FIFO를 구별한다.

선지별 해설

  • ① 오답. 빈 프레임에 처음 적재하는 경우도 페이지 부재로 세어야 한다.
  • ② 정답. 처음 세 번과 4·5의 참조에서 총 다섯 번 부재가 난다.
  • ③ 오답. 적중 참조의 FIFO 순서를 바꾸거나 잘못 교체한 결과다.
  • ④ 오답. 이미 상주한 1과 2의 참조는 적중이므로 부재가 아니다.

편집 해설 근거: Arpaci-Dusseau & Arpaci-Dusseau, OSTEP Chapter 22 Beyond Physical Memory: Policies — §22.3 A Simple Policy: FIFO

76. 소프트웨어 프레임워크에 대한 설명으로 옳은 것은?

  1. 반복 사용 가능한 기본 구조와 제어 흐름을 제공한다
  2. 정해진 구조 때문에 확장이 불가능하다
  3. 소프트웨어 아키텍처와 완전히 같은 말이다
  4. 모듈화를 사용할 수 없게 한다
정답과 해설 보기

정답: 1

정답은 ①이다. 소프트웨어 프레임워크는 자주 필요한 구성과 상호작용의 뼈대를 제공하며 응용별 기능을 정해진 확장 지점에 연결하도록 돕는다. 예를 들어 웹 프레임워크가 요청 처리 흐름을 관리하고 개발자가 특정 요청의 처리 함수를 제공할 수 있다.

일반 라이브러리를 응용 코드가 호출하는 방식과 비교하면, 프레임워크가 전체 흐름을 주도하며 응용 코드를 호출하는 제어의 역전이 자주 나타난다. 일정한 규칙이 있다고 확장이 불가능한 것은 아니다. 아키텍처는 시스템 구조에 관한 더 넓은 개념이고, 프레임워크는 재사용 가능한 구현 기반을 제공한다.

선지별 해설

  • ① 정답. 재사용 가능한 구조·협력 방식과 제어 흐름을 제공한다.
  • ② 오답. 상속·설정·콜백 등 정해진 방식으로 확장할 수 있다.
  • ③ 오답. 아키텍처라는 넓은 구조 개념과 프레임워크 구현 기반은 동일어가 아니다.
  • ④ 오답. 프레임워크는 오히려 모듈화된 협력과 재사용을 지원할 수 있다.

편집 해설 근거: Douglas C. Schmidt, Object-Oriented Patterns & Frameworks — 슬라이드 19 Overview of Frameworks; 슬라이드 27·28 Reuse Taxonomy와 Benefits

77. Java에서 예외에 대한 설명으로 틀린 것은?

  1. 모든 문법 오류는 실행 중 예외 객체로만 처리된다
  2. 배열 범위를 넘으면 실행 중 예외가 발생할 수 있다
  3. 없는 파일을 열면 예외가 발생할 수 있다
  4. 예외는 정상 흐름과 별도로 처리할 수 있다
정답과 해설 보기

정답: 1

정답은 ①이다. Java의 문법 규칙을 어긴 소스는 보통 컴파일 단계에서 오류가 나며, 그런 모든 오류가 실행 중 예외 객체로만 처리되는 것은 아니다. 실행 가능한 프로그램에서 잘못된 배열 인덱스나 파일 처리 실패 등이 발생하면 예외가 발생할 수 있다.

예외는 정상적인 명령 순서를 중단하고 해당 예외를 처리할 catch 등으로 제어를 넘기는 방식으로 다룬다. 검사 예외는 처리하거나 throws로 선언해야 하는 등 컴파일 시점의 검사 규칙도 있다. ‘컴파일 시 예외 처리를 검사한다’는 사실과 ‘소스의 모든 문법 오류가 실행 예외이다’라는 주장은 다르다.

선지별 해설

  • ① 정답. 문법 오류와 실행 중 예외를 혼동한 설명이다.
  • ② 오답. 잘못된 배열 인덱스 접근은 실행 중 예외를 발생시킬 수 있다.
  • ③ 오답. 파일을 여는 API는 파일이 없을 때 예외를 던질 수 있다.
  • ④ 오답. 예외 발생 시 정상 흐름과 구분된 처리 경로를 사용할 수 있다.

편집 해설 근거: Oracle Java SE 25 Language Specification, Chapter 11 Exceptions — §11.1 The Kinds and Causes of Exceptions; §11.2 Compile-Time Checking of Exceptions; §11.3

78. Python 조건문에서 앞선 if가 거짓일 때 다른 조건을 이어 검사하는 키워드는?

  1. either
  2. elif
  3. else if
  4. switch
정답과 해설 보기

정답: 2

정답은 ② elif이다. Python의 if 문은 위에서부터 조건을 차례로 평가하여 처음 참인 절의 본문을 실행한다. 앞의 if 조건이 거짓일 때 다른 조건을 추가로 검사하는 구문이 elif이다. 어느 조건도 참이 아니면 선택적으로 둔 else 본문을 실행한다.

예를 들어 점수가 90 이상이면 A, 그렇지 않고 80 이상이면 B로 분기할 때 if score >= 90 다음에 elif score >= 80을 둘 수 있다. Python 문법의 키워드는 elif 한 단어이며, C·Java처럼 else if를 그대로 한 줄에 적는 방식과 다르다. 들여쓰기와 콜론도 문법의 일부다.

선지별 해설

  • ① 오답. either는 Python if 문의 분기 키워드가 아니다.
  • ② 정답. 앞선 조건이 거짓일 때 이어서 조건을 평가한다.
  • ③ 오답. Python의 해당 문법은 두 단어 else if가 아니라 elif다.
  • ④ 오답. switch는 Python if 문의 조건 연결 키워드가 아니다.

편집 해설 근거: Python 3.14 Language Reference, 8.1 The if statement — §8.1 The if statement, grammar 및 execution 설명

79. OSI 계층 중 종단 시스템 사이의 신뢰성 있는 전달, 흐름 제어, 다중화를 담당하는 계층은?

  1. 전송 계층
  2. 응용 계층
  3. 세션 계층
  4. 표현 계층
정답과 해설 보기

정답: 1

정답은 ① 전송 계층이다. OSI 전송 계층은 종단 시스템 사이의 데이터 전달을 다루며 필요한 서비스 품질에 맞추어 오류 제어·흐름 제어·다중화 등을 제공한다. 여러 중간 링크를 하나씩 처리하는 데이터 링크 계층과 통신 범위가 다르다.

응용 계층은 응용이 이용할 통신 기능, 세션 계층은 대화와 동기화, 표현 계층은 데이터 구문과 표현에 관한 역할을 가진다. 다만 TCP/IP에서 전송 계층으로 분류하는 모든 프로토콜이 TCP와 같은 신뢰성을 제공하는 것은 아니다. 질문의 OSI 역할과 구체적 프로토콜의 실제 보장을 구분한다.

선지별 해설

  • ① 정답. 종단 간 전송과 그에 필요한 제어 기능에 해당한다.
  • ② 오답. 응용 프로세스에 필요한 통신 서비스에 가까운 계층이다.
  • ③ 오답. 대화 관리와 동기화 등에 관한 계층이다.
  • ④ 오답. 통신 데이터의 구문·표현 형식을 다룬다.

편집 해설 근거: ITU-T X.200 (07/1994), OSI Basic Reference Model — §7.4.2 Purpose; §7.4.4 Functions within the Transport Layer

80. 다음 C 프로그램의 출력은?

#include <stdio.h>
struct S{int total; int v[6];};
int main(void){struct S s={0,{1,2,3,4,5,6}}; for(int i=0;i<6;i+=2)s.total+=s.v[i]*2; printf("%d",s.total);}
  1. 9
  2. 12
  3. 18
  4. 24
정답과 해설 보기

정답: 3

정답은 ③ 18이다. 구조체 s.total은 0, 배열 s.v는 1,2,3,4,5,6으로 초기화된다. 반복문의 i는 0에서 시작해 2씩 증가하고 i<6 동안 실행하므로 방문 인덱스는 0,2,4이다.

따라서 각각 1×2, 3×2, 5×2를 total에 더해 2+6+10=18이 된다. 인덱스가 짝수라는 말은 배열에 저장된 값 자체가 짝수라는 뜻이 아니다. 이 배열에서는 짝수 인덱스의 값이 1,3,5이다. 구조체 멤버에는 점 연산자로 접근하고, 누적 멤버와 배열 멤버가 서로 다른 저장 공간이라는 점도 확인한다.

선지별 해설

  • ① 오답. 선택된 값 1+3+5의 합으로, 각 값에 곱하는 2가 빠졌다.
  • ② 오답. 실제 방문 인덱스 0,2,4의 가중 합이 아니다.
  • ③ 정답. 2×1+2×3+2×5=18이다.
  • ④ 오답. 짝수 값 2,4,6을 선택하는 반복이 아니다.

편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.5.2.3 Structure and union members; §6.8.5.3 The for statement; §6.7.9 Initialization

정보처리기사 필기 기출문제 · 정보시스템 구축관리

81. 암호화와 복호화에 같은 비밀키를 사용하는 알고리즘은?

  1. RSA
  2. ECC
  3. AES
  4. ElGamal
정답과 해설 보기

정답: 3

정답은 ③ AES이다. 대칭키 암호는 암호화와 복호화에 같은 비밀키를 사용한다. AES는 128비트 블록을 처리하는 대칭 블록 암호이며 키 길이는 128·192·256비트를 지원한다. 블록 길이와 키 길이를 같은 개념으로 외우지 않는다.

RSA와 ElGamal은 공개키 방식에 속하고, ECC는 타원곡선을 사용하는 공개키 암호 기술의 범주이다. 공개키 방식은 서로 관계된 공개키·개인키를 사용한다는 점에서 같은 비밀키를 공유하는 AES와 다르다. 실제 통신에서는 공개키 방식으로 키를 설정하고 대칭키로 많은 데이터를 보호하는 등 함께 사용할 수 있다.

선지별 해설

  • ① 오답. RSA는 공개키·개인키를 사용하는 비대칭 방식이다.
  • ② 오답. ECC는 타원곡선 기반 공개키 기술의 범주다.
  • ③ 정답. 같은 비밀키를 사용하는 대칭 블록 암호이다.
  • ④ 오답. ElGamal은 공개키 방식이다.

편집 해설 근거: NIST FIPS 197-upd1, Advanced Encryption Standard (2023) — 규격 소개 §3 Explanation 및 알고리즘의 key/block sizes

82. 사용자 입력을 문자열 연결로 SQL에 넣는 Java 코드의 SQL 삽입 위험을 직접 줄이는 방법은?

  1. 출력 HTML만 이스케이프한다
  2. PreparedStatement의 바인딩 변수로 값을 전달한다
  3. 로그인마다 세션 ID만 바꾼다
  4. 전송 구간에 TLS만 적용한다
정답과 해설 보기

정답: 2

정답은 ② PreparedStatement의 바인딩 변수로 값을 전달하는 것이다. SQL 명령 구조와 사용자 입력값을 분리하면 입력에 따옴표나 SQL처럼 보이는 문자열이 있어도 값으로 처리할 수 있다. 예를 들어 WHERE name = ?처럼 SQL을 정하고 사용자 이름은 setString 등으로 바인딩한다.

PreparedStatement를 생성하기 전에 입력을 SQL 문자열에 이어 붙이면 이 장점이 사라질 수 있다. 또한 테이블 이름·정렬 방향처럼 값 자리로 바인딩할 수 없는 부분에는 허용 목록 등의 별도 설계가 필요하다. HTML 이스케이프, 세션 ID 교체, TLS는 각각 다른 위협을 다루므로 SQL 구조 삽입의 직접 대책을 대신하지 않는다.

선지별 해설

  • ① 오답. HTML 출력 인코딩은 주로 브라우저의 스크립트 해석 문제를 다룬다.
  • ② 정답. SQL 구조와 입력값을 분리하여 값이 명령으로 해석되는 위험을 줄인다.
  • ③ 오답. 세션 식별자 관리는 SQL 문자열 구성의 취약점을 고치지 않는다.
  • ④ 오답. 전송 암호화만으로 서버가 입력을 SQL로 해석하는 문제는 막지 못한다.

편집 해설 근거: OWASP — SQL Injection Prevention — Defense Option 1: Prepared Statements; Safe Java Prepared Statement Example; Allow-list Input Validation

83. 개별 급여를 그대로 제공하지 않고 부서별 평균 급여로 바꿔 분석 자료를 만드는 비식별 처리 방식은?

  1. 가명처리
  2. 총계처리
  3. 마스킹
  4. 난수화
정답과 해설 보기

정답: 2

정답은 ② 총계처리이다. 개별 사람의 급여를 그대로 나열하는 대신 부서라는 집단의 평균값 같은 집계 통계로 바꾸는 방식이다. 여기서 총계는 합계만 뜻하는 것이 아니라 평균 등 여러 사람의 값을 묶은 통계적 표현을 포함한다.

가명처리는 식별자를 다른 값으로 치환하는 것, 마스킹은 일부 내용을 가리거나 제거하는 것, 난수화는 값에 무작위성을 넣는 접근이다. 평균을 공개했다고 개인정보 위험이 자동으로 없어지는 것은 아니다. 부서원이 한 명이거나 여러 집계 결과를 비교할 수 있으면 개인값을 추론할 수 있어 공개 범위와 다른 정보의 결합을 함께 검토해야 한다.

선지별 해설

  • ① 오답. 이름 등을 별도 식별자로 바꾸는 방식이며 평균으로 집계한 것이 아니다.
  • ② 정답. 개인값 대신 집단 평균이라는 집계값을 제공한다.
  • ③ 오답. 특정 부분을 가리는 방식과 집단 평균 계산은 다르다.
  • ④ 오답. 무작위 값을 섞는 과정이 제시되지 않았다.

편집 해설 근거: NIST SP 800-188, De-Identifying Government Datasets (2023) — §4.3.8 Challenges Posed by Aggregation Techniques

84. 개발 방법론 테일러링에 대한 설명으로 틀린 것은?

  1. 예상되는 변화는 배제하고 원래 절차를 그대로 따른다
  2. 프로젝트 규모와 위험에 맞춰 절차와 산출물을 조정한다
  3. 불필요한 활동은 근거를 남기고 축소할 수 있다
  4. 필요한 품질·통제 활동은 강화할 수 있다
정답과 해설 보기

정답: 1

정답은 ①이다. 테일러링은 프로젝트의 규모, 위험, 요구, 조직 상황에 맞게 개발 절차와 산출물을 조정하는 활동이다. 작은 내부 도구와 안전성이 중요한 대형 시스템에 완전히 같은 절차를 아무 판단 없이 적용할 필요는 없다.

불필요한 활동을 줄일 때도 목적과 근거를 남기고 필요한 품질 확인이나 변경 통제는 유지·강화할 수 있다. 앞으로 예상되는 변화를 배제하고 원래 절차만 고집하는 것은 적합하게 조정한다는 취지에 맞지 않는다. 테일러링을 모든 검토를 마음대로 생략하는 허가로 해석해서도 안 된다.

선지별 해설

  • ① 정답. 상황과 변화를 고려하지 않고 고정 절차를 강제하는 설명은 취지에 반한다.
  • ② 오답. 규모·위험에 따라 적합한 절차를 선택·조정할 수 있다.
  • ③ 오답. 필요성과 근거를 평가하여 불필요한 활동을 축소할 수 있다.
  • ④ 오답. 중요한 품질·통제 활동을 강화하는 조정도 가능하다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Engineering Management §2 Project Planning

85. 호스트로 들어오는 TCP 연결을 서비스·클라이언트 주소 규칙에 따라 허용하거나 거부하는 전통적 접근제어 도구는?

  1. TCP Wrapper
  2. Trace Checker
  3. Token Finder
  4. Change Detector
정답과 해설 보기

정답: 1

정답은 ① TCP Wrapper이다. 전통적인 tcpd는 서비스 실행 앞에서 접속한 클라이언트의 주소·이름과 서비스별 접근 규칙 등을 검사해 허용 여부를 결정하는 도구다. 대표적인 규칙 파일로 hosts.allow와 hosts.deny가 있다.

이는 모든 TCP 통신에 자동으로 적용되는 보편적 기능이 아니다. tcpd를 거치거나 관련 라이브러리를 사용하는 서비스에서 작동하며, 현대 운영체제·서비스의 지원 여부는 별도로 확인해야 한다. 네트워크 패킷 전체를 제어하는 방화벽과 동일한 도구라고 외우지 않는다. 이 문항은 전통적 접근제어 도구의 이름을 묻는다.

선지별 해설

  • ① 정답. 서비스·클라이언트 규칙을 적용하는 전통적 래퍼 도구다.
  • ② 오답. 문항이 설명한 tcpd 기반 접근제어 도구의 이름이 아니다.
  • ③ 오답. TCP 서비스 접근 규칙을 적용하는 도구 명칭이 아니다.
  • ④ 오답. 파일이나 상태의 변경 탐지와 접속 허용 규칙은 다른 역할이다.

편집 해설 근거: Debian tcpd(8) package manual — tcpd(8), DESCRIPTION·ACCESS CONTROL·FILES (Debian bookworm tcpd 7.6.q-32)

86. 대량 데이터에서 변수 사이 관계와 반복 패턴을 찾아 분류·예측 등에 활용하는 분석 기술은?

  1. 데이터 마이닝
  2. WM-Bus
  3. 디지털 트윈
  4. Zigbee
정답과 해설 보기

정답: 1

정답은 ① 데이터 마이닝이다. 많은 데이터에서 반복되는 패턴과 변수 사이 관계를 찾아 분류·예측·군집화 등에 활용하는 분석이다. 예를 들어 구매 기록에서 함께 구매되는 상품 관계를 찾거나 비슷한 행동의 고객 그룹을 탐색할 수 있다.

데이터를 단순히 많이 저장하는 것과 그 안에서 패턴을 찾는 일은 다르다. WM-Bus와 Zigbee는 통신 기술에 관한 이름이고, 디지털 트윈은 물리적 대상과 연결된 디지털 표현을 활용하는 개념이다. 데이터 마이닝에서 발견한 상관관계가 곧바로 인과관계를 증명하는 것도 아니므로 분석 결과를 해석할 때 구별해야 한다.

선지별 해설

  • ① 정답. 데이터의 관계·패턴을 분석하여 분류와 예측 등에 활용한다.
  • ② 오답. 미터링 등의 무선 통신에 관한 기술이다.
  • ③ 오답. 물리 대상의 디지털 표현과 연결을 활용하는 개념이다.
  • ④ 오답. 저전력 무선 네트워크 통신 기술이다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Computing Foundations §6.6 Data Mining and Data Warehousing, pp.16-19~16-20

87. 범용 서버 여러 대에 데이터를 분산 저장하고 병렬 처리하기 위한 오픈 소스 생태계는?

  1. Hadoop
  2. Beacon
  3. Foursquare
  4. Memristor
정답과 해설 보기

정답: 1

정답은 ① Hadoop이다. Hadoop은 여러 서버에 데이터를 분산 저장하고 처리하는 오픈 소스 생태계다. HDFS는 분산 파일 저장을, YARN은 자원 관리와 작업 실행 기반을, MapReduce는 분산 처리 모델과 실행을 제공하는 주요 구성요소이다.

큰 데이터를 여러 노드가 나누어 다룰 수 있지만 서버 수만 늘리면 아무 작업이나 자동으로 빨라지는 것은 아니다. 분산 저장·처리의 통신과 관리 비용도 고려해야 한다. Beacon은 근거리 신호·위치 관련 문맥에서 쓰이고, Foursquare는 위치 서비스 이름, Memristor는 전자 소자 개념이다.

선지별 해설

  • ① 정답. 분산 저장과 대규모 병렬 처리를 제공하는 생태계다.
  • ② 오답. 근거리 신호·발견 등의 개념으로 Hadoop 같은 처리 생태계가 아니다.
  • ③ 오답. 위치 기반 서비스의 이름이다.
  • ④ 오답. 전자회로 소자 개념이며 분산 처리 소프트웨어 생태계가 아니다.

편집 해설 근거: Apache Hadoop documentation — Apache Hadoop 3.5.0 documentation, Overview 및 HDFS·YARN·MapReduce 항목

88. 여러 서버를 묶어 한 노드 장애 시 다른 노드가 서비스를 이어받게 하는 구성의 주목적은?

  1. 고가용성
  2. 단일 지점 연결
  3. 패킷 라우팅
  4. 악성코드 확산
정답과 해설 보기

정답: 1

정답은 ① 고가용성이다. 한 서버가 고장 나도 다른 서버가 서비스를 이어받도록 구성하면 서비스 중단 시간을 줄일 수 있다. 이처럼 필요한 때 서비스를 이용할 수 있도록 유지하는 것이 가용성의 목표이고, 장애 시 역할을 넘기는 동작은 장애 조치라고 한다.

여러 서버를 둔다고 무조건 무중단이 보장되는 것은 아니다. 장애 감지, 데이터 동기화, 전환 절차와 공통 장애 지점까지 함께 설계해야 한다. 패킷 라우팅은 경로를 정하는 기능이고, 단일 지점 연결이나 악성코드 확산은 이러한 구성의 목적이 아니다. 성능 분산과 가용성 향상도 관련될 수 있으나 질문의 핵심은 장애 후 서비스 지속이다.

선지별 해설

  • ① 정답. 노드 장애가 서비스 중단으로 이어지는 시간을 줄이려는 목적이다.
  • ② 오답. 단일 지점에 의존하도록 만드는 것이 목표가 아니다.
  • ③ 오답. 경로 선택 기능이 아니라 서버 장애 시 서비스 지속을 묻는다.
  • ④ 오답. 악성코드 확산은 방지할 위험이지 구성 목적이 아니다.

편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Engineering Operations §2.3 Software Availability and Continuity; §2.5 Backup, Disaster Recovery and Failover

89. 파일을 암호화하거나 시스템을 잠근 뒤 복구 대가로 금전을 요구하는 악성코드는?

  1. 포맷 문자열
  2. 랜섬웨어
  3. 버퍼 오버플로
  4. 애드웨어
정답과 해설 보기

정답: 2

정답은 ② 랜섬웨어이다. 파일을 암호화하거나 기기의 정상 접근을 막고 복구·접근 허용의 대가를 요구하는 악성 소프트웨어다. 질문의 핵심은 파일 암호화라는 기술 하나보다 접근 차단과 금전 요구가 결합된 목적이다.

포맷 문자열과 버퍼 오버플로는 프로그램 입력 처리와 메모리 사용의 취약점 유형이며, 특정 악성코드의 이름이 아니다. 애드웨어는 광고 표시 등에 초점을 둔다. 정상 보안 프로그램도 파일을 암호화할 수 있으므로 암호화 기능이 있다는 사실만으로 랜섬웨어라고 판정하지 않는다. 사용자의 허가와 공격 목적을 함께 구별한다.

선지별 해설

  • ① 오답. 형식 문자열 처리와 관련한 취약점 유형이다.
  • ② 정답. 접근을 막고 복구 등의 대가를 요구하는 악성코드다.
  • ③ 오답. 버퍼 경계를 넘는 메모리 접근 취약점 유형이다.
  • ④ 오답. 주로 광고 노출에 관련된 소프트웨어 범주다.

편집 해설 근거: CISA, #StopRansomware Guide (2023 update) — Introduction, What is ransomware?

90. 정보보안의 CIA 3요소에 포함되지 않는 것은?

  1. 기밀성
  2. 무결성
  3. 가용성
  4. 휘발성
정답과 해설 보기

정답: 4

정답은 ④ 휘발성이다. CIA는 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability)의 약자다. 기밀성은 허가되지 않은 정보 노출을 제한하고, 무결성은 부적절한 변경·파괴로부터 정보를 보호하며, 가용성은 필요한 때 신뢰할 수 있게 접근·이용하도록 한다.

휘발성은 전원이나 보존 조건에 따라 저장 내용이 유지되는가 같은 성질을 가리킨다. 시스템 설계에서 중요할 수 있지만 CIA의 세 보안 목표 이름에 포함되지는 않는다. 예를 들어 정보가 비밀이어도 잘못 변경되거나 필요할 때 이용할 수 없으면 다른 보안 목표가 훼손될 수 있다.

선지별 해설

  • ① 오답. Confidentiality에 해당하는 CIA 구성 요소다.
  • ② 오답. Integrity에 해당하는 CIA 구성 요소다.
  • ③ 오답. Availability에 해당하는 CIA 구성 요소다.
  • ④ 정답. CIA 약자의 어느 요소에도 해당하지 않는다.

편집 해설 근거: NIST FIPS 199 — Security Objectives 및 보안 영향 수준 표

91. 운영체제 보안 강화 방안으로 가장 부적절한 것은?

  1. 기본 관리자 계정 이름과 설정을 그대로 유지한다
  2. 반복 로그인 실패 시 잠금 정책을 둔다
  3. 불필요한 서비스를 중지한다
  4. 보안 업데이트를 검토해 적용한다
정답과 해설 보기

정답: 1

정답은 ① 기본 관리자 계정 이름과 설정을 그대로 유지한다는 설명이다. 설치 기본값을 조직의 보안 요구와 대조하지 않으면 불필요한 계정·권한·접속 경로가 남을 수 있다. 필요 없는 기본 계정은 비활성화하고, 유지할 관리자 계정은 접근 범위와 인증 정책을 강화해야 한다.

NIST 지침은 필요한 기본 계정에 대해 가능한 경우 이름을 변경하고 암호와 접근 정책을 조정하도록 설명한다. 다만 계정 이름을 바꾸는 것만으로 인증 보안이 완성되지는 않는다. 실패 횟수에 따른 잠금 정책, 불필요한 서비스 중지, 보안 업데이트의 검토·적용을 함께 사용한다. 잠금 정책도 악의적인 계정 잠금으로 정상 사용이 막히지 않도록 설계해야 한다.

선지별 해설

  • ① 정답. 기본 계정과 설정을 점검 없이 유지하는 것은 보안 강화 방향에 맞지 않는다.
  • ② 오답. 적절한 실패 제한·잠금 정책은 인증 시도를 통제하는 대책이다.
  • ③ 오답. 불필요한 서비스를 줄이면 공격 표면이 줄어든다.
  • ④ 오답. 보안 업데이트의 영향 확인과 적용은 기본 유지관리 대책이다.

편집 해설 근거: NIST SP 800-123 — General Server Security — SP 800-123, §4.1.1 Patch and Upgrade; §4.1.2 Remove or Disable; §4.1.3 Configure User Authentication

92. 앞 암호문 블록을 블록 암호 입력으로 되먹이고 그 출력과 평문을 XOR해 암호문을 만드는 모드는?

  1. ECB
  2. CBC
  3. CFB
  4. OFB
정답과 해설 보기

정답: 3

정답은 ③ CFB이다. 한 블록씩 처리하는 CFB에서는 직전 암호문을 블록 암호의 암호화 함수에 넣고, 그 출력과 현재 평문을 XOR하여 새 암호문을 만든다. 첫 블록에서는 직전 암호문 대신 초기화 벡터 IV를 사용한다.

CBC는 평문과 직전 암호문을 먼저 XOR한 뒤 블록 암호에 넣으므로 연산 순서가 다르다. OFB는 암호문이 아니라 블록 암호의 이전 출력을 되먹인다. ECB는 각 블록을 독립적으로 처리하여 이런 되먹임이 없다. 일반 CFB에는 블록보다 작은 세그먼트를 처리하는 형태도 있으므로 되먹임 대상과 XOR 위치가 핵심 판단 단서다.

선지별 해설

  • ① 오답. 각 블록을 독립 처리하며 직전 암호문을 되먹이지 않는다.
  • ② 오답. XOR를 먼저 수행한 결과를 암호 함수에 넣는 방식이다.
  • ③ 정답. 암호문 되먹임의 암호화 출력과 평문을 XOR한다.
  • ④ 오답. 되먹이는 것은 이전 암호문이 아니라 암호 함수의 출력이다.

편집 해설 근거: NIST SP 800-38A (2001), Block Cipher Modes of Operation — §6.1 ECB; §6.2 CBC; §6.3 CFB; §6.4 OFB

93. 승인되지 않은 방식으로 정보가 변경·삭제되지 않고 정확성과 완전성이 유지되는 성질은?

  1. 신뢰성
  2. 상호운용성
  3. 무결성
  4. 사용성
정답과 해설 보기

정답: 3

정답은 ③ 무결성이다. 정보가 승인되지 않은 방식으로 바뀌거나 삭제되지 않도록 하고 정확성과 완전성을 유지하는 보안 성질이다. 예를 들어 송금 금액이 허가 없이 바뀌지 않았는지 확인하는 것은 무결성의 관점이다.

기밀성은 내용을 허가받지 않은 사람이 보지 못하게 하는 성질이고, 가용성은 필요한 때 이용할 수 있는 성질이다. 신뢰성·상호운용성·사용성도 시스템 품질에서 중요한 개념이지만 각각 안정적인 기능 수행, 다른 시스템과의 협력, 사용의 용이성 등에 초점을 둔다. 정보 변경과 파괴라는 단서로 무결성을 고른다.

선지별 해설

  • ① 오답. 요구된 기능을 일관되게 수행하는 품질과 관련되며 질문의 보안 성질 명칭은 아니다.
  • ② 오답. 다른 시스템과 정보를 교환하고 함께 동작하는 성질이다.
  • ③ 정답. 부적절한 정보 변경·삭제로부터 정확성과 완전성을 지킨다.
  • ④ 오답. 사용자가 쉽게 이해하고 조작할 수 있는가에 관한 품질이다.

편집 해설 근거: NIST FIPS 199 — Security Objectives, Integrity 정의

94. 일반적인 위험관리 흐름으로 가장 자연스러운 것은?

  1. 분석·평가→계획→감시→식별
  2. 식별→분석·평가→대응 계획→감시·조치
  3. 계획→감시→식별→평가
  4. 감시→식별→계획→평가
정답과 해설 보기

정답: 2

정답은 ② 식별→분석·평가→대응 계획→감시·조치이다. 우선 어떤 위험이 있는지 찾아야 발생 가능성과 영향을 평가하고, 그 결과에 맞는 대응 우선순위와 조치를 정할 수 있다. 이후 지표와 조치의 효과를 추적하여 필요한 통제를 이어 간다.

예를 들어 공급 지연 가능성을 찾고, 일정 영향과 확률을 판단한 뒤 대체 공급 계획을 세우며, 실제 납기 상태를 감시하는 흐름이다. 위험관리는 한번 끝나는 직선 절차가 아니며 감시 중 새 위험이 발견되면 다시 식별·평가한다. 이미 진행 중인 프로젝트의 어느 순간이든 활동을 반복할 수 있다는 점과 기본 설명 순서를 구별한다.

선지별 해설

  • ① 오답. 처음 흐름에서 분석할 위험을 식별하는 단계가 맨 뒤에 놓였다.
  • ② 정답. 위험을 찾고 평가한 뒤 대응하고 그 결과를 추적하는 기본 흐름이다.
  • ③ 오답. 무엇을 다룰지 식별·평가하기 전에 대응 계획을 확정하는 순서다.
  • ④ 오답. 대응 계획 전에 위험 분석·평가가 필요하다는 관계가 뒤집혔다.

편집 해설 근거: CMU Software Engineering Institute, Continuous Risk Management Guidebook (1996) — Chapter 10, Continuous Risk Management Functions, pp.116~118

95. 작업 기간은 A=4일, B=5일, C=2일, D=3일, E=4일이다. 시작부터 완료까지 가능한 작업 경로는 A-B-D, A-C-D, A-C-E이며, 각 작업은 경로상 선행 작업이 끝나야 시작한다. 별도 자원·날짜 제약이 없을 때 임계경로의 기간은?

[학습용 개정문항]

  1. 10일
  2. 11일
  3. 12일
  4. 13일
정답과 해설 보기

정답: 3

정답은 ③ 12일이다. 개정된 작업 기간으로 각 경로를 합하면 A-B-D는 4+5+3=12일, A-C-D는 4+2+3=9일, A-C-E는 4+2+4=10일이다. 선후관계만 있고 별도 자원·날짜 제약이 없는 이 조건에서는 가장 긴 경로가 프로젝트 완료 시점을 결정한다.

따라서 임계경로는 A-B-D이고 기간은 12일이다. 빨리 끝나는 경로가 있어도 모든 필요한 작업이 끝나야 하므로 최단 경로 9일을 선택하지 않는다. 기존 문항은 같은 A·C 작업에 경로별로 다른 기간을 적어 네트워크 조건이 일관되지 않았다. 각 작업에 하나의 기간을 적용하도록 바로잡았다.

선지별 해설

  • ① 오답. A-C-E 경로의 10일로, 가장 긴 경로가 아니다.
  • ② 오답. 개정된 세 경로의 합과 최댓값은 11일이 아니다.
  • ③ 정답. 가장 긴 A-B-D 경로의 합이 12일이다.
  • ④ 오답. 제시된 작업 기간으로 13일인 경로는 없다.

편집 해설 근거: U.S. GAO, Schedule Assessment Guide GAO-16-89G (2015) — Best Practice 6, The Critical Path and the Longest Path, p.77

96. 근거리 기기들이 제조사와 운영체제 차이를 넘어 서비스를 발견하고 통신하도록 만든 오픈 소스 프레임워크는?

  1. MEC
  2. AllJoyn
  3. NOMA
  4. NDN
정답과 해설 보기

정답: 2

정답은 ② AllJoyn이다. AllJoyn은 서로 다른 기기와 응용이 근거리의 분산 환경에서 서비스를 알리고, 발견하고, 연결하여 기능을 이용할 수 있도록 만든 오픈 소스 프레임워크다. 공통 버스와 발견 가능한 인터페이스를 통해 협력하는 구조를 제공했다.

MEC는 사용자·기기와 가까운 곳에 컴퓨팅 기능을 배치하는 에지 컴퓨팅 개념이고, NOMA는 무선 다중 접속 방식, NDN은 데이터 이름을 중심으로 한 네트워킹 구조다. 이 문항은 AllJoyn의 역사적 기술 역할을 묻는 것이며, 보존된 프로젝트 문서를 근거로 현재 신규 도입이나 유지보수 상태를 보장하지는 않는다.

선지별 해설

  • ① 오답. 네트워크 가장자리의 컴퓨팅 배치 개념이다.
  • ② 정답. 이기종 기기의 서비스 발견과 통신을 지원한 프레임워크다.
  • ③ 오답. 비직교 다중 접속이라는 무선 기술이다.
  • ④ 오답. 이름 붙은 데이터를 중심으로 하는 네트워크 아키텍처다.

편집 해설 근거: AllJoyn project, System Description (보존 문서) — System Description, Introduction·AllJoyn Bus 및 Advertisement and Discovery

97. 정상 사용자의 서비스 이용을 방해하는 서비스 거부(DoS) 공격 기법으로 분류되지 않는 것은?

[학습용 개정문항]

  1. Land attack
  2. Teardrop
  3. Smurf
  4. Phishing
정답과 해설 보기

정답: 4

정답은 ④ Phishing이다. 피싱은 신뢰할 만한 상대처럼 속여 민감한 정보나 위험한 행동을 유도하는 사회공학이다. 정상 사용자가 서비스를 쓰지 못하도록 시스템을 중단시키거나 자원을 소진하는 서비스 거부 공격의 대표 기법과 분류가 다르다.

Land와 Teardrop은 과거 특정 패킷 처리 취약점을 이용해 대상이 멈추거나 비정상 종료하게 만든 공격이고, Smurf는 반사·증폭 응답으로 가용성을 해친다. 이 공격들을 모두 단순 연결 수 고갈만으로 설명하면 부정확하므로 질문을 서비스 이용 방해라는 넓은 목적에 맞게 고쳤다. 모든 최신 시스템이 옛 취약점을 가진다는 뜻도 아니다.

선지별 해설

  • ① 오답. 취약한 TCP/IP 구현을 멈추게 할 수 있었던 서비스 거부 공격이다.
  • ② 오답. IP 단편 재조립 취약점으로 시스템 중단을 일으킨 서비스 거부 공격이다.
  • ③ 오답. 다수 응답을 피해자에게 집중시키는 서비스 거부 공격이다.
  • ④ 정답. 사칭·기만을 이용한 사회공학으로, 제시된 DoS 기법 분류와 다르다.

편집 해설 근거: CERT/CC Advisory CA-97.28, IP Denial-of-Service Attacks (1997, OpenNET 보존 사본) — CERT/CC CA-97.28, I Description; II Impact; RFC 2644, Changing the Default for Directed Broadcasts in Routers (1999) — §2 Discussion; NIST CSRC Glossary — phishing — Definitions

98. 서버에 저장장치를 직접 연결하는 DAS에서 일반적으로 사용하는 저장장치 인터페이스가 아닌 것은?

  1. SATA
  2. SCSI
  3. NFS
  4. SAS
정답과 해설 보기

정답: 3

정답은 ③ NFS이다. DAS는 저장장치를 서버에 직접 연결하는 구성이고, SATA·SCSI·SAS는 그 저장장치 연결과 명령 전달에 쓰는 인터페이스 계열이다. 반면 NFS는 네트워크를 통해 다른 시스템의 파일에 접근하기 위한 파일 서비스 프로토콜이다.

예를 들어 서버 안의 SATA 디스크를 서버가 직접 사용하는 것과, 그 서버의 파일을 다른 컴퓨터가 NFS로 읽는 것은 서로 다른 계층의 동작이다. NFS 서버 내부의 디스크가 SATA로 연결될 수는 있지만 그 사실로 NFS 자체가 직접 연결 디스크 인터페이스가 되는 것은 아니다. 연결 구조와 원격 파일 접근 방식을 구분한다.

선지별 해설

  • ① 오답. 저장장치 직접 연결에 사용하는 인터페이스다.
  • ② 오답. 저장장치 명령·연결에 사용하는 인터페이스 계열이다.
  • ③ 정답. 네트워크 파일 접근 프로토콜로 직접 디스크 연결 인터페이스가 아니다.
  • ④ 오답. 직렬 연결 SCSI 계열의 저장장치 인터페이스다.

편집 해설 근거: IETF RFC 1813 — NFS Version 3 — NFS Version 3 Protocol Specification, Introduction 및 Protocol Description; IEEE Computer Society, SWEBOK Guide V4.0a — Computing Foundations §6.2 Data Models and Storage Models, p.16-18

99. 공격 대상의 주소를 출발지로 위조한 ICMP 요청을 브로드캐스트망에 보내 다수 응답을 피해자에게 집중시키는 공격은?

  1. Teardrop
  2. Smishing
  3. Qshing
  4. Smurf
정답과 해설 보기

정답: 4

정답은 ④ Smurf이다. 공격자가 ICMP 요청의 출발지를 피해자 주소로 속여 브로드캐스트 대상에 보내면, 응답하는 여러 장치의 패킷이 피해자 쪽으로 모일 수 있다. 요청 한 번이 여러 응답으로 커지는 반사·증폭의 특징이 핵심이다.

Teardrop은 IP 단편 재조립의 취약점과 관련되고, Smishing은 문자메시지를 이용한 피싱, Qshing은 QR 코드를 매개로 한 피싱을 가리킨다. RFC 2644가 지향성 브로드캐스트 수신·전달을 기본적으로 막도록 한 배경에도 Smurf 증폭 문제가 있다. 이름의 철자가 비슷하더라도 브로드캐스트 증폭과 사람을 속이는 경로를 구분한다.

선지별 해설

  • ① 오답. 단편 재조립 취약점과 관련되며 다수 ICMP 응답의 증폭과 다르다.
  • ② 오답. 문자메시지를 통한 피싱에 관한 용어다.
  • ③ 오답. QR 코드를 통한 피싱에 관한 용어다.
  • ④ 정답. 위조 출발지와 브로드캐스트를 이용해 응답을 피해자에게 증폭한다.

편집 해설 근거: RFC 2644, Changing the Default for Directed Broadcasts in Routers (1999) — §2 Discussion; §3 Recommendation; CERT/CC Advisory CA-97.28, IP Denial-of-Service Attacks (1997, OpenNET 보존 사본) — I Description, Topic 1 Teardrop

100. Google Brain 팀에서 시작되어 공개된 기계학습용 오픈 소스 라이브러리는?

  1. Tajo
  2. One Seg
  3. Foursquare
  4. TensorFlow
정답과 해설 보기

정답: 4

정답은 ④ TensorFlow이다. Google이 개발하여 공개한 기계학습 시스템으로, 계산을 텐서와 연산의 흐름으로 표현하고 학습 모델을 구성·실행하는 데 사용한다. Google Brain의 연구·개발에서 출발한 계보와 2015년 공개 사실이 질문의 결정적 단서다.

Tajo는 분산 데이터 처리를 위한 SQL 계열 프로젝트, One Seg는 방송 수신 방식, Foursquare는 위치 기반 서비스의 이름이다. TensorFlow가 기계학습을 지원한다고 해서 데이터 준비나 모델 검증이 필요 없어지는 것은 아니다. 이 문항은 현재 인기 순위나 성능 우열이 아니라 기술의 출처와 용도를 구별한다.

선지별 해설

  • ① 오답. 분산 SQL 데이터 처리와 관련된 프로젝트로 질문의 기계학습 시스템이 아니다.
  • ② 오답. 방송 전송·수신 방식에 관한 이름이다.
  • ③ 오답. 위치 기반 서비스의 이름이다.
  • ④ 정답. Google에서 출발해 공개된 기계학습 시스템이다.

편집 해설 근거: Google Brain, Computer Systems for Machine Learning (보존된 팀 소개) — Computer Systems for Machine Learning, DistBelief·TensorFlow 및 2015년 11월 공개 설명

정보처리기사 필기 기출문제 학습 방법

먼저 PDF 문제지를 시간에 맞춰 푼 뒤, 이 글에서 오답의 정답·해설·근거를 확인하세요. 법규 문항은 근거 기준일 이후 개정 여부도 함께 확인하는 것이 안전합니다.

정보처리기사 과년도 전체 보기

자료 기준·검수 정보