문제지 PDF · 웹 정답 해설
정보처리기사 필기 2023년 1회 CBT 편집복원 100문항
정보처리기사 필기 2023년 1회 CBT 편집복원 100문항을 과목별로 풀고 문항별 정답과 상세해설을 확인하세요.
© 자격증3001. 이 정보처리기사 필기 기출문제 게시물의 문제 재구성 문장, 해설, 재작성 도식, 편집 및 PDF 디자인은 자격증3001의 저작권 보호를 받습니다. 국가기술자격 시험 및 관련 명칭의 권리는 해당 기관에 있으며, 본 자료는 Q-Net 공식 문제지 또는 공식 해설이 아닙니다. 무단 복제·재배포를 금합니다.
정보처리기사 필기 2023년 1회 CBT 편집복원 100문항 안내
정보처리기사 필기 2023년 1회 CBT 편집복원 100문항을 과목별로 풀고 문항별 정답과 상세해설을 확인하세요.
2023년 1회 범위의 후기복원 분류 대표 학습 세트입니다. CBT 원문이나 공식 정답표를 제공하는 자료가 아닙니다. 100문항의 해설을 기술 문서와 필요한 독립 계산으로 새로 편집 검토했으며, 질문·조건·보기를 바로잡은 문항은 학습용 개정문항으로 표시합니다.
정보처리기사 필기 기출문제 · 소프트웨어 설계
1. 설계 문서 작성자가 동료 회의를 열어 처리 흐름을 설명하고 질문을 받았으며, 참가자 한 명이 발견한 결함과 의견을 기록했다. 인스펙션용 공식 체크리스트와 진입·종료 기준은 사용하지 않았다. 이 활동에 대한 설명으로 적절하지 않은 것은?
[학습용 개정문항]
- 구현 전에 설계 결함을 찾는 데 활용할 수 있다.
- 공식 인스펙션과 절차·역할이 완전히 동일하다.
- 작성자의 설명을 바탕으로 참가자가 개선 의견을 제시할 수 있다.
- 워크스루 방식의 동료 검토에 해당한다.
정답과 해설 보기
정답: 2
정답은 ②이다. 작성자가 산출물의 흐름을 설명하고 동료의 질문과 개선 의견을 받는 활동은 워크스루에 해당한다. 프로그램을 실행하지 않고 문서를 검토하므로 구현 전에도 결함을 찾을 수 있다. 인스펙션은 정해진 역할, 개별 준비, 진입·종료 기준 등을 사용하는 공식 검토이다. 워크스루에도 기록을 남기는 역할이 있으며 형식성의 정도는 달라질 수 있지만, 두 검토가 언제나 동일한 절차와 역할을 사용한다는 설명은 틀리다.
선지별 해설
- 설계 문서의 모순과 누락은 구현 전에 정적 검토로 발견할 수 있다.
- 워크스루와 인스펙션의 절차·역할·형식성이 항상 같지는 않다.
- 설명을 듣고 질문과 개선 의견을 제시하는 활동에 맞는다.
- 작성자가 주도하는 단계별 검토이므로 워크스루로 해석한다.
편집 해설 근거: ISTQB CTFL 2018 Syllabus v3.1.1 (2021-07-01) — §3.2.3 Review Types — Walkthrough; Inspection
2. 설계 검토 회의에서 다음 항목을 판단한다. 요구사항 변경의 영향을 양방향으로 추적할 수 있도록 요구사항 추적 매트릭스를 구성하려 한다. 기록 항목의 조합으로 가장 적절한 것은?
- 요구사항 식별자, 관련 설계 요소, 검증 테스트 케이스와 변경 상태
- 테스트 케이스와 실행 결과
- 요구사항 식별자와 우선순위
- 설계 모듈과 담당 개발자
정답과 해설 보기
정답: 1
정답은 ①이다. 요구사항 추적 매트릭스는 요구사항과 그 요구를 구현하는 설계, 검증하는 테스트 사이의 연결을 기록한다. 요구사항이 바뀌면 영향을 받는 설계와 시험을 찾고, 반대로 시험 실패나 설계 변경에서 관련 요구사항으로 돌아갈 수 있어야 한다. 식별자는 연결의 기준이 되고 변경 상태는 반영 여부를 확인하는 데 도움이 된다. 테스트 결과만 모으거나 담당자만 기록하면 요구사항부터 검증까지 이어지는 양방향 추적을 충분히 지원하지 못한다.
선지별 해설
- 요구사항·설계·시험의 연결과 변경 상태를 함께 추적할 수 있다.
- 실행 결과만으로는 해당 시험이 검증하는 요구사항과 설계가 드러나지 않는다.
- 우선순위는 작업 판단에 유용하지만 구현·검증 연결이 빠져 있다.
- 모듈 담당자만으로는 요구사항과 시험의 연관성을 확인하기 어렵다.
편집 해설 근거: NASA Systems Engineering Handbook — 6.2 Requirements Management — §6.2.1.2.2–6.2.1.2.3
3. 설계 검토 회의에서 다음 항목을 판단한다. 메시지 지향 미들웨어(MOM)에 대한 기술로 틀린 설명을 고르면?
- 서로 다른 플랫폼의 응용 사이에서 비동기 메시지를 전달할 수 있다.
- 송신자와 수신자가 같은 연결에서 즉시 응답을 주고받아야만 사용할 수 있다.
- 큐를 이용해 송신 시점과 수신 처리 시점을 분리할 수 있다.
- 수신자가 처리할 때까지 메시지를 저장하도록 구성할 수 있다.
정답과 해설 보기
정답: 2
정답은 ②이다. 메시지 지향 미들웨어는 응용 프로그램 사이에서 메시지를 전달하고 송신과 수신 처리의 결합을 줄인다. 큐에 메시지를 넣은 후 송신자가 다른 작업을 계속하고 수신자가 나중에 처리하는 비동기 방식이 가능하다. 따라서 양쪽이 같은 연결에서 즉시 응답해야만 한다는 설명은 잘못된 제한이다. 메시지를 보관하도록 설정할 수 있지만, 보존 기간과 지속성, 확인 응답 등의 설정 없이 모든 장애에서 무손실 전달이 자동 보장되는 것은 아니다.
선지별 해설
- 서로 다른 응용 사이의 비동기 메시지 교환을 지원할 수 있다.
- 즉시 응답이 필수인 동기 호출만 가능한 구조는 아니다.
- 큐는 메시지 발행 시점과 실제 소비 시점을 분리한다.
- 지속성과 보존 정책을 설정하여 수신 처리 전 메시지를 보관할 수 있다.
편집 해설 근거: Oracle Java EE 7 Tutorial, Overview of the JMS API — 45.1.1 What Is Messaging?; 45.1.2 What Is the JMS API?
4. 설계 검토 회의에서 다음 항목을 판단한다. PaymentService가 TaxPolicy 인터페이스에 정의된 연산을 구현한다. UML 관계로 가장 알맞은 것은?
- 집합(Aggregation)
- 일반화(Generalization)
- 실체화(Realization)
- 의존(Dependency)
정답과 해설 보기
정답: 3
정답은 ③이다. 인터페이스는 제공해야 하는 연산의 계약을 정의하고 구현 클래스는 그 계약을 실제 동작으로 제공한다. UML에서는 이 관계를 인터페이스 실체화로 표현한다. PaymentService가 TaxPolicy의 연산을 구현하므로 가장 구체적인 관계는 Realization이다. 의존은 다른 요소의 변경에 영향을 받는 더 일반적인 관계이고, 일반화는 상위 분류자와 하위 분류자의 특수화 관계이다. 집합은 전체와 부분의 연관을 나타내므로 이 사례의 구현 계약과 다르다.
선지별 해설
- 전체와 부분의 연관이며 인터페이스 구현 자체를 나타내지 않는다.
- 상속에 의한 일반화와 인터페이스 실체화를 구별해야 한다.
- 인터페이스의 계약을 클래스가 구현하므로 실체화가 가장 구체적이다.
- 일반적 의존보다 인터페이스 실체화가 문항의 관계를 직접 표현한다.
편집 해설 근거: OMG UML 2.5.1 (2017) — §10.5.6 InterfaceRealization
5. 설계 검토 회의에서 다음 항목을 판단한다. 모듈 설계 전략을 비교한 기술로 가장 부적절한 것은?
- 하향식 설계 초기에 모든 하위 자료구조의 세부 구현까지 반드시 확정해야 한다.
- 상향식 통합에서는 구현된 하위 모듈을 결합하며 상위 호출자를 드라이버로 대체할 수 있다.
- 상향식 통합에서도 모듈 사이 인터페이스가 맞지 않으면 조정 작업이 필요하다.
- 하향식 통합에서는 상위 제어 흐름과 주요 인터페이스를 일찍 확인한다.
정답과 해설 보기
정답: 1
정답은 ①이다. 하향식 설계는 전체 기능을 나누면서 하위 구성 요소의 책임과 인터페이스를 구체화한다. 시작부터 모든 하위 자료구조의 구현까지 확정해야 하는 것은 아니다. 통합 시험에서 하향식은 상위 제어를 먼저 확인하고 아직 없는 하위 모듈을 스텁으로 대체할 수 있다. 상향식은 하위 모듈을 먼저 결합하며 상위 호출 역할을 드라이버로 대신할 수 있다. 어느 방향을 사용해도 실제 모듈 사이의 데이터 형식과 호출 계약이 맞는지 확인해야 한다.
선지별 해설
- 단계적으로 상세화하는 설계를 처음부터 모든 구현을 확정하는 절차로 오해했다.
- 상위 호출 모듈이 없을 때 시험 드라이버가 호출을 대신할 수 있다.
- 통합 방향과 무관하게 인터페이스 불일치는 조정해야 한다.
- 상위 모듈부터 결합하면 주요 제어 흐름을 일찍 확인할 수 있다.
편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Design — Design Strategies and Methods; ISTQB CTFL 2018 Syllabus v3.1.1 (2021-07-01) — §2.2.2 Integration Testing
6. 설계 검토 회의에서 다음 항목을 판단한다. 소프트웨어 모델링의 활용에 대한 기술로 적절하지 않은 설명을 고르면?
- 구조·동작을 그림으로 공유해 이해관계자의 의사소통을 돕는다.
- 자료흐름도는 처리 과정과 데이터 이동을 중심으로 표현한다.
- 요구 분석에서 업무 개념과 경계를 이해하는 데 사용한다.
- 운영 후 유지보수 단계에서만 처음 작성한다.
정답과 해설 보기
정답: 4
정답은 ④이다. 소프트웨어 모델은 복잡한 시스템에서 필요한 구조나 동작을 추려 표현하는 수단이다. 요구 분석에서 업무 개념과 시스템 경계를 정리하고, 설계에서 구성 요소와 상호작용을 공유하며, 유지보수 때 변경 영향을 이해하는 데도 쓰인다. 자료흐름도는 처리 과정과 데이터 이동에 초점을 둔 모델이다. 따라서 모델을 운영 후에만 처음 작성한다는 주장은 활용 시점을 지나치게 제한한다. 모델은 목적에 맞는 추상화 수준으로 만들고 실제 산출물과 일관성을 유지해야 한다.
선지별 해설
- 그림과 기호로 구조·동작을 공유하면 의사소통에 도움이 된다.
- 자료흐름도는 데이터와 처리 사이의 이동을 표현한다.
- 요구 분석에서 경계와 개념을 이해하는 데 활용할 수 있다.
- 분석·설계 등 운영 이전 단계에서도 모델을 작성하고 활용한다.
편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Engineering Models and Methods — Modeling; Connell·Wenneson, NASA CR-177625 Software Engineering Guidebook (1993) — §4.1.1.1 Dataflow Diagrams
7. 알림 처리의 공통 흐름은 전송 객체를 만드는 생성 메서드를 호출한다. 이메일·문자·앱푸시 중 어떤 구체 전송 객체를 만들지는 생성 메서드를 재정의한 하위 클래스가 결정한다. 적용한 패턴은?
[학습용 개정문항]
- 메멘토
- 옵서버
- 팩토리 메서드
- 프록시
정답과 해설 보기
정답: 3
정답은 ③이다. 팩토리 메서드는 객체 생성 연산의 인터페이스를 정의하고 어떤 구체 클래스를 만들지는 하위 클래스에 맡긴다. 알림 처리의 공통 흐름이 생성 메서드를 호출하면 이메일용·문자용 생성자가 각 전송 객체를 제공할 수 있다. 새 채널을 추가할 때 공통 처리 코드에 생성 분기를 계속 늘리는 대신 해당 생성 책임을 확장하는 방식이다. 옵서버는 상태 변화 통지, 메멘토는 상태 보관·복원, 프록시는 대리 접근을 다루므로 생성 결정을 하위 클래스에 맡기는 핵심과 다르다.
선지별 해설
- 이전 상태를 저장하고 복원하는 패턴이다.
- 구독자에게 상태 변화를 알리는 패턴이며 생성 책임 분리가 핵심은 아니다.
- 생성 메서드의 구체 객체 선택을 하위 클래스에 맡긴다.
- 다른 객체에 대한 대리 접근과 접근 제어를 다루는 패턴이다.
편집 해설 근거: Douglas C. Schmidt, Object-Oriented Patterns & Frameworks — pp.96–97, Factory Method — Intent; Applicability
8. 설계 검토 회의에서 다음 항목을 판단한다. 주문 처리 흐름이 검증→할인→결제 단계로 이어지고 각 단계 출력이 다음 단계 입력이 된다. 가장 가까운 아키텍처는?
- 브로커
- 마스터-워커
- 파이프-필터
- 공유 저장소
정답과 해설 보기
정답: 3
정답은 ③이다. 파이프·필터 구조는 각 변환 단계를 필터로 나누고 그 사이를 데이터 전달 경로인 파이프로 연결한다. 주문 검증의 출력이 할인 계산의 입력이 되고, 할인 계산의 결과가 결제의 입력이 되는 조건이 이에 맞는다. 단계별 책임과 입출력 계약을 분리하면 개별 시험과 교체가 쉬워질 수 있다. 다만 데이터 형식, 오류 처리와 중복 실행에 대한 약속은 필요하다. 중앙 중개나 여러 작업자에게 작업을 분산한다는 조건은 제시되지 않았다.
선지별 해설
- 중앙 중개자가 요청을 전달하는 구조의 특징을 묻는 사례가 아니다.
- 작업을 여러 작업자에게 분배하고 결과를 모으는 조건이 없다.
- 앞 단계 출력이 다음 단계 입력으로 흐르는 파이프·필터 구조다.
- 공통 저장소 공유보다 단계 사이의 데이터 변환 흐름이 핵심이다.
편집 해설 근거: Microsoft Azure Architecture Center, Pipes and Filters pattern (2026-10-05 확인) — Solution; Issues and considerations
9. 객체·클래스, 구조, 속성, 서비스와 주제 영역(Subject)을 사용하여 문제 영역을 분석하며, 인스턴스 연결·상속·전체와 부분 관계를 정보 모델에 표현하는 객체지향 분석 방법은?
[학습용 개정문항]
- Rumbaugh 방법
- Booch 방법
- Jacobson 방법
- Coad-Yourdon 방법
정답과 해설 보기
정답: 4
정답은 ④이다. Coad–Yourdon의 객체지향 분석은 객체와 클래스, 구조, 속성, 서비스 및 주제 영역을 통해 문제 영역을 표현한다. 클래스가 가진 데이터와 동작, 인스턴스 사이의 연결, 상속과 전체·부분 관계 등을 정리하고 관련 부분을 주제로 묶을 수 있다. Rumbaugh의 OMT는 객체·동적·기능 모델 구분으로 알려져 있고, Jacobson 방법은 유스케이스를 중심으로 한다. 여러 분석 방법이 공통 개념을 사용하므로 단순히 객체를 찾는다는 말만으로 방법을 구분해서는 안 된다.
선지별 해설
- OMT의 객체·동적·기능 모델 구분과 다른 방법을 제시했다.
- Booch 방법의 이름이며 지문의 주제 영역을 포함한 Coad–Yourdon 표현과 다르다.
- 유스케이스 중심의 분석으로 구별하는 Jacobson 방법이다.
- 객체·클래스와 구조·속성·서비스·주제 영역을 다루는 Coad–Yourdon 방법이다.
편집 해설 근거: Connell·Wenneson, NASA CR-177625 Software Engineering Guidebook (1993) — §4.2.1; §4.2.1.1, pp.22–24
10. 설계 검토 회의에서 다음 항목을 판단한다. DFD에 표시된 ‘주문번호’와 ‘결제금액’의 자료형·길이·허용값을 별도로 정의하려 한다. 다음 중 DFD의 네 기본 기호가 아니라 이러한 정의를 기록하는 보조 산출물은?
- Data Store
- Data Dictionary
- Process
- Data Flow
정답과 해설 보기
정답: 2
정답은 ②이다. 자료 사전은 데이터의 이름과 의미, 구성 요소 및 허용되는 표현을 일관되게 정의하는 산출물이다. DFD의 화살표에 주문번호나 결제금액이라는 이름만 적으면 그 값의 형식과 범위를 알 수 없으므로 별도 정의가 필요하다. 자료 흐름을 이루는 항목을 자료 사전에 연결하면 분석자와 구현자가 같은 의미로 이해할 수 있다. 자료 저장소, 처리와 자료 흐름은 DFD 자체의 요소이지만 자료 사전은 그 데이터 정의를 보완한다.
선지별 해설
- 자료를 보관하는 저장소를 나타내는 DFD 요소다.
- 자료의 의미와 구성·표현을 정의하는 자료 사전이다.
- 입력을 출력으로 변환하는 처리를 나타낸다.
- 처리와 저장소 등 사이에서 이동하는 데이터를 나타낸다.
편집 해설 근거: Connell·Wenneson, NASA CR-177625 Software Engineering Guidebook (1993) — §4.1.1.1; §4.1.1.5 Data Dictionary, pp.17–20
11. 설계 검토 회의에서 다음 항목을 판단한다. DFD에서 상위 처리 P가 외부 엔터티로부터 주문서와 쿠폰을 받고 승인 결과를 보낸다. 하위 DFD가 반드시 지켜야 할 원칙은?
- 하위 단계에서 외부 흐름 이름을 모두 삭제한다
- 모든 자료 저장소에 입출력 화살표를 강제로 둔다
- 외부 입출력 흐름의 균형을 유지한다
- 처리 없이 외부 엔터티끼리 직접 연결한다
정답과 해설 보기
정답: 3
정답은 ③이다. 상위 처리 하나를 하위 DFD로 분해해도 그 처리 경계를 드나드는 정보는 일치해야 한다. 상위 P가 주문서와 쿠폰을 받아 승인 결과를 내보냈다면 하위에서도 그 입력과 출력의 의미가 보존되어야 한다. 이것을 균형 유지라고 한다. 복합 흐름을 자료 사전 정의에 따라 여러 흐름으로 나눌 수 있으므로 화살표의 개수나 이름이 언제나 문자 그대로 같아야 한다는 뜻은 아니다. 내부 처리와 저장소는 세분화할 수 있다.
선지별 해설
- 흐름 이름을 지우면 상하위 데이터 의미의 대응을 확인하기 어렵다.
- 저장소마다 화살표를 강제로 붙이는 것이 균형 유지의 정의는 아니다.
- 처리 경계를 통과하는 입력·출력 정보의 의미를 보존해야 한다.
- 외부 엔터티 사이의 직접 연결은 상위 처리를 세분화한 설명이 아니다.
편집 해설 근거: Excel Software, Process Model — Data Flow Diagrams — Verification and Balance Reports
12. 설계 검토 회의에서 다음 항목을 판단한다. 청구 모듈의 함수들이 모두 청구액 계산·세금 적용·청구서 생성이라는 하나의 책임을 위해 협력한다. 이처럼 한 모듈 내부 요소의 관련성을 나타내는 설계 척도는?
- 응집도(Cohesion)
- 결합도(Coupling)
- 상속성(Inheritance)
- 다형성(Polymorphism)
정답과 해설 보기
정답: 1
정답은 ①이다. 응집도는 한 모듈 내부의 요소들이 얼마나 밀접한 목적과 책임을 공유하는지를 나타낸다. 청구액 계산, 세금 적용, 청구서 생성이 청구 업무라는 책임을 수행하기 위해 협력한다면 내부 관련성을 응집도로 평가할 수 있다. 결합도는 서로 다른 모듈 사이의 의존 관계이므로 측정 대상이 다르다. 상속과 다형성은 객체지향 구성과 동작의 특성이다. 모듈을 나눌 때에는 내부 책임을 분명히 하면서 외부와의 불필요한 의존을 줄이는 것이 바람직하다.
선지별 해설
- 한 모듈 내부 요소의 관련성을 나타내므로 응집도다.
- 서로 다른 모듈 사이의 의존 정도를 나타낸다.
- 상위 분류자의 특성을 하위 분류자가 이어받는 개념이다.
- 공통 계약을 통해 서로 다른 구현이 동작하는 성질이다.
편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Design — Coupling and Cohesion
13. 설계 검토 회의에서 다음 항목을 판단한다. Report 모듈이 출력 형식 플래그를 받아 PDF·CSV·HTML 분기를 모두 결정한다. 이 결합을 낮추는 개선으로 가장 적절한 것은?
- 형식별 전략 객체를 전달한다
- 호출 모듈의 내부 자료구조 전체를 넘긴다
- 분기 코드를 다른 모듈에 그대로 복사한다
- 전역 플래그를 공통 영역에 둔다
정답과 해설 보기
정답: 1
정답은 ①이다. 출력 형식에 따른 알고리즘을 공통 인터페이스의 전략 객체로 나누면 Report는 구체 형식의 분기 대신 약속된 출력 동작을 호출할 수 있다. PDF·CSV·HTML 구현은 각자의 책임을 가지며 새 구현을 추가할 때 공통 처리 코드의 변경 범위를 줄일 수 있다. 호출자의 내부 자료구조 전체를 전달하거나 전역 플래그를 공유하면 의존이 커질 수 있다. 분기를 그대로 복사하는 것은 생성된 중복을 여러 곳에서 함께 수정하게 만들므로 결합을 줄이는 해결책이 아니다.
선지별 해설
- 공통 계약을 통해 형식별 알고리즘을 교체할 수 있다.
- 불필요한 내부 표현까지 노출해 변경 의존성이 커질 수 있다.
- 중복된 분기를 함께 관리해야 하므로 개선 효과가 없다.
- 공유 전역 상태의 값과 변경 순서에 의존하게 된다.
편집 해설 근거: Rob Pierry, Microsoft MSDN Magazine, Design Patterns in .NET (2005) — Strategy Pattern; CMU SEI, Candidate Complexity Metrics (2016), Appendix A.6 — Appendix A.6
14. 설계 검토 회의에서 다음 항목을 판단한다. 요구사항 "검색이 빨라야 한다"를 인수 테스트가 가능한 형태로 바꾸는 문장으로 가장 적절한 것은?
- 개발자가 충분히 빠르다고 느끼게 한다
- 가능하면 지연 없이 결과를 표시한다
- 검색 화면을 세련되게 만든다
- 동시 사용자 200명에서 검색 결과를 2초 이내에 표시한다
정답과 해설 보기
정답: 4
정답은 ④이다. 검색이 빠르다는 표현만으로는 합격과 불합격의 경계를 정하기 어렵다. 동시 사용자 수 200명과 응답 시간 2초를 제시하면 부하 조건과 측정 기준을 정해 시험할 수 있으므로 네 보기 중 가장 구체적이다. 실제 인수 기준을 완성하려면 데이터 크기, 검색 유형, 측정 시작·종료 지점과 허용 백분위 등도 합의해야 한다. 개발자의 느낌이나 가능하면이라는 표현은 객관적 판정 기준이 되기 어렵고 화면의 미관은 검색 성능과 다른 요구사항이다.
선지별 해설
- 개발자의 주관적 느낌으로는 일관된 합격 판정이 어렵다.
- 가능하면이라는 표현은 필수 성능 기준을 명확히 하지 않는다.
- 미관은 응답 속도를 측정하는 기준이 아니다.
- 동시 부하와 응답 시간의 수치 기준을 제시해 시험 가능성을 높인다.
편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Requirements — Requirements Analysis; Requirements Validation
15. 설계 검토 회의에서 다음 항목을 판단한다. 사용자가 셸 프롬프트에 grep, cd 같은 명령과 옵션을 텍스트로 입력하고 결과도 문자로 확인하는 인터페이스는?
- VUI(Voice User Interface)
- GUI(Graphical User Interface)
- CLI(Command Line Interface)
- NUI(Natural User Interface)
정답과 해설 보기
정답: 3
정답은 ③이다. CLI는 사용자가 명령 이름과 인수를 문자로 입력하여 기능을 실행하는 명령줄 인터페이스이다. 셸은 입력을 해석하고 명령을 실행하며 결과나 오류를 사용자에게 전달한다. grep으로 문자열을 검색하거나 cd로 작업 디렉터리를 바꾸는 사례가 이에 해당한다. GUI는 창과 버튼 같은 그래픽 조작을, VUI는 음성 입력을 중심으로 한다. 자연스러운 몸짓이나 터치 등의 상호작용을 가리키는 NUI와도 구분한다.
선지별 해설
- 음성 명령 중심의 인터페이스이며 지문의 문자 명령과 다르다.
- 창·아이콘·버튼 등 그래픽 요소를 이용하는 방식이다.
- 셸에 텍스트 명령과 인수를 입력하는 CLI다.
- 자연스러운 제스처 등의 상호작용을 가리키며 명령줄 방식과 다르다.
편집 해설 근거: POSIX.1-2024 Issue 8, Shell Command Language — Shell Command Language — Introduction; Simple Commands
16. 설계 검토 회의에서 다음 항목을 판단한다. 애자일 팀의 운영 원칙으로 적절하지 않은 것은?
- 도구 도입 자체보다 팀원 간 상호작용이 성과를 내는지 본다.
- 실행 가능한 증분보다 모든 문서를 먼저 완성하는 일을 항상 우선한다.
- 계약 문구만 고수하기보다 고객과 해결안을 함께 조정한다.
- 초기 계획과 다른 정보가 확인되면 우선순위를 다시 정한다.
정답과 해설 보기
정답: 2
정답은 ②이다. 애자일 선언은 프로세스와 도구보다 개인과 상호작용, 포괄적 문서보다 작동하는 소프트웨어, 계약 협상보다 고객 협력, 계획 준수보다 변화 대응에 더 큰 가치를 둔다. 그러므로 실행 가능한 증분보다 모든 문서를 먼저 완성하는 일을 항상 우선한다는 원칙은 선언의 취지와 맞지 않는다. 문서나 계획이 불필요하다는 뜻은 아니다. 제품과 협업에 필요한 문서를 유지하면서 실제 동작과 고객 피드백을 바탕으로 작업을 조정한다.
선지별 해설
- 도구 자체보다 팀의 효과적인 상호작용을 중시한다.
- 모든 문서의 선행 완성을 항상 우선하는 것은 애자일 가치와 다르다.
- 고객과 협력해 문제를 해결하려는 가치에 부합한다.
- 새 정보에 따라 우선순위를 조정하는 것은 변화 대응에 해당한다.
편집 해설 근거: Manifesto for Agile Software Development (2001) — Manifesto for Agile Software Development — four values
17. 설계 검토 회의에서 다음 항목을 판단한다. GoF 패턴과 분류의 연결 중 틀린 설명을 고르면? 구조 패턴은 클래스나 객체를 조합해 더 큰 구조를 만드는 방법을 다룬다.
- Bridge — 구조 패턴
- Builder — 구조 패턴
- Proxy — 구조 패턴
- Adapter — 구조 패턴
정답과 해설 보기
정답: 2
정답은 ②이다. Builder는 복잡한 객체를 만드는 과정을 분리하여 단계적으로 구성하는 생성 패턴이다. 따라서 구조 패턴이라고 연결한 보기가 틀리다. Bridge는 추상화와 구현을 나누고, Proxy는 대리 객체로 접근하며, Adapter는 기존 인터페이스를 필요한 인터페이스에 맞추는 구조 패턴이다. 패턴 내부에서 객체를 조합하거나 메서드를 호출한다는 사실만으로 분류하지 않고, 그 패턴이 주로 해결하는 생성·구조·행위의 목적을 기준으로 구별해야 한다.
선지별 해설
- 추상화와 구현의 결합을 분리하는 구조 패턴이다.
- Builder는 객체 구성 과정을 다루는 생성 패턴이다.
- 실제 객체에 대한 대리 접근을 제공하는 구조 패턴이다.
- 서로 다른 인터페이스를 맞추는 구조 패턴이다.
편집 해설 근거: Douglas C. Schmidt, Object-Oriented Patterns & Frameworks — p.15, Design Space for GoF Patterns
18. 설계 검토 회의에서 다음 항목을 판단한다. Invoice 모듈이 청구 금액 계산에 필요한 검증·할인·세금 계산만 내부에 모으고 다른 업무는 분리했다. 가장 가까운 응집도는?
- 기능적 응집도
- 논리적 응집도
- 우연적 응집도
- 시간적 응집도
정답과 해설 보기
정답: 1
정답은 ①이다. 기능적 응집도는 모듈의 작업들이 하나의 기능 수행에 기여하는 경우이다. 이 문항에서는 검증, 할인과 세금 계산이 청구 금액 산출이라는 단일 기능에 필요하고 다른 업무는 분리되어 있다. 기능의 성격이 비슷하다는 이유만으로 서로 독립적인 작업을 모은 논리적 응집도와 다르다. 같은 시점에 실행된다는 이유로 모은 시간적 응집도, 뚜렷한 관련성 없이 모은 우연적 응집도도 해당하지 않는다. 내부 작업이 여럿이어도 하나의 기능을 완성하기 위해 협력할 수 있다.
선지별 해설
- 모든 내부 작업이 청구 금액 산출이라는 한 기능에 기여한다.
- 논리적으로 비슷한 여러 기능을 모은 경우와 구별된다.
- 아무 관련성 없이 모은 작업들이 아니다.
- 공통 실행 시점이 아니라 공통 기능이 결합 이유다.
편집 해설 근거: ISO/IEC/IEEE 24765:2017, Systems and software engineering — Vocabulary, NASA 제공본 — §3.1689 Functional cohesion; §3.2265 Logical cohesion
19. 설계 검토 회의에서 다음 항목을 판단한다. 대형 호스트 앞에서 단말 통신을 받아 메시지 조립·분해, 통신 제어, 기본 오류 검사를 먼저 수행해 호스트 CPU의 통신 부담을 줄이는 장치는?
- Duplexing
- EAI
- FEP
- GPL
정답과 해설 보기
정답: 3
정답은 ③이다. FEP는 Front-End Processor의 약자로 호스트 앞에서 통신 관련 처리를 맡는 전단 처리기를 뜻한다. 단말과의 통신 처리 일부를 별도 프로세서가 담당하면 호스트는 응용 처리에 더 많은 자원을 사용할 수 있다. 수행하는 구체 기능은 장치와 구성에 따라 달라지지만 지문처럼 메시지 처리와 통신 제어 부담을 덜어 주는 역할에 해당한다. Duplexing은 이중화와 관련된 표현이고 EAI는 기업 응용 통합, GPL은 소프트웨어 라이선스이므로 장치의 이름이 아니다.
선지별 해설
- 이중화와 관련된 표현이며 통신 전단 처리기의 이름은 아니다.
- 기업 응용 시스템 사이의 통합을 뜻한다.
- 호스트의 통신 처리를 분담하는 Front-End Processor다.
- GNU General Public License라는 소프트웨어 라이선스다.
편집 해설 근거: RFC 1008, Implementation Guide for the ISO Transport Protocol (1987) — §2.4 Front end processor
20. 설계 검토 회의에서 다음 항목을 판단한다. 센서 처리 시스템을 수집→정제→집계 단계로 구성하고 각 단계가 앞 단계의 출력 스트림만 받아 변환한다. 이 파이프-필터 구조에 대한 기술로 틀린 설명을 고르면?
- 모든 필터가 앞뒤 필터와 양방향 대화를 해야 하며 데이터 전달 비용은 생기지 않는다.
- 필터별 변환 책임을 독립적으로 시험하기 쉽다.
- 필터 사이 데이터 형식이 합의되어야 연결할 수 있다.
- 단계 추가나 교체로 처리 흐름을 확장할 수 있다.
정답과 해설 보기
정답: 1
정답은 ①이다. 파이프·필터 구조에서는 필터가 입력 데이터를 처리하여 다음 단계로 결과를 전달한다. 지문의 단방향 스트림 조건에서 모든 필터가 앞뒤와 양방향 대화를 해야 할 이유는 없다. 데이터 복사, 직렬화, 버퍼링이나 네트워크 전송에 비용도 발생할 수 있다. 각 필터의 변환 책임을 분리하면 독립 시험과 교체가 쉬워지지만 연결할 데이터 형식과 오류 처리 규약은 맞추어야 한다. 단계 추가가 가능하다는 것과 전달 비용이 없다는 것은 별개의 주장이다.
선지별 해설
- 필수 양방향 대화와 전달 비용이 없다는 단정이 모두 부적절하다.
- 입출력을 정해 각 변환 책임을 따로 시험할 수 있다.
- 출력과 다음 입력의 데이터 계약이 맞아야 연결된다.
- 계약을 지키는 필터의 추가나 교체로 처리 흐름을 확장할 수 있다.
편집 해설 근거: Microsoft Azure Architecture Center, Pipes and Filters pattern (2026-10-05 확인) — Solution; Issues and considerations
정보처리기사 필기 기출문제 · 소프트웨어 개발
21. 개발·시험 담당자가 다음 사례를 검토한다. 초보 사용자와 숙련 사용자가 함께 쓰는 업무 시스템의 품질 방침으로 가장 부적절한 것은?
- 오류 상황에서도 데이터 손상을 막고 복구 가능하게 한다.
- 숙련도 차이와 무관하게 모든 사용자에게 하나의 복잡한 조작 방식만 강제한다.
- 자동 시험과 사용자 검증으로 주요 기능을 확인한다.
- 변경 영향 범위를 작게 유지해 유지보수를 쉽게 한다.
정답과 해설 보기
정답: 2
정답은 ②이다. 사용자의 경험과 숙련도는 시스템을 이해하고 조작하는 데 영향을 준다. 모든 사용자에게 복잡한 방식 하나만 강제하면 초보자는 학습과 오류 복구에 어려움을 겪을 수 있으므로 적절한 품질 방침이라고 보기 어렵다. 주요 작업을 이해하기 쉽게 만들고 필요한 도움이나 효율적인 조작을 제공하는 방향이 타당하다. 데이터 손상을 줄이는 신뢰성, 시험을 통한 기능 확인, 변경 영향을 줄이는 유지보수성 역시 품질 목표에 포함할 수 있다.
선지별 해설
- 오류 상황에서 데이터를 보호하고 복구할 수 있도록 하는 방침이다.
- 사용자 특성과 학습 가능성을 무시한 복잡한 조작 강제는 부적절하다.
- 자동 시험과 사용자 검증은 서로 다른 관점에서 품질을 확인한다.
- 변경 영향을 제한하면 분석·수정·시험을 수행하기 쉬워진다.
편집 해설 근거: ISO/IEC 25010:2011, Software quality model (문항에 명시한 구판) — Product quality — Usability; Reliability; Maintainability
22. 개발·시험 담당자가 다음 사례를 검토한다. 정렬 배열 [4, 7, 10, 13, 16, 19, 22]을 이진 탐색하여 19를 찾는다. 중앙 원소 비교 횟수는?
- 4회
- 2회
- 1회
- 3회
정답과 해설 보기
정답: 2
정답은 ②이다. 정렬된 7개 원소의 처음 중앙값은 네 번째 원소인 13이다. 찾는 값 19가 더 크므로 4, 7, 10, 13을 후보에서 제외하고 오른쪽 부분 [16, 19, 22]을 탐색한다. 이 부분의 중앙값은 19이므로 두 번째 비교에서 찾는다. 따라서 중앙 원소와 목표값의 비교 횟수는 2회이다. 배열의 처음부터 차례로 검사하는 순차 탐색 횟수나 중앙 인덱스를 계산하는 산술 연산 수를 세는 문제가 아니다.
선지별 해설
- 중앙 원소 비교가 네 번까지 이어지지 않는다.
- 13과 19를 차례로 비교하므로 2회다.
- 첫 중앙값은 19가 아니라 13이므로 한 번으로 끝나지 않는다.
- 두 번째 비교에서 이미 목표를 찾으므로 세 번째가 필요 없다.
편집 해설 근거: NIST DADS, binary search — Definition; sorted array search
23. 개발·시험 담당자가 다음 사례를 검토한다. 워크스루와 인스펙션을 비교한 기술로 틀린 설명을 고르면? 설계 산출물을 작성자가 동료에게 단계별로 설명하며 결함과 개선 의견을 수집한다.
- 워크스루와 인스펙션은 모두 실행 전에 산출물의 결함을 찾는 정적 검토에 활용할 수 있다.
- 워크스루에서는 작성자가 산출물의 흐름을 설명하며 참가자의 질문과 의견을 받을 수 있다.
- 예시 입력이나 사용 시나리오를 따라 산출물의 동작을 수작업으로 추적할 수 있다.
- 워크스루는 인스펙션과 언제나 동일한 역할·진입 기준·종료 기준·공식 기록 절차를 사용한다.
정답과 해설 보기
정답: 4
정답은 ④이다. 워크스루는 작성자가 문서나 코드의 흐름을 설명하면서 참가자가 질문하고 결함이나 개선점을 찾는 검토이다. 예시 입력과 시나리오를 사용해 동작을 수작업으로 따라갈 수 있다. 인스펙션은 공식적인 역할과 준비 절차, 진입·종료 기준 등으로 체계화한 검토이다. 두 방식 모두 프로그램 실행 없이 산출물의 문제를 찾는 데 쓰이지만 언제나 동일한 절차를 사용하는 것은 아니다. 정적 검토도 기록과 후속 조치를 통해 발견 사항이 해결됐는지 확인할 수 있다.
선지별 해설
- 실행 없이 산출물을 검토하는 정적 시험에 활용한다.
- 작성자가 주도하고 참가자가 질문하는 워크스루의 특징이다.
- 시나리오나 예시를 이용한 수작업 추적을 사용할 수 있다.
- 검토의 형식성과 역할·기준이 항상 같은 것은 아니다.
편집 해설 근거: ISTQB CTFL 2018 Syllabus v3.1.1 (2021-07-01) — §3.2.3 Review Types
24. 개발·시험 담당자가 다음 사례를 검토한다. 입력 순서가 1, 2, 3, 4이고, 입력되는 값을 필요할 때 스택에 push한 뒤 pop하여 출력할 수 있다. 다음 중 만들 수 없는 출력 순서는?
- 1, 2, 4, 3
- 3, 1, 4, 2
- 2, 3, 4, 1
- 4, 3, 2, 1
정답과 해설 보기
정답: 2
정답은 ②이다. 스택에서 3을 먼저 꺼내려면 1, 2, 3을 차례로 넣어야 한다. 3을 꺼낸 직후에는 2가 맨 위에 있고 1은 그 아래에 있으므로 2보다 먼저 1을 꺼낼 수 없다. 4를 추가해도 1 위에 남은 2가 사라지지 않는다. 따라서 3, 1, 4, 2라는 순서는 만들 수 없다. 다른 보기들은 필요한 시점까지 입력을 넣고 맨 위 값을 꺼내는 연산으로 만들 수 있다. 후입선출 제약은 입력 순서를 유지하면서도 가능한 출력 순서를 제한한다.
선지별 해설
- 1과 2를 각각 꺼낸 뒤 3, 4를 넣고 4, 3 순서로 꺼내면 된다.
- 3을 꺼낸 뒤에는 2가 1 위에 남아 있어 1을 바로 꺼낼 수 없다.
- 1, 2를 넣고 2를 꺼낸 뒤 3, 4를 차례로 처리하고 마지막에 1을 꺼낸다.
- 모두 넣은 뒤 연속으로 꺼내면 역순 4, 3, 2, 1이 된다.
편집 해설 근거: NIST DADS, stack — Definition — last-in first-out
25. 루트가 A인 트리에서 부모→자식 간선은 A→B, A→C, B→D, B→E, E→F, E→G, C→H이다. 한 노드가 가지는 자식 수의 최댓값과 자식이 없는 노드의 개수는?
[학습용 개정문항]
- 최댓값 2, 자식 없는 노드 4개
- 최댓값 4, 자식 없는 노드 8개
- 최댓값 2, 자식 없는 노드 8개
- 최댓값 4, 자식 없는 노드 4개
정답과 해설 보기
정답: 1
정답은 ①이다. 루트 A의 자식은 B와 C, B의 자식은 D와 E, E의 자식은 F와 G, C의 자식은 H이다. 따라서 한 노드의 자식 수 중 최댓값은 2이다. D, F, G, H에는 자식이 없으므로 잎 노드는 4개이다. 전체 노드 수 8개를 잎 노드 수와 혼동하면 안 된다. 또한 부모까지 포함해 연결된 간선 수를 세는 무방향 그래프의 차수와, 이 문항에서 묻는 자식 수는 다르다. 루트와 부모·자식 방향을 먼저 확인해야 한다.
선지별 해설
- 가장 많은 자식 수는 2이고 잎은 D, F, G, H의 4개다.
- 노드 하나가 자식 4개를 가진 곳은 없고 전체 8개가 모두 잎도 아니다.
- 8개는 전체 노드 수이며 자식 없는 노드는 4개다.
- 잎 수는 맞지만 한 노드의 최대 자식 수는 2다.
편집 해설 근거: NIST DADS, tree — Definition — rooted tree; NIST DADS, degree — Definition
26. 개발·시험 담당자가 다음 사례를 검토한다. 후위 표기식 8 2 / 3 4 * + 의 계산 결과는?
- 20
- 24
- 14
- 16
정답과 해설 보기
정답: 4
정답은 ④이다. 후위 표기식은 숫자를 스택에 넣고 연산자를 만나면 오른쪽 피연산자부터 꺼내 계산한다. 8과 2 뒤의 나눗셈은 8÷2=4이다. 이어서 3과 4 뒤의 곱셈은 3×4=12이며, 마지막 덧셈은 앞서 남겨 둔 4와 12를 합해 16이 된다. 두 피연산자를 꺼낸 순서와 실제 연산의 왼쪽·오른쪽 위치를 구분해야 한다. 특히 나눗셈이나 뺄셈은 순서를 바꾸면 결과가 달라진다.
선지별 해설
- 주어진 나눗셈과 곱셈을 순서대로 적용한 합은 20이 아니다.
- 8÷2의 결과 4에 12를 더해야 하므로 24가 아니다.
- 곱셈 3×4를 12로 계산하면 합은 16이다.
- 8÷2+3×4=4+12=16이다.
편집 해설 근거: GNU dc manual — reverse Polish notation — Reverse Polish notation — stack operations
27. 개발·시험 담당자가 다음 사례를 검토한다. 결제 기능의 자동 시험이 기대값과 다른 결과를 발견했고 개발자가 원인 코드를 추적해 수정했다. 두 활동의 구분으로 타당한 설명을 고르면?
- 디버깅이 끝나면 수정 결과를 다시 시험할 필요가 없다.
- 시험은 실패를 드러내고, 디버깅은 원인을 찾아 수정한다.
- 시험은 원인 코드를 수정하고, 디버깅은 기대값만 정의한다.
- 시험과 디버깅은 모두 결함 위치를 자동으로 확정한다.
정답과 해설 보기
정답: 2
정답은 ②이다. 시험은 실제 동작을 기대 결과와 비교하여 실패를 드러낼 수 있다. 디버깅은 드러난 실패의 원인을 조사하고 결함을 찾아 수정하는 개발 활동이다. 두 활동은 서로 연결되지만 동일하지 않으며, 시험 실패만으로 결함 코드의 위치가 자동 확정되지는 않는다. 수정 후에는 해당 결함이 해결됐는지 확인 시험을 하고, 관련 기능이 영향을 받지 않았는지 회귀 시험을 고려한다. 따라서 수정이 끝났다는 이유만으로 다시 시험할 필요가 없다는 설명도 틀리다.
선지별 해설
- 수정 결과를 확인하고 다른 기능에 미친 영향도 점검해야 한다.
- 시험의 실패 발견과 디버깅의 원인 분석·수정 역할을 구별했다.
- 시험과 디버깅의 역할을 뒤바꾸어 설명했다.
- 실패가 보여도 원인 위치는 별도 조사와 분석이 필요할 수 있다.
편집 해설 근거: ISTQB CTFL 2018 Syllabus v3.1.1 (2021-07-01) — §1.1.2 Testing and Debugging; §2.3.4 Change-related Testing
28. 개발·시험 담당자가 다음 사례를 검토한다. 빈 스택에 A1, B28, C3을 차례로 push한 뒤 두 번 pop한다. 출력 순서는?
- A1, B28
- B28, C3
- C3, A1
- C3, B28
정답과 해설 보기
정답: 4
정답은 ④이다. 빈 스택에 A1, B28, C3을 차례로 넣으면 아래에서부터 A1, B28, C3 순서로 쌓인다. 첫 pop은 가장 나중에 넣은 C3을 반환하고 제거한다. 다음 pop은 새로 맨 위가 된 B28을 반환한다. 두 번 꺼낸 뒤에는 A1만 남는다. 문자열에 붙은 숫자는 데이터의 일부이며 정렬 우선순위나 반복 횟수가 아니다. 스택은 값의 크기가 아니라 넣고 꺼낸 순서에 따라 후입선출로 동작한다.
선지별 해설
- 먼저 들어온 값을 먼저 꺼내는 순서로 스택 규칙과 다르다.
- B28보다 나중에 들어온 C3이 먼저 나와야 한다.
- C3 다음에는 B28이 남아 있어 A1을 바로 꺼낼 수 없다.
- 맨 위 C3을 꺼낸 뒤 B28을 꺼내는 순서다.
편집 해설 근거: Python 공식 자습서: Data Structures — Using Lists as Stacks
29. 개발·시험 담당자가 다음 사례를 검토한다. 온라인 민원 시스템의 형상 항목 기준선을 정한다. 다음 중 제품 상태를 재현하기 위한 형상 항목으로 관리할 필요가 가장 낮은 것은?
- 빌드 가능한 소스 코드와 의존성 잠금 파일
- 배포 및 운영 절차서
- 승인되지 않은 다음 분기 기능 아이디어 메모
- 승인된 요구사항 명세서
정답과 해설 보기
정답: 3
정답은 ③이다. 기준선은 승인된 특정 시점의 제품 구성을 식별하고 이후 변경을 통제하는 기준이다. 소스와 의존성 잠금 파일은 빌드를 재현하는 데, 배포 절차서는 운영 상태를 재현하는 데, 승인된 요구사항은 구현 기준을 확인하는 데 필요하다. 아직 승인되지 않은 다음 분기 아이디어는 현재 제품 기준선을 재현하는 필요성이 상대적으로 낮다. 다만 아이디어 메모를 기록하거나 버전 관리하면 안 된다는 뜻은 아니며, 제품 기준선에 포함할 항목과 일반 업무 기록을 구분하는 문제이다.
선지별 해설
- 실행 가능한 제품을 같은 의존성으로 재현하는 데 필요하다.
- 배포와 운영 상태를 재현하고 관리하는 데 도움이 된다.
- 미승인 미래 아이디어는 현재 승인 제품의 기준선 재현과 관련성이 낮다.
- 현재 제품이 충족해야 할 승인된 기능과 제약을 확인하는 기준이다.
편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Configuration Management — Configuration Identification; Baselines
30. 배열 [10, 6, 8, 12]을 오름차순 삽입 정렬한다. 첫 원소 10만 정렬된 구간으로 보고 두 번째 원소 6을 삽입하는 첫 단계를 마친 결과는?
[학습용 개정문항]
- [6, 8, 10, 12]
- [10, 6, 12, 8]
- [10, 8, 6, 12]
- [6, 10, 8, 12]
정답과 해설 보기
정답: 4
정답은 ④이다. 삽입 정렬은 앞쪽의 정렬된 구간에 다음 원소를 알맞은 위치로 삽입한다. 첫 원소 10만 정렬된 것으로 보고 두 번째 원소 6을 삽입하면, 10을 오른쪽으로 옮기고 맨 앞에 6을 넣는다. 따라서 첫 삽입 후 배열은 [6, 10, 8, 12]이다. 이 시점에는 8과 12를 아직 삽입하지 않았다. [6, 8, 10, 12]는 다음 삽입까지 진행한 정렬 상태이며, 첫 단계의 결과와 전체 정렬 결과를 구분해야 한다.
선지별 해설
- 8까지 올바른 위치에 넣은 상태로 첫 삽입 직후가 아니다.
- 첫 단계는 12의 위치가 아니라 6을 앞쪽 구간에 삽입한다.
- 두 번째 원소 6을 처리해야 하므로 8과 먼저 바꾸지 않는다.
- 6을 10 앞에 넣어 [6, 10, 8, 12]가 된다.
편집 해설 근거: NIST DADS, insertion sort — Definition — insertion into sorted sequence
31. 개발·시험 담당자가 다음 사례를 검토한다. 빌드·통합 도구의 기술로 적절하지 않은 설명을 고르면?
- Jenkins는 Android 앱의 소스 언어를 Groovy 바이트코드로 변환하는 전용 컴파일러다.
- Gradle은 태스크와 의존 관계를 정의해 빌드 단계를 실행한다.
- 자동 빌드는 지속적 통합에서 반복 가능한 검증을 돕는다.
- Ant와 Gradle은 빌드 자동화, Jenkins는 자동화 서버로 활용할 수 있다.
정답과 해설 보기
정답: 1
정답은 ①이다. Jenkins는 빌드·시험·배포 같은 작업을 연결하고 자동 실행하는 자동화 서버이다. Android 소스를 Groovy 바이트코드로 바꾸는 전용 컴파일러가 아니다. Gradle은 태스크와 의존 관계를 바탕으로 빌드를 구성하고, Ant도 빌드 작업을 자동화하는 도구이다. Jenkins가 이 도구들을 호출해 지속적 통합을 수행할 수 있다. 파이프라인을 Groovy 계열 문법으로 작성할 수 있다는 사실과 실제 응용 프로그램을 컴파일하는 역할을 혼동하면 안 된다.
선지별 해설
- Jenkins는 자동화 서버이며 설명된 전용 언어 컴파일러가 아니다.
- Gradle은 태스크와 의존 관계를 통해 빌드 단계를 실행한다.
- 반복 가능한 빌드와 시험을 자동 실행해 통합 문제를 일찍 확인할 수 있다.
- 빌드 도구와 자동화 서버의 역할 구분에 맞는다.
편집 해설 근거: Jenkins User Documentation (2026-10-05 확인) — Jenkins User Documentation — automation server; Gradle Build Tool User Manual, Build Lifecycle (2026-10-08 확인) — Task Graphs; Build Phases; Apache Ant User Manual, Introduction — Apache Ant — Introduction
32. 개발·시험 담당자가 다음 사례를 검토한다. 화이트박스 테스트에 대한 기술로 틀린 설명을 고르면? 개발자는 프로그램의 제어 흐름과 분기 구조를 바탕으로 분기 결과가 수행되는 테스트를 설계한다.
- 문장·분기·경로처럼 구현 내부의 구조를 테스트 설계에 활용할 수 있다.
- 실행된 분기 수를 전체 분기 수로 나누어 분기 커버리지를 계산할 수 있다.
- 프로그램 내부 구조는 고려하지 않고 오직 외부 요구사항과 입출력 명세만으로 테스트를 결정한다.
- 커버리지 결과를 보고 아직 실행되지 않은 구조를 위한 테스트를 추가할 수 있다.
정답과 해설 보기
정답: 3
정답은 ③이다. 화이트박스 시험은 구현 내부의 구조를 이용해 테스트를 설계한다. 문장이나 분기 등 대상으로 정한 구조를 얼마나 실행했는지 커버리지로 확인하고, 실행하지 않은 부분을 위한 입력을 추가할 수 있다. 외부 요구사항과 입출력 명세만으로 시험을 정한다는 설명은 블랙박스 접근에 해당한다. 분기 커버리지는 실행한 분기를 전체 대상 분기로 나누어 계산하지만, 커버리지가 높다는 사실만으로 모든 결함이 없거나 모든 데이터 조합을 시험했다는 뜻은 아니다.
선지별 해설
- 문장·분기·경로 등 구현의 내부 구조를 시험 설계에 이용할 수 있다.
- 대상 분기 중 실제로 실행한 분기의 비율로 계산한다.
- 내부 구조를 배제하고 외부 명세만 쓰는 것은 블랙박스 접근이다.
- 미실행 구조를 확인해 추가 시험을 설계할 수 있다.
편집 해설 근거: ISTQB CTFL 2018 Syllabus v3.1.1 (2021-07-01) — §4.3 White-box Test Techniques
33. 개발·시험 담당자가 다음 사례를 검토한다. 출시 후보를 먼저 개발 조직 내부의 대표 사용자가 통제된 환경에서 시험하고, 이후 외부 사용자가 실제 환경에서 시험했다. 두 활동이 속하는 테스트 수준은? 앞 단계는 알파 테스트, 뒤 단계는 베타 테스트로 운영했다.
- 인수 테스트
- 통합 테스트
- 컴포넌트 테스트
- 단위 테스트
정답과 해설 보기
정답: 1
정답은 ①이다. 알파 시험과 베타 시험은 대표적인 인수 시험의 형태이다. 알파 시험은 개발 조직의 통제된 환경에서, 베타 시험은 사용자 환경에서 제품이 실제 요구와 사용 목적에 맞는지 확인하는 데 활용된다. 지문은 이 두 활동을 명시하므로 인수 시험으로 분류한다. 단위나 컴포넌트 시험은 개별 구성 요소에, 통합 시험은 구성 요소나 시스템 사이의 상호작용에 초점을 둔다. 내부에서 수행했다는 장소 정보만으로 단위 시험이라고 판단해서는 안 된다.
선지별 해설
- 알파와 베타는 인수 시험의 형태로 분류한다.
- 연결된 요소 사이 인터페이스 검증을 중심으로 하는 수준이다.
- 개별 구성 요소를 시험하는 수준으로 알파·베타 분류와 다르다.
- 개별 단위에 초점을 두며 개발 조직 내부라는 이유만으로 해당하지 않는다.
편집 해설 근거: ISTQB CTFL 2018 Syllabus v3.1.1 (2021-07-01) — §2.2.4 Acceptance Testing — Alpha and Beta Testing
34. 테스트 결과를 판정하는 오라클에 관한 설명 중 틀린 것은?
[학습용 개정문항]
- 일부 입력의 기대값을 미리 계산해 실제 출력과 비교할 수 있다.
- 반드시 성립해야 하는 결과 사이의 관계를 이용해 위반을 찾을 수 있다.
- 명세 또는 신뢰할 수 있는 다른 구현을 기대 결과의 근거로 사용할 수 있다.
- 기존 구현과 새 구현의 출력이 같으면 모든 입력에 대한 정확성이 반드시 보장된다.
정답과 해설 보기
정답: 4
정답은 ④이다. 테스트 오라클은 실제 결과가 올바른지 판단하는 데 사용하는 기준이다. 명세, 미리 계산한 기대값 또는 신뢰할 수 있는 다른 구현 등이 기준이 될 수 있다. 모든 입력의 정확한 기대값을 마련하기 어렵다면 일부 사례나 반드시 만족해야 할 관계를 이용하기도 한다. 기존 구현과 새 구현의 결과가 같다는 사실만으로 두 결과가 모두 정확하다고 보장할 수는 없다. 동일한 결함이 양쪽에 남아 있을 수 있으므로 일관성 비교와 절대적인 정답 보장은 구별해야 한다.
선지별 해설
- 미리 계산한 기대값이 있는 입력은 실제 결과와 직접 비교할 수 있다.
- 정확한 값이 없어도 반드시 만족해야 하는 관계 위반을 찾을 수 있다.
- 명세나 신뢰할 수 있는 구현을 기대 결과의 근거로 사용할 수 있다.
- 두 구현이 같은 잘못된 값을 낼 수 있어 결과 일치만으로 정답을 보장하지 못한다.
편집 해설 근거: ISTQB, Standard Glossary Version 3.01, Foundation Level terms, 회원위원회 제공본 — test oracle
35. 다음 응용 통합 구조에 대한 설명 중 틀린 것은? ① 세 개 이상의 시스템이 중앙 조정 없이 서로 모두 직접 연결된다. ② 중앙 중개자가 각 시스템 연결을 조정한다. ③ 공통 메시지 채널에 발행·구독한다. ④ 두 시스템이 전용 인터페이스로 직접 통신한다.
[학습용 개정문항]
- ④는 Point-to-Point 구조로 볼 수 있다.
- ①은 Tree 구조의 특징이다.
- ②는 Hub & Spoke 구조로 볼 수 있다.
- ③은 Message Bus 구조로 볼 수 있다.
정답과 해설 보기
정답: 2
정답은 ②이다. 세 개 이상의 시스템이 서로 모두 직접 연결되면 완전 연결 구조가 되며 순환 경로가 생긴다. 트리는 연결되어 있으면서 순환이 없는 구조이므로 이를 트리라고 부르는 것은 맞지 않는다. 중앙 중개자에 연결하는 방식은 허브·스포크, 공통 메시지 채널을 사용하는 방식은 메시지 버스, 두 시스템 사이의 개별 연결은 점대점으로 해석할 수 있다. 점대점 연결을 여러 개 늘리는 것과 전체 연결 모양이 트리인지 판단하는 것은 다른 문제이다.
선지별 해설
- 두 시스템 사이의 직접적인 전용 연결은 점대점 방식이다.
- 세 개 이상이 모두 서로 연결되면 순환이 있어 트리가 아니다.
- 중앙 중개자를 중심으로 연결하므로 허브·스포크에 해당한다.
- 공통 메시지 채널을 매개로 연결하는 메시지 버스 방식이다.
편집 해설 근거: IBM, What Is Enterprise Application Integration? (2026-10-05 확인) — Integration architectures — Point-to-point; Hub-and-spoke; ESB; Hohpe·Woolf, Enterprise Integration Patterns, Message Bus — Intent; Message Bus; NIST DADS, tree — Definition
36. if ((회원 && 쿠폰) || 관리자) 조건문의 전체 식이 참인 실행 가지와 거짓인 실행 가지를 각각 한 번 이상 수행하려 한다. 이 조건문의 두 분기 결과에 적용하는 커버리지 기준은?
[학습용 개정문항]
- 문장 커버리지
- 분기 커버리지
- 변경 영향 분석
- 회귀 시험 목록
정답과 해설 보기
정답: 2
정답은 ②이다. 조건식 전체가 참일 때와 거짓일 때의 두 실행 가지를 모두 수행하려는 기준은 이 조건문의 분기 커버리지이다. 예를 들어 관리자가 참이면 전체 식이 참이고, 회원과 관리자가 모두 거짓이면 전체 식이 거짓이 될 수 있다. 그러나 이 두 경우만으로 회원·쿠폰·관리자의 모든 개별 조건을 각각 참과 거짓으로 시험했다거나 독립적 영향을 검증했다고 할 수는 없다. 문장 커버리지, 조건 커버리지와 MC/DC를 구별하고 어떤 구조를 대상으로 삼는지 먼저 정해야 한다.
선지별 해설
- 문장을 실행했는지 확인하는 기준으로 모든 분기 결과를 보장하지 않는다.
- 조건문 전체의 참·거짓 두 가지를 실행하는 분기 커버리지다.
- 변경 영향을 조사하는 활동이지 구조 실행 비율의 기준이 아니다.
- 회귀 시험 대상의 목록이며 분기 결과의 커버리지 기준은 아니다.
편집 해설 근거: ISTQB CTFL 2018 Syllabus v3.1.1 (2021-07-01) — §4.3.2 Decision Testing and Coverage; §4.3.3
37. 개발·시험 담당자가 다음 사례를 검토한다. 승인된 변경 요청 CR-37만 기준선에 반영하려 한다. 형상 통제의 올바른 절차는?
- 변경 기록 없이 소스만 수정한다
- 감사 결과와 무관하게 이전 버전을 삭제한다
- 영향 분석과 승인 후 변경·기록한다
- 요청 즉시 모든 기준선을 덮어쓴다
정답과 해설 보기
정답: 3
정답은 ③이다. 형상 통제는 기준선의 변경을 요청, 영향 분석, 승인, 구현과 기록 등의 절차로 관리한다. CR-37을 승인한 내용에 맞게 반영하고 변경한 항목과 버전을 연결하면 무엇이 왜 달라졌는지 추적할 수 있다. 소스만 조용히 바꾸거나 요청이 들어오는 즉시 기준선을 덮어쓰면 승인 상태와 실제 제품이 어긋날 수 있다. 이전 버전과 감사 기록은 비교와 재현에 필요하므로 변경 승인 여부와 무관하게 삭제하는 방식도 적절하지 않다.
선지별 해설
- 승인 내용과 실제 변경의 대응을 확인할 기록이 없어진다.
- 이전 상태와 감사 근거를 보존해야 추적과 재현이 가능하다.
- 영향 분석과 승인에 따라 변경하고 이력을 남기는 절차다.
- 요청만으로 승인된 기준선을 즉시 덮어쓰지 않는다.
편집 해설 근거: IEEE Computer Society, SWEBOK Guide V4.0a — Software Configuration Management — Software Configuration Control
38. 다음 보기 중 개별 함수나 응답의 단언보다 다수의 동시 접속 부하를 발생시켜 성능을 측정하는 용도를 중심으로 설명한 도구는?
[학습용 개정문항]
- HTTP 요청 결과를 단언하는 HttpUnit
- 대규모 동시 접속 부하를 측정하는 JMeter
- C++ 함수에 단언을 실행하는 CppUnit
- Java 메서드를 테스트하는 JUnit
정답과 해설 보기
정답: 2
정답은 ②이다. Apache JMeter의 주된 목적은 부하를 발생시키고 응답과 처리 성능을 측정하는 것이다. 다수의 동시 접속을 모사한다는 보기의 사용 목적이 이에 해당한다. JUnit과 CppUnit은 각각 Java와 C++에서 시험과 단언을 구성하는 프레임워크이며 HttpUnit은 HTTP 기반 응용의 동작을 확인하는 데 쓰인다. 도구의 대표 목적을 구분하는 문제이며, JMeter가 기능 시험이나 JUnit 연동을 전혀 지원하지 않는다는 뜻은 아니다.
선지별 해설
- HTTP 응답과 웹 응용의 동작을 확인하는 테스트 라이브러리다.
- 대규모 부하를 모사하고 성능을 측정하는 용도가 중심이다.
- C++ 시험과 단언을 구성하는 프레임워크다.
- Java 코드의 시험을 구성하고 실행하는 프레임워크다.
편집 해설 근거: Apache JMeter 공식 프로젝트, 기능과 성능 시험 — What can I do with it?; JUnit Sampler; JUnit 공식 프로젝트, About — About; HttpUnit 공식 프로젝트, Home (보존 소개) — Introduction; CppUnit 공식 문서, The Unit Testing Library — Introduction
39. 개발·시험 담당자가 다음 사례를 검토한다. 콘텐츠가 사용자별 만료일과 허용 기기 수를 확인한 뒤 복호화 키를 제공한다. 이 통제의 핵심은?
- DRM 라이선스 집행
- 단순 파일 압축
- 네트워크 라우팅
- 메모리 페이징
정답과 해설 보기
정답: 1
정답은 ①이다. DRM은 암호화된 콘텐츠의 이용 조건을 라이선스와 연결하여 통제한다. 사용자나 장치의 자격, 유효 기간 등 서비스 정책을 확인하고 허용된 클라이언트가 콘텐츠 키를 이용하도록 하는 흐름이 지문에 해당한다. 기기 수 제한의 구체 구현은 라이선스 서버와 서비스 정책에 따라 달라질 수 있다. 파일 압축은 크기를 줄이고, 라우팅은 패킷의 경로를 정하며, 페이징은 메모리 주소 관리를 다루므로 콘텐츠 이용 권한을 판단하는 역할과 다르다.
선지별 해설
- 이용 조건과 라이선스를 확인하여 콘텐츠 사용 권한을 집행한다.
- 파일 크기를 줄이는 압축은 이용 권한과 만료일을 통제하지 않는다.
- 패킷 전달 경로의 선택은 콘텐츠 라이선스 판정과 다르다.
- 메모리 페이지 관리이며 콘텐츠 권리 집행 기술이 아니다.
편집 해설 근거: Microsoft PlayReady, Licensing FAQ, 아키텍처 역할 설명 — PlayReady roles — License Server; Client; W3C Recommendation — ODRL Information Model 2.2 — Permissions; Constraints; Duties
40. 다음 중 문제의 해를 구하는 일반적인 알고리즘 설계 전략과 같은 범주로 보기 어려운 것은?
[학습용 개정문항]
- 분할 정복
- 동적 계획법
- 링커의 재배치 주소 수정
- 백트래킹
정답과 해설 보기
정답: 3
정답은 ③이다. 분할 정복, 동적 계획법과 백트래킹은 문제의 해를 구성하거나 탐색하는 알고리즘 설계 전략이다. 분할 정복은 부분 문제의 해를 결합하고, 동적 계획법은 중복되는 부분 문제의 계산을 저장해 활용하며, 백트래킹은 후보를 확장하다 조건에 맞지 않으면 되돌아간다. 링커의 재배치는 목적 파일을 결합할 때 코드와 데이터의 주소 참조를 맞추는 빌드 단계의 작업이다. 문제 해결 전략을 분류한 앞의 세 항목과 목적이 다르다.
선지별 해설
- 부분 문제로 나누고 해를 결합하는 알고리즘 설계 전략이다.
- 부분 문제 결과를 재사용하는 알고리즘 설계 전략이다.
- 목적 파일 결합 과정의 주소 참조 조정 작업이다.
- 후보를 확장하고 불가능한 경로에서 되돌아가는 탐색 전략이다.
편집 해설 근거: NIST DADS, divide and conquer — Definition; NIST DADS — dynamic programming — Definition; GNU GCC Manual, Options Controlling the Kind of Output (2026-10-05 확인) — Options Controlling the Kind of Output — linking
정보처리기사 필기 기출문제 · 데이터베이스 구축
41. 데이터베이스 설계자가 다음 조건을 확인한다. 릴레이션 R(A, B, C, D, E)에 함수 종속 F={A→B, BC→D, D→E, E→A}가 성립할 때 후보키는?
- AB
- BD
- DE
- AC
정답과 해설 보기
정답: 4
정답은 ④이다. AC의 폐쇄에는 처음에 A와 C가 있다. A→B로 B를 얻으면 BC→D를 적용할 수 있고 D→E로 E도 얻어 모든 속성을 결정한다. A만으로는 C를 얻지 못하고 C만으로도 나머지를 얻지 못하므로 AC는 최소성도 만족하는 후보키이다. AB의 폐쇄는 AB에 머물며, BD와 DE의 폐쇄에는 C가 없다. AC 외에도 다른 후보키가 존재할 수 있지만 이 문제는 제시된 네 보기 중 후보키를 고르는 것이다.
선지별 해설
- AB에서 C를 얻지 못하므로 전체 속성을 결정할 수 없다.
- BD의 폐쇄는 ABDE이며 C가 빠진다.
- DE의 폐쇄 역시 ABDE이며 C를 결정하지 못한다.
- AC의 폐쇄는 ABCDE이고 진부분집합 A와 C는 슈퍼키가 아니다.
편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, Chapter 19 저자 자료 — Attribute Closure; Candidate Keys
42. 데이터베이스 설계자가 다음 조건을 확인한다. PostgreSQL에서 다음 명령을 실행한 결과로 타당한 설명을 고르면? CREATE VIEW active_orders AS SELECT * FROM orders WHERE status = 'ACTIVE'; CREATE VIEW active_order_summary AS SELECT customer_id, count(*) FROM active_orders GROUP BY customer_id; DROP VIEW active_orders CASCADE;
- active_orders와 active_order_summary가 모두 삭제된다.
- 종속 뷰가 있으므로 두 뷰 모두 삭제되지 않는다.
- active_orders만 삭제된다.
- active_order_summary만 삭제된다.
정답과 해설 보기
정답: 1
정답은 ①이다. active_order_summary는 active_orders를 조회하도록 정의되었으므로 해당 뷰에 의존한다. PostgreSQL의 DROP VIEW에서 CASCADE를 지정하면 대상 뷰와 그 뷰에 의존하는 객체를 함께 제거한다. 따라서 active_orders와 active_order_summary가 모두 삭제된다. 원래의 orders 테이블은 뷰가 참조하는 기반 객체이므로 이 명령으로 삭제되는 대상이 아니다. RESTRICT를 사용하거나 기본 제한 동작을 적용하면 종속 객체가 있다는 이유로 삭제가 거절되는 경우와 구분해야 한다.
선지별 해설
- 대상 뷰와 그것에 의존하는 요약 뷰가 함께 삭제된다.
- 의존 객체 때문에 삭제를 거절하는 것은 RESTRICT의 동작이다.
- CASCADE가 종속 뷰도 제거하므로 대상만 삭제되지 않는다.
- 직접 지정한 active_orders도 삭제 대상이다.
편집 해설 근거: PostgreSQL 18, DROP VIEW — Parameters — CASCADE; RESTRICT
43. 데이터베이스 설계자가 다음 조건을 확인한다. 다음 튜플 관계해석 식에서 기호 ∀가 나타내는 의미는? { c | CUSTOMER(c) ∧ ∀p (REQUIRED_PRODUCT(p) → ∃o ORDERED(c, p, o)) }
- 진부분집합이다
- 어떤 것이 존재한다
- 원소로 속한다
- 모든 것에 대하여
정답과 해설 보기
정답: 4
정답은 ④이다. ∀는 전칭 정량자로서 변수의 모든 값에 조건이 성립함을 나타낸다. 지문에서는 각 상품 p가 REQUIRED_PRODUCT에 속한다면 그 상품에 대한 주문 o가 적어도 하나 존재해야 한다는 뜻이다. ∃는 존재 정량자이므로 모든 것이라는 의미와 구별된다. 원소 관계는 ∈, 진부분집합 관계는 ⊊ 등의 기호로 표현한다. 필수 상품이 하나도 없는 경우 전칭 조건이 공허하게 참일 수 있다는 점도 전칭 정량자의 논리적 특성이다.
선지별 해설
- 진부분집합 관계를 나타내는 기호가 아니다.
- 어떤 값이 존재한다는 의미는 ∃이다.
- 원소가 집합에 속한다는 의미는 ∈이다.
- 변수의 모든 값에 조건을 적용하는 전칭 정량자다.
편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, Relational Calculus — Quantifiers — existential and universal
44. 데이터베이스 설계자가 다음 조건을 확인한다. SALES(dept, amount)에 (A,5), (A,15), (B,25)가 있다. 부서별 합계가 20 이상인 부서만 조회할 조건 위치는? SELECT dept, SUM(amount) FROM SALES GROUP BY dept HAVING SUM(amount) >= 20;
- GROUP BY 앞 HAVING
- SELECT 뒤 WHERE
- ORDER BY 뒤 WHERE
- GROUP BY 뒤 HAVING
정답과 해설 보기
정답: 4
정답은 ④이다. GROUP BY는 같은 부서의 행을 하나의 그룹으로 묶고, HAVING은 집계한 그룹에 대한 조건을 적용한다. A 부서 합계는 5+15=20, B 부서 합계는 25이므로 두 부서 모두 조건을 만족한다. WHERE는 그룹화 전에 개별 행을 거르는 절이며, 이 문항의 SUM(amount) 조건을 대신 놓을 자리가 아니다. SQL의 작성 순서에서도 HAVING은 GROUP BY 뒤에 둔다. 입력 행의 필터와 집계 결과의 필터를 구분해야 한다.
선지별 해설
- HAVING을 GROUP BY 앞에 적는 순서가 아니다.
- SELECT 뒤에 곧바로 WHERE를 두는 것도, 그룹 합계를 행 조건으로 거르는 것도 맞지 않는다.
- WHERE는 ORDER BY 뒤에 둘 수 없다.
- 부서별 그룹을 만든 뒤 HAVING으로 합계를 검사한다.
편집 해설 근거: PostgreSQL 18, SELECT — GROUP BY Clause; HAVING Clause
45. 데이터베이스 설계자가 다음 조건을 확인한다. 데이터베이스 개념적 설계 단계의 작업으로 보기 어려운 것은?
- DBMS에 독립적인 개념 스키마를 E-R 모델로 표현한다.
- 사용자 화면의 버튼 배치와 API 호출 순서를 구현 수준으로 확정한다.
- 업무 규칙을 개체·속성·관계의 제약으로 정리한다.
- 업무 개체와 개체 사이의 관계를 식별한다.
정답과 해설 보기
정답: 2
정답은 ②이다. 데이터베이스 개념적 설계는 업무에서 필요한 개체와 속성, 관계 및 제약을 DBMS의 저장 방식에 얽매이지 않고 모델링하는 단계이다. E-R 모델은 이러한 업무 개념과 관계를 표현하는 데 쓰인다. 버튼 위치와 API 호출의 구현 순서를 확정하는 것은 사용자 인터페이스나 응용 구현 설계의 관심사이다. 업무 화면에서 요구사항을 얻을 수는 있지만, 그 화면의 구체적인 배치와 호출 코드를 정하는 일을 개념 스키마 설계 자체로 보지는 않는다.
선지별 해설
- DBMS에 독립적인 개념 스키마 표현은 개념적 설계에 맞는다.
- 구현 수준의 화면 배치와 호출 절차는 개념 스키마 설계와 다르다.
- 업무 규칙을 데이터 제약으로 표현하는 일은 개념 설계에 해당한다.
- 개체와 관계 식별은 개념 모델을 만드는 핵심 활동이다.
편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, ER Model — Conceptual Database Design; Entity-Relationship Model
46. CUSTOMER에는 customer_id가 기본키인 고객 3행이 있다. 각 고객을 참조하는 주문이 ORDERS에 정확히 2행씩 있고 다른 주문은 없다. 두 테이블을 customer_id가 같은 조건으로 INNER JOIN한 결과 행 수는?
[학습용 개정문항]
- 9행
- 6행
- 2행
- 3행
정답과 해설 보기
정답: 2
정답은 ②이다. customer_id가 고객마다 유일하므로 주문 한 행은 해당 고객 한 행과만 일치한다. 고객이 3명이고 각 고객의 주문이 2행씩 있으므로 일치하는 고객·주문 쌍은 3×2=6개이다. INNER JOIN은 조인 조건을 만족하는 쌍마다 결과 행을 만든다. 따라서 고객 수만 세어 3행이라 하거나 고객 수와 주문 수를 무조건 곱해 교차 조인으로 계산하면 안 된다. 연결 키의 유일성과 실제로 일치하는 주문 수가 행 수를 결정한다.
선지별 해설
- 고객별 주문은 두 행씩이므로 3×3으로 계산하지 않는다.
- 고객 3명 각각 주문 2개와 연결되어 6행이다.
- 2는 고객 한 명의 주문 수이며 전체 결과가 아니다.
- 각 고객이 주문 두 행과 각각 연결되므로 고객 수보다 많다.
편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, Relational Algebra 저자 자료 — Join; PostgreSQL 18, SELECT — FROM Clause — INNER JOIN
47. 데이터베이스 설계자가 다음 조건을 확인한다. 릴레이션이 제3정규형을 만족하지만 비자명 함수 종속 X→Y에서 결정자 X가 슈퍼키가 아니다. BCNF로 만들 때 필요한 조치는?
- 각 속성 도메인을 원자값으로 바꾼다.
- 슈퍼키가 아닌 결정자 X가 남지 않도록 릴레이션을 분해한다.
- 모든 이행 종속만 다시 제거하면 충분하다.
- 복합키의 부분 종속만 제거한다.
정답과 해설 보기
정답: 2
정답은 ②이다. BCNF는 릴레이션에 성립하는 모든 비자명 함수 종속 X→Y에서 결정자 X가 슈퍼키여야 한다는 조건이다. 3NF는 우변 속성이 후보키의 구성 속성인 경우 등을 허용하므로 3NF를 만족해도 BCNF를 위반할 수 있다. 주어진 위반 종속을 기준으로 무손실 분해하고 결과 릴레이션들이 BCNF를 만족하는지 확인해야 한다. 원자값이나 부분 종속만 다시 검사해서 해결되지는 않는다. BCNF 분해는 모든 함수 종속의 보존까지 항상 보장하지 않는다는 점도 구별한다.
선지별 해설
- 원자성은 1NF 수준의 조건으로 주어진 BCNF 위반을 직접 해결하지 않는다.
- 비자명 종속의 결정자가 슈퍼키가 되도록 적절히 분해해야 한다.
- 3NF를 만족한 상태에서도 별도의 BCNF 위반이 남을 수 있다.
- 부분 종속 제거만으로 모든 결정자의 슈퍼키 조건이 충족되지는 않는다.
편집 해설 근거: Silberschatz·Korth·Sudarshan, Database System Concepts 7판, Chapter 7 저자 자료 — Boyce-Codd Normal Form; Decomposition into BCNF
48. 데이터베이스 설계자가 다음 조건을 확인한다. employee(emp_id PRIMARY KEY, name, dept_id, salary) 테이블에서 기본키의 NULL 금지라는 개체 무결성을 직접 위반하는 입력은? dept_id에는 별도의 외래 키, salary에는 별도의 도메인 제약이 있다고 가정한다.
- emp_id=NULL, name='Kim', dept_id=10, salary=3000
- emp_id=101, name='Lee', dept_id=999, salary=3000
- emp_id=102, name='Park', dept_id=10, salary=-1
- emp_id=103, name='Kim', dept_id=10, salary=3000
정답과 해설 보기
정답: 1
정답은 ①이다. 기본키는 각 행을 유일하게 식별해야 하므로 NULL을 허용하지 않는다. emp_id에 NULL을 넣는 ①은 명시된 기본키의 개체 무결성 조건을 직접 위반한다. 존재하지 않는 부서 번호는 참조 무결성, 허용 범위를 벗어난 급여는 도메인 제약의 문제일 수 있다. 같은 이름이 여러 행에 있다는 사실은 name에 별도 유일성 제약이 없는 한 기본키 위반이 아니다. 숫자 키의 실제 중복 여부는 기존 데이터에 따라 달라지며 지문만으로 임의 추정하지 않는다.
선지별 해설
- 기본키 emp_id의 NULL 금지 조건을 직접 위반한다.
- dept_id의 참조 대상 여부는 외래키 제약의 문제다.
- 음수 급여가 금지된 경우 도메인 제약을 위반하는 사례다.
- 이름 중복만으로는 emp_id 기본키의 개체 무결성을 위반하지 않는다.
편집 해설 근거: PostgreSQL 18 — Constraints — §5.5.4 Primary Keys; §5.5.5 Foreign Keys; Check Constraints
49. 데이터베이스 설계자가 다음 조건을 확인한다. 릴레이션 R(주문번호, 상품번호, 상품명)에서 키는 (주문번호, 상품번호)이고 상품번호→상품명이 성립한다. 우선 제거할 종속은?
- 다치 종속
- 조인 종속
- 부분 함수 종속
- 이행 함수 종속
정답과 해설 보기
정답: 3
정답은 ③이다. 후보키가 주문번호와 상품번호의 조합인데 상품명은 그중 상품번호만으로 결정된다. 비키 속성이 복합키 전체가 아니라 일부에 의존하므로 부분 함수 종속이다. 상품 정보를 별도 릴레이션으로 분리하면 동일 상품의 이름을 주문마다 반복 저장하는 문제를 줄일 수 있다. 이행 종속은 키에서 비키 속성을 거쳐 다른 비키 속성을 결정하는 형태를 설명할 때 구분한다. 다치 종속과 조인 종속은 더 높은 정규형에서 다루는 별도의 종속 개념이다.
선지별 해설
- 독립적인 여러 값 집합을 다루는 다치 종속을 제시한 문제가 아니다.
- 여러 투영의 조인으로 복원하는 조인 종속을 직접 묻지 않는다.
- 복합키의 일부인 상품번호가 상품명을 결정하는 부분 함수 종속이다.
- 이 사례의 직접적인 위반은 복합키 일부에 대한 종속이다.
편집 해설 근거: Silberschatz·Korth·Sudarshan, Database System Concepts 7판, Chapter 7 저자 자료 — Second Normal Form; Functional Dependencies
50. 데이터베이스 설계자가 다음 조건을 확인한다. 두 트랜잭션이 같은 잔액 104을 읽고 각각 +10, -5를 계산한 뒤 마지막 값으로 덮어썼다. 발생 가능한 이상은?
- 팬텀 리드
- 교착 상태
- 더티 리드
- 갱신 분실
정답과 해설 보기
정답: 4
정답은 ④이다. 두 트랜잭션이 모두 104를 읽으면 더하는 쪽은 114, 빼는 쪽은 99를 계산한다. 계산한 값을 그대로 쓰면 나중에 쓴 값만 남아 앞선 변경의 효과가 사라질 수 있다. 두 연산을 모두 반영한 직렬 실행 결과는 104+10-5=109이므로 114 또는 99가 남는 상황은 갱신 분실이다. 다른 트랜잭션의 미커밋 값을 읽는 더티 리드나 검색 결과 행 집합이 바뀌는 팬텀 리드와는 다르다. 같은 읽기 값을 바탕으로 덮어쓰는 순서가 원인이다.
선지별 해설
- 조건에 맞는 행 집합이 달라지는 팬텀 리드의 사례가 아니다.
- 서로 자원을 기다리는 순환 조건이 제시되지 않았다.
- 미커밋 값을 읽는 상황이 아니라 같은 기존 값을 각각 읽었다.
- 나중의 덮어쓰기가 앞선 계산의 갱신 효과를 잃게 만든다.
편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, Concurrency Control — Concurrency anomalies — Lost Update
51. 데이터베이스 설계자가 다음 조건을 확인한다. MEMBER(id, email, name)에서 id와 email이 각각 유일하고 최소하며 id를 기본키로 선택했다. email의 키 종류는?
- 대체키
- 외래키
- 부분키
- 복합 슈퍼키
정답과 해설 보기
정답: 1
정답은 ①이다. 후보키는 각 행을 유일하게 식별하면서 불필요한 속성을 포함하지 않는 최소의 속성 집합이다. id와 email이 각각 이러한 조건을 만족하고 id를 기본키로 선택했다면, 선택되지 않은 후보키 email은 대체키이다. 외래키는 다른 릴레이션의 키를 참조하는 역할이며 이 조건에는 제시되지 않았다. email 하나만으로 된 키이므로 여러 속성을 결합한 복합키도 아니다. 실제 SQL에서 단순 UNIQUE 선언과 NULL 허용 여부만으로 후보키 조건을 무조건 충족한다고 판단하지는 않는다.
선지별 해설
- 기본키로 선택되지 않은 후보키이므로 대체키다.
- 다른 테이블을 참조한다는 조건이 없다.
- 후보키 전체를 이루는 속성이며 일부만의 식별자가 아니다.
- email 단일 속성이므로 복합 슈퍼키로 분류하지 않는다.
편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, Relational Model — Integrity Constraints; Candidate Keys; Primary Key
52. 데이터베이스 설계자가 다음 조건을 확인한다. DELETE FROM 주문;과 DROP TABLE 주문;을 비교한 기술로 적절하지 않은 설명을 고르면?
- DELETE는 조건이 없으면 주문 테이블의 모든 행을 대상으로 한다.
- 두 명령 모두 테이블 정의와 제약조건까지 동일하게 제거한다.
- DELETE는 행을 조작하는 DML로 분류한다.
- DROP TABLE은 주문 테이블 객체 자체를 제거한다.
정답과 해설 보기
정답: 2
정답은 ②이다. WHERE가 없는 DELETE는 테이블의 모든 행을 삭제 대상으로 삼지만 테이블 정의 자체는 남긴다. DROP TABLE은 테이블 객체를 제거하므로 그 뒤에는 같은 이름의 테이블을 그대로 조회할 수 없다. 따라서 두 명령이 정의와 제약까지 동일하게 제거한다는 설명은 틀리다. DELETE는 데이터 조작, DROP은 스키마 정의 변경으로 구분한다. 실제 실행의 성공 여부나 연쇄 영향은 외래키·권한·트리거 등 조건에 달라질 수 있으므로 이 문항에서는 두 명령의 기본 대상을 비교한다.
선지별 해설
- 조건이 없으므로 모든 행이 삭제 대상이 된다.
- DELETE는 정의를 남기고 DROP TABLE은 객체를 제거하므로 같지 않다.
- 행을 삭제하는 데이터 조작 명령이다.
- 테이블 정의와 객체 자체를 제거하는 명령이다.
편집 해설 근거: PostgreSQL 18, DELETE — Description; PostgreSQL 18, DROP TABLE — Description; Parameters
53. 데이터베이스 설계자가 다음 조건을 확인한다. 다음 관계 대수식을 SQL로 옳게 변환한 것은? π상품명(σ재고량 < 5(상품))
[학습용 개정문항]
- SELECT DISTINCT 상품명 FROM 상품 WHERE 재고량 < 5;
- SELECT 재고량 FROM 상품 WHERE 상품명 < 5;
- SELECT 상품명 FROM 재고량 WHERE 상품 = 5;
- SELECT 상품 FROM 상품명 WHERE 재고량 < 5;
정답과 해설 보기
정답: 1
정답은 ①이다. 관계 대수의 선택 연산 σ는 재고량이 5 미만인 행을 고르고, 투영 연산 π는 그 결과에서 상품명 속성만 남긴다. 이를 SQL로 옮기면 FROM 상품, WHERE 재고량 < 5, SELECT 상품명에 대응한다. 고전적인 관계 대수는 집합을 다루므로 같은 상품명이 여러 행에서 나오더라도 중복을 제거해야 한다. SQL은 기본적으로 중복 행을 허용하므로 엄밀히 대응시키기 위해 DISTINCT를 사용한다. 다른 보기들은 테이블명, 선택 열 또는 조건의 역할이 바뀌었다.
선지별 해설
- 상품 테이블에서 재고 조건을 적용하고 상품명만 중복 없이 조회한다.
- 선택 열과 조건을 비교하는 속성이 뒤바뀌었다.
- 재고량은 열이며 테이블이 아니고 조건도 원식과 다르다.
- 상품명은 투영할 열이고 상품이 조회할 테이블이다.
편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, Relational Algebra 저자 자료 — Selection; Projection; PostgreSQL 18, SELECT — DISTINCT Clause
54. 데이터베이스 설계자가 다음 조건을 확인한다. 여러 지역 노드에 데이터를 나누어 저장하는 분산 데이터베이스의 특성으로 보기 어려운 것은?
- 사용자가 실제 저장 위치를 의식하지 않도록 위치 투명성을 제공할 수 있다.
- 복제·동시성·장애 처리가 사라져 중앙 데이터베이스보다 설계가 항상 단순하다.
- 지역 노드는 허용된 범위에서 자체 데이터를 관리할 수 있다.
- 업무 증가에 따라 새 지역 노드를 추가해 확장할 수 있다.
정답과 해설 보기
정답: 2
정답은 ②이다. 분산 데이터베이스는 여러 위치의 데이터를 하나의 논리적 서비스로 사용할 수 있도록 구성한다. 저장 위치를 감추거나 지역 데이터를 관리하고 노드를 늘리는 장점이 있을 수 있다. 그러나 노드 간 통신, 복제 일관성, 동시 갱신과 부분 장애를 조정해야 하므로 설계가 항상 더 단순해지는 것은 아니다. 복제를 사용하지 않는 구성도 가능하지만 사용한다면 그 관리는 별도로 필요하다. 지역 자율성과 확장 가능성 역시 시스템이 허용하는 정책과 구조의 범위에서 이해해야 한다.
선지별 해설
- 실제 저장 위치를 감추는 위치 투명성을 제공할 수 있다.
- 분산 환경의 통신·일관성·장애 조정 문제가 사라지지는 않는다.
- 설계와 권한이 허용하는 범위에서 지역 자율성을 가질 수 있다.
- 구성에 따라 노드 추가로 데이터와 처리 부하를 확장할 수 있다.
편집 해설 근거: Oracle Database — Distributed Database Concepts — Distributed Database Concepts; Distributed Database Transparency; Tanenbaum·van Steen, Distributed Systems 2판, 저자 공개 해답 Chapter 1 — Chapter 1, transparency questions
55. 데이터베이스 설계자가 다음 조건을 확인한다. LOG 테이블에 status 값이 OK, NULL, FAIL, NULL인 네 행이 있다. COUNT(*)와 COUNT(status)의 결과는?
- 4와 2
- 2와 4
- 4와 4
- 2와 2
정답과 해설 보기
정답: 1
정답은 ①이다. COUNT(*)는 조건을 만족하는 입력 행의 개수를 세므로 네 행 모두를 포함해 4이다. COUNT(status)는 status 식의 값이 NULL이 아닌 행만 세므로 OK와 FAIL 두 행을 포함해 2이다. NULL이 두 번 나타난다고 해서 값이 같은 행으로 합치거나 테이블에서 없애는 것이 아니다. DISTINCT를 지정하지 않았으므로 중복 제거도 수행하지 않는다. COUNT의 인수로 별표를 썼는지 특정 열을 썼는지에 따라 무엇을 세는지가 달라진다.
선지별 해설
- 전체 행 4개와 NULL이 아닌 status 2개를 각각 센다.
- 두 COUNT의 대상을 반대로 해석했다.
- COUNT(status)는 NULL 두 행을 제외한다.
- COUNT(*)는 status가 NULL인 행도 포함한다.
편집 해설 근거: PostgreSQL 18 — Aggregate Functions tutorial — Table 9.62 — count(*) and count(any)
56. 데이터베이스 설계자가 다음 조건을 확인한다. 각 부서의 최고 급여 직원 이름을 찾되 동률도 모두 표시하려 한다. 가장 적절한 SQL 접근은?
- 부서별 MAX 급여를 구한 상관 서브쿼리와 급여를 비교한다
- 전체 테이블의 MAX 급여 하나와만 비교한다
- 급여를 문자열로 바꿔 사전순 첫 행만 고른다
- GROUP BY 없이 임의의 직원 이름과 MAX를 함께 조회한다
정답과 해설 보기
정답: 1
정답은 ①이다. 현재 직원의 부서와 같은 부서에 속한 직원들에서 MAX(salary)를 구하고 현재 급여와 비교하면 부서별 최고 급여자를 찾을 수 있다. 예를 들어 WHERE e.salary = (SELECT MAX(x.salary) FROM employee x WHERE x.dept_id = e.dept_id)와 같은 방식이다. 같은 최고액을 받는 직원이 여러 명이면 모두 등식에 맞아 결과에 포함된다. 전체 직원의 최고액만 비교하면 각 부서의 최고자를 놓칠 수 있다. 급여를 문자열 순서로 비교하거나 임의 이름과 집계값을 섞는 것도 목표와 다르다.
선지별 해설
- 현재 부서로 한정한 최고 급여와 비교하므로 동률자를 모두 찾을 수 있다.
- 전체 최고액이 아닌 부서별 최고액을 구해야 한다.
- 문자열 순서는 숫자 크기 순서와 다르고 한 행만 뽑으면 동률자를 놓친다.
- 그룹과 직원의 대응이 없어 적법하거나 의미 있는 결과를 보장하지 못한다.
편집 해설 근거: PostgreSQL 18, Subquery Expressions — Subquery expressions — outer query references; PostgreSQL 18 — Aggregate Functions tutorial — max
57. 데이터베이스 설계자가 다음 조건을 확인한다. 주문 테이블 customer_id가 고객 테이블 id를 참조한다. 존재하지 않는 고객 번호의 주문 삽입을 막는 제약은?
- DEFAULT 제약
- CHECK로 주문 금액만 검사
- 인덱스 이름 지정
- 외래키 제약
정답과 해설 보기
정답: 4
정답은 ④이다. 외래키는 자식 테이블의 참조 열 값이 부모 테이블에서 허용되는 키 값과 대응하도록 참조 무결성을 유지한다. 주문의 customer_id가 고객의 id를 참조하면 존재하지 않는 비NULL 고객 번호를 넣는 주문을 막을 수 있다. DEFAULT는 값이 생략됐을 때의 기본값이며 참조 대상의 존재를 보장하지 않는다. 금액만 검사하는 CHECK나 인덱스의 이름 지정도 고객 존재 확인을 대신하지 못한다. 모든 주문에 고객을 필수로 요구하려면 NULL 허용 여부도 함께 정해야 한다.
선지별 해설
- 기본값 지정만으로 참조 고객이 존재함을 보장하지 않는다.
- 주문 금액 조건은 고객 번호의 존재를 검사하지 않는다.
- 인덱스 이름을 붙이는 것 자체는 참조 무결성 제약이 아니다.
- 참조 고객 키의 존재를 요구하는 외래키 제약이다.
편집 해설 근거: PostgreSQL 18: Constraints — §5.5.5 Foreign Keys
58. 릴레이션 R(사번, 부서코드, 부서명)에서 후보키는 사번뿐이며, 사번→부서코드와 부서코드→부서명이 성립한다. 부서코드는 여러 사원이 공유한다. 정규화를 위해 제거해야 할 종속의 유형은?
[학습용 개정문항]
- 비키 속성 사이의 이행 종속
- 후보키가 여러 개인 상태
- 복합키 일부에 대한 부분 종속
- 기본키의 완전 함수 종속
정답과 해설 보기
정답: 1
정답은 ①이다. 사번이 부서코드를 결정하고 부서코드가 부서명을 결정하므로 사번은 부서코드를 거쳐 부서명을 결정한다. 부서코드와 부서명이 비키 속성이며 부서코드가 슈퍼키가 아니라는 조건에서는 비키 속성을 통한 이행 종속이 문제가 된다. 사원 릴레이션과 부서 릴레이션을 나누면 같은 부서명을 여러 사원 행에서 반복 수정하는 일을 줄일 수 있다. 키가 단일 사번이므로 복합키의 일부에 의존하는 부분 종속과는 다르다.
선지별 해설
- 사번에서 비키 부서코드를 거쳐 부서명으로 이어지는 이행 종속이다.
- 복수 후보키 자체가 제시되거나 제거해야 할 문제가 아니다.
- 키는 단일 사번이므로 복합키의 일부에 대한 종속이 아니다.
- 키에 대한 올바른 의존을 무조건 제거하는 문제가 아니다.
편집 해설 근거: Silberschatz·Korth·Sudarshan, Database System Concepts 7판, Chapter 7 저자 자료 — Third Normal Form; Functional Dependencies
59. 데이터베이스 설계자가 다음 조건을 확인한다. 대기 그래프에 T1→T2, T2→T3, T3→T1 간선이 있다. 직접 내릴 수 있는 결론은?
- 교착상태 순환이 존재한다
- 직렬 가능성이 항상 보장된다
- 모든 트랜잭션이 이미 커밋됐다
- 갱신 손실만 발생하고 교착은 없다
정답과 해설 보기
정답: 1
정답은 ①이다. 대기 그래프의 T1→T2는 T1이 T2가 가진 잠금의 해제를 기다린다는 뜻이다. 이어 T2가 T3를, T3가 T1을 기다리면 T1→T2→T3→T1이라는 순환이 만들어진다. 이런 트랜잭션 잠금 대기 그래프에서 순환은 교착상태를 나타내며, 정상 진행만으로는 서로의 기다림이 해소되지 않는다. 시스템은 교착을 탐지해 일부 트랜잭션을 중단하는 등의 조치를 취할 수 있다. 직렬 가능성이나 갱신 분실의 유무를 이 그래프만으로 보장할 수는 없다.
선지별 해설
- 세 트랜잭션이 서로 기다리는 순환이 존재한다.
- 대기 순환으로 직렬 가능성을 항상 보장하는 결론을 내릴 수 없다.
- 다른 트랜잭션을 기다리고 있으므로 모두 커밋 완료라는 결론과 다르다.
- 잠금 대기 순환은 갱신 분실만 있다는 설명과 맞지 않는다.
편집 해설 근거: Ramakrishnan·Gehrke, Database Management Systems 3판, Concurrency Control — Deadlocks — waits-for graph
60. PostgreSQL의 일반 뷰(구체화 뷰 제외)에 대한 설명 중 틀린 것은?
[학습용 개정문항]
- 일반 뷰는 질의 정의를 저장하는 가상 테이블이라 자체 인덱스를 직접 갖지 않는다.
- 사용자에게 필요한 열만 노출해 논리적 독립성과 보안을 높일 수 있다.
- 조인이나 집계를 포함한 뷰는 갱신이 제한될 수 있다.
- 기본 테이블을 제거해도 그 테이블에 의존하는 뷰는 언제나 정상 조회된다.
정답과 해설 보기
정답: 4
정답은 ④이다. PostgreSQL의 일반 뷰는 질의 정의를 저장하며 조회할 때 기반 테이블 등을 참조하는 가상 테이블이다. 기반 객체를 제거하려 하면 종속성 때문에 거절되거나 CASCADE에 따라 뷰도 제거될 수 있으므로 언제나 정상 조회된다고 할 수 없다. 필요한 열만 노출하면 접근 범위를 구성하는 데 도움이 되지만 실제 보안은 권한 설정도 필요하다. 일반 뷰와 데이터를 저장하는 구체화 뷰는 구분하며, 집계나 복잡한 조인을 가진 뷰는 자동 갱신이 제한된다.
선지별 해설
- PostgreSQL 일반 뷰는 저장된 결과 집합에 자체 인덱스를 만드는 대상이 아니다.
- 필요한 열의 논리적 인터페이스를 제공하고 적절한 권한과 함께 노출 범위를 제한할 수 있다.
- 단순 뷰와 달리 집계·조인 등의 조건에 따라 자동 갱신이 제한된다.
- 기반 객체 삭제는 거절되거나 종속 뷰 삭제로 이어져 항상 조회가 유지되지 않는다.
편집 해설 근거: PostgreSQL 18, CREATE VIEW — Description; Updatable Views; PostgreSQL 18, DROP VIEW — CASCADE; RESTRICT
정보처리기사 필기 기출문제 · 프로그래밍 언어 활용
61. 다음 C 프로그램의 출력은?
#include <stdio.h>
int main(void) {
int a = 8, b = 3;
printf("%d", a + b * 2);
return 0;
}
[학습용 개정문항]
- 15
- 14
- 24
- 11
정답과 해설 보기
정답: 2
정답은 ②이다. C에서 곱셈은 덧셈보다 우선순위가 높으므로 a + b * 2는 a + (b * 2)로 해석한다. b가 3이므로 3×2=6을 구한 뒤 a의 값 8을 더해 14가 된다. 괄호로 (a+b)*2라고 작성했다면 다른 결과가 나오지만 주어진 식에는 그런 괄호가 없다. 두 피연산자의 값은 바뀌지 않고 모든 중간 값도 int가 표현할 수 있는 범위이므로 부호 있는 정수 오버플로 문제는 없다. printf의 %d는 이 정수 결과를 출력한다.
선지별 해설
- 주어진 값으로 8+3×2를 계산하면 15가 아니다.
- 곱셈 6을 먼저 계산한 뒤 8을 더해 14가 된다.
- 연산자 우선순위를 적용한 결과와 다르다.
- 11은 8+3만 계산해 곱셈을 누락한 값이다.
편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.5.5 Multiplicative operators; §6.5.6 Additive operators; §7.21.6.1
62. 다음 Java 프로그램의 출력은?
class Parent {
public int value() { return 4; }
}
class Child extends Parent {
@Override
public int value() { return 9; }
}
class Main {
public static void main(String[] args) {
Parent p = new Child();
System.out.print(p.value());
}
}
[학습용 개정문항]
- 0
- 9
- 4
- 컴파일 오류
정답과 해설 보기
정답: 2
정답은 ②이다. 변수 p의 선언 타입은 Parent이지만 참조하는 객체의 실제 클래스는 Child이다. value는 인스턴스 메서드이고 Child가 이를 재정의했으므로 p.value()를 호출하면 동적 메서드 선택에 따라 Child의 구현이 실행되어 9를 반환한다. 필드의 숨김이나 static 메서드의 선택과 구분해야 한다. Parent 타입으로 자식 객체를 참조하는 것은 허용되며, 부모에 선언된 호출 가능한 메서드를 사용했으므로 이 이유만으로 컴파일 오류가 발생하지 않는다.
선지별 해설
- 어느 value 구현도 0을 반환하지 않는다.
- 실제 객체 Child가 재정의한 value가 9를 반환한다.
- Parent 구현의 4는 이 객체의 재정의된 호출 결과가 아니다.
- 부모 타입의 참조로 자식 객체를 가리키고 인스턴스 메서드를 호출할 수 있다.
편집 해설 근거: Oracle Java SE 17 Language Specification, Chapter 15 — Expressions — §15.12.4.4 Locate Method to Invoke
63. 다음 Python 프로그램의 출력은?
x = 7
items = [n * 2 for n in [x]]
items.append(8)
print(items)
[학습용 개정문항]
- [14]
- [7, 8]
- [8, 14]
- [14, 8]
정답과 해설 보기
정답: 4
정답은 ④이다. x에 7을 저장하면 [x]는 원소가 하나인 리스트 [7]이다. 리스트 컴프리헨션은 그 원소를 n에 대입하고 n*2를 계산하므로 items는 먼저 [14]가 된다. append(8)은 이 리스트의 맨 뒤에 8을 원소 하나로 추가하므로 최종 출력은 [14, 8]이다. 기존의 14를 바꾸거나 8을 맨 앞에 넣지 않는다. 리스트의 생성과 변경을 문장 순서대로 추적해야 하며, x 자체가 14로 다시 대입되는 것도 아니다.
선지별 해설
- 컴프리헨션 직후 값이며 append의 결과가 빠졌다.
- n*2를 계산하므로 첫 원소는 원래 x 값 7이 아니라 14다.
- append는 앞이 아니라 맨 뒤에 새 원소를 넣는다.
- [14]를 만든 뒤 8을 추가해 [14, 8]이 된다.
편집 해설 근거: Python 3.14 Tutorial — Data Structures — §5.1 More on Lists; §5.1.3 List Comprehensions
64. 프레임 3개는 처음에 비어 있고 낮은 프레임 번호부터 채운다. 페이지 참조가 1, 2, 3, 1, 4 순서로 발생하며 적중은 FIFO 순서를 바꾸지 않는다. FIFO 적용 후 프레임 번호 순서의 상태는?
[학습용 개정문항]
- 4, 2, 3
- 1, 4, 3
- 1, 2, 4
- 4, 1, 3
정답과 해설 보기
정답: 1
정답은 ①이다. 빈 프레임에 1, 2, 3을 차례로 넣으면 프레임 번호 순서로 [1, 2, 3]이다. 다음 참조 1은 적중하므로 FIFO의 적재 순서는 바뀌지 않는다. 4가 들어올 때 가장 먼저 적재한 페이지는 여전히 1이므로 그 프레임을 4로 교체한다. 결과는 [4, 2, 3]이다. FIFO는 가장 오래 전에 적재한 페이지를 선택하며, 가장 오래 사용하지 않은 페이지를 고르는 LRU와 다르다. 최근에 1을 사용했더라도 FIFO에서 보호되는 것은 아니다.
선지별 해설
- 가장 먼저 들어온 1을 4로 바꾸므로 [4, 2, 3]이다.
- 최근 사용 시각을 기준으로 2를 교체하는 LRU와 혼동했다.
- 가장 나중에 적재한 3을 교체하는 규칙이 아니다.
- 1을 남기고 2를 없애는 것은 주어진 FIFO 순서와 맞지 않는다.
편집 해설 근거: Arpaci-Dusseau, OSTEP, 22 Beyond Physical Memory: Policies (2025 개정 표시본) — §22.3 A Simple Policy: FIFO
65. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. 실행시간 4인 P1이 먼저 도착하고 1초 뒤 실행시간 2인 P2가 온다. 현재 작업을 선점하지 않는 SJF라면 첫 실행 순서는?
- 두 프로세스 동시 실행
- P1 다음 P2
- 도착과 무관하게 무작위 실행
- P2 다음 P1
정답과 해설 보기
정답: 2
정답은 ②이다. 처음에는 P1만 도착해 준비되어 있으므로 CPU는 P1을 실행한다. 1초 뒤 더 짧은 P2가 도착해도 비선점 SJF에서는 실행 중인 P1을 중단하지 않는다. P1이 4초의 실행을 마친 뒤에 P2가 실행되므로 순서는 P1 다음 P2이다. SJF의 짧은 작업 우선 선택은 CPU를 다음 작업에 배정할 시점의 준비 작업 사이에서 적용한다. 도착하지 않은 작업을 먼저 실행하거나, 선점형 최단 잔여 시간 방식과 동일하게 처리해서는 안 된다.
선지별 해설
- 단일 CPU에서 두 프로세스가 동시에 실행한다는 조건이 아니다.
- P1이 먼저 실행을 시작하고 완료한 뒤 P2가 실행한다.
- 준비 작업의 실행시간을 비교하는 규칙이 있으며 무작위가 아니다.
- P2가 도착할 때 이미 P1이 실행 중이고 선점하지 않는다.
편집 해설 근거: Arpaci-Dusseau, OSTEP v1.10, 7 Scheduling: Introduction — Shortest Job First; Shortest Time-to-Completion First
66. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. 192.168.1.64/27 네트워크의 사용 가능한 호스트 주소 범위는?
- 192.168.1.65 ~ 192.168.1.94
- 192.168.1.66 ~ 192.168.1.93
- 192.168.1.64 ~ 192.168.1.95
- 192.168.1.65 ~ 192.168.1.95
정답과 해설 보기
정답: 1
정답은 ①이다. /27은 IPv4 주소의 호스트 부분에 5비트를 남기므로 한 블록에 32개 주소가 있다. 192.168.1.64부터 시작한 이 서브넷의 마지막 주소는 192.168.1.95이다. 일반적인 이 서브넷에서는 .64가 네트워크 주소, .95가 브로드캐스트 주소이므로 호스트에 할당할 범위는 .65부터 .94까지의 30개이다. 주소 블록 전체와 호스트에 배정할 주소를 구별해야 한다. /31 점대점 링크의 별도 규칙을 이 /27 문제에 적용하지 않는다.
선지별 해설
- 네트워크와 브로드캐스트를 제외한 .65~.94가 호스트 범위다.
- 양 끝에서 사용 가능한 .65와 .94를 불필요하게 더 제외했다.
- 네트워크 .64와 브로드캐스트 .95를 포함한 전체 블록이다.
- 브로드캐스트 주소 .95는 호스트 범위에서 제외해야 한다.
편집 해설 근거: IETF RFC 1878, Variable Length Subnet Table For IPv4 (1995) — Table — /27, 255.255.255.224
67. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. C 배열 int a[4]={3,5,7,9}; int *p=a+1; 를 실행한 뒤 *(p+2)의 값은?
- 7
- 3
- 5
- 9
정답과 해설 보기
정답: 4
정답은 ④이다. 배열 a의 인덱스는 0부터 시작하므로 a[0]=3, a[1]=5, a[2]=7, a[3]=9이다. p=a+1은 두 번째 원소 a[1]을 가리킨다. 여기에 다시 2를 더하면 p+2는 a+3과 같으므로 역참조한 *(p+2)는 a[3]의 값 9이다. 포인터 덧셈의 한 칸은 바이트 하나가 아니라 가리키는 자료형의 원소 하나를 기준으로 한다. 여기서는 같은 배열 안의 유효한 원소를 가리키므로 범위를 벗어난 역참조가 아니다.
선지별 해설
- 7은 a[2]이며 p에서 한 칸 더한 위치의 값이다.
- 3은 배열의 첫 원소로 p+2가 가리키지 않는다.
- 5는 p 자체가 가리키는 a[1]이다.
- a+1에 2를 더하면 a[3]을 가리켜 값은 9다.
편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.5.6 Additive operators; §6.5.3.2 Address and indirection operators
68. 다음 Java 프로그램의 출력은?
class Main {
public static void main(String[] args) {
try {
throw new RuntimeException();
} catch (RuntimeException e) {
System.out.print("C");
} finally {
System.out.print("F");
}
}
}
[학습용 개정문항]
- CF
- FC
- C
- F
정답과 해설 보기
정답: 1
정답은 ①이다. try에서 RuntimeException이 발생하면 일치하는 catch가 실행되어 먼저 C를 출력한다. catch가 정상적으로 끝난 후 finally가 실행되면서 F를 출력하므로 결과는 CF이다. finally는 예외가 발생했을 때도 실행되는 정리 구문이지만, 프로세스 강제 종료나 실행 중단까지 무조건 실행을 보장하는 것은 아니다. 이 코드에는 그런 종료나 추가 예외가 없고 두 print 호출은 줄바꿈을 추가하지 않으므로 C와 F가 이어서 출력된다.
선지별 해설
- 예외를 catch가 처리한 뒤 finally가 실행되어 CF가 된다.
- finally가 catch보다 먼저 실행되는 코드가 아니다.
- catch가 끝난 뒤 finally도 실행되므로 F가 빠지지 않는다.
- 예외 유형이 catch와 일치하므로 C도 출력한다.
편집 해설 근거: Oracle Java SE 25 Language Specification, Chapter 14 Blocks, Statements, and Patterns — §14.20.2 Execution of try-finally and try-catch-finally
69. 3개의 빈 프레임을 낮은 번호부터 채우고 FIFO로 교체한다. 참조 문자열은 2, 3, 2, 1, 5, 2, 4이며 적중은 FIFO 순서를 바꾸지 않는다. 처리를 마친 후 프레임 번호 순서의 상태는?
[학습용 개정문항]
- 5, 1, 4
- 5, 3, 4
- 5, 2, 4
- 2, 1, 4
정답과 해설 보기
정답: 3
정답은 ③이다. 2와 3을 적재한 뒤 다시 참조한 2는 적중하므로 적재 순서가 바뀌지 않는다. 이어 1을 넣으면 [2, 3, 1]이다. 5는 가장 오래된 2를 바꾸어 [5, 3, 1], 다음 2는 그다음 오래된 3을 바꾸어 [5, 2, 1], 마지막 4는 1을 바꾸어 [5, 2, 4]가 된다. 처음과 중간의 같은 페이지 번호를 하나의 연속 체류로 보면 안 된다. 한 번 교체된 2는 다시 들어올 때 새 적재 시점을 갖는다.
선지별 해설
- 1은 마지막 4를 적재할 때 교체되어 남지 않는다.
- 3은 두 번째로 2를 적재할 때 교체된다.
- FIFO 적재 순서를 따라 최종 프레임은 [5, 2, 4]다.
- 5가 마지막까지 남으며 1은 마지막 교체 대상이다.
편집 해설 근거: Arpaci-Dusseau, OSTEP, 22 Beyond Physical Memory: Policies (2025 개정 표시본) — §22.3 A Simple Policy: FIFO
70. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. 웹 서버가 IP 위에서 클라이언트와 연결을 설정하고, 바이트 스트림의 순서 보장·재전송·흐름 제어를 제공한다. 이 기능을 담당하는 TCP/IP 계층은?
- 트랜스포트 계층
- 응용 계층
- 네트워크 접속 계층
- 인터넷 계층
정답과 해설 보기
정답: 1
정답은 ①이다. TCP는 응용 프로그램 사이에 신뢰성 있는 순서화된 바이트 스트림을 제공하는 전송 계층 프로토콜이다. 연결 설정과 순서 번호, 확인 응답·재전송, 수신 측 흐름 제어가 지문의 기능에 해당한다. 인터넷 계층의 IP는 패킷 주소 지정과 전달을 담당하며 TCP의 바이트 스트림 서비스를 직접 제공하지 않는다. 웹의 요청과 응답 의미는 응용 계층에서 다루고, 네트워크 접속 계층은 링크의 실제 전달과 관련된다. 프로토콜이 올라가는 계층과 웹 서비스 자체의 계층을 구별해야 한다.
선지별 해설
- 연결과 순서화된 바이트 스트림을 제공하는 TCP의 전송 계층이다.
- 웹 요청·응답의 의미를 다루지만 지문은 TCP 전달 기능을 설명한다.
- 로컬 링크의 프레임 전달 등을 다루는 계층이다.
- IP 패킷 전달 계층이며 TCP의 연결·재전송 기능과 다르다.
편집 해설 근거: IETF RFC 9293, Transmission Control Protocol (2022) — §2.2 Model of Operation; §3.4 Sequence Numbers; §3.8.5 Retransmission Timeout
71. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. Python에서 nums=[1,2,3,4,5,6]일 때 [x*x for x in nums if x%2==0]의 결과는?
- [1, 4, 9, 16, 25, 36]
- [4, 16, 36]
- [1, 9, 25]
- [2, 4, 6]
정답과 해설 보기
정답: 2
정답은 ②이다. 리스트 컴프리헨션은 nums의 원소를 순서대로 x에 대입하고 if 조건이 참인 경우에만 앞의 식 x*x를 결과에 넣는다. x%2==0을 만족하는 원소는 2, 4, 6이다. 이 값을 각각 제곱하면 4, 16, 36이므로 결과는 [4, 16, 36]이다. 조건을 무시하고 모든 원소를 제곱하거나 홀수를 선택하면 다른 목록이 된다. 원본 nums는 이 표현식만으로 변경되지 않으며 새 결과 리스트가 만들어진다.
선지별 해설
- 짝수 조건을 무시하고 모든 원소를 제곱한 결과다.
- 짝수 2, 4, 6의 제곱을 순서대로 모은다.
- 조건과 반대로 홀수를 골라 제곱한 결과다.
- 짝수를 고른 뒤 x*x로 바꾸는 단계가 빠졌다.
편집 해설 근거: Python 3.14 Tutorial — Data Structures — §5.1.3 List Comprehensions
72. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. UNIX에서 report.sh의 소유자에게 실행 권한을 추가할 명령은?
- cp u+x report.sh
- chmod u+x report.sh
- cat u+x report.sh
- ls u+x report.sh
정답과 해설 보기
정답: 2
정답은 ②이다. chmod는 파일의 접근 권한을 변경하는 명령이다. 기호 모드 u+x에서 u는 소유자, +는 기존 권한에 추가, x는 실행 권한을 뜻하므로 소유자에게 실행 권한을 추가한다. =로 전체 권한을 지정하는 것과 달리 다른 기존 권한을 한꺼번에 대체하지 않는다. cp는 파일 복사, cat은 내용 출력, ls는 목록 확인 명령이다. 명령을 실행하는 사용자는 해당 파일의 권한을 바꿀 수 있는 소유자이거나 적절한 권한을 가진 사용자여야 한다.
선지별 해설
- cp는 파일을 복사하며 기호 모드로 접근 권한을 설정하는 명령이 아니다.
- chmod u+x는 소유자의 실행 비트를 추가한다.
- cat은 파일 내용을 읽어 출력하는 데 쓰인다.
- ls는 파일 목록과 속성을 확인하는 데 쓰인다.
편집 해설 근거: POSIX.1-2024 Issue 8, chmod utility — Symbolic mode — who; op; perm
73. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. 페이지 참조가 1,2,3,1,4이고 프레임이 3개다. LRU에서 4를 적재할 때 교체되는 페이지는?
- 3
- 2
- 4
- 1
정답과 해설 보기
정답: 2
정답은 ②이다. 1, 2, 3을 적재한 뒤 1을 다시 참조하면 마지막 사용 시점이 가장 오래된 페이지는 2가 된다. 최근 사용 순서를 오래된 쪽부터 적으면 2, 3, 1이다. 빈 프레임이 없는 상태에서 4가 들어오므로 LRU는 그중 2를 교체한다. 가장 먼저 적재한 1을 고르는 FIFO와는 기준이 다르다. LRU에서는 적중한 페이지도 최근 사용 시점을 갱신하므로 같은 참조 문자열에서도 FIFO와 다른 결과가 나올 수 있다.
선지별 해설
- 3보다 먼저 마지막으로 사용된 2가 교체 대상이다.
- 2가 가장 오래 사용되지 않아 LRU의 교체 대상이다.
- 4는 새로 넣으려는 페이지로 기존 프레임의 희생 페이지가 아니다.
- 1은 바로 앞에서 다시 사용했으므로 가장 최근 사용 페이지다.
편집 해설 근거: Arpaci-Dusseau, OSTEP, 22 Beyond Physical Memory: Policies (2025 개정 표시본) — LRU — Using History
74. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. 가변 분할 메모리의 빈 공간이 18KB, 25KB, 40KB, 12KB이고 16KB 프로세스를 Best Fit으로 배치한다. 선택되는 빈 공간과 배치 후 남는 크기는? 각 빈 공간은 서로 분리되어 있으며 분할 가능한 가용 영역이다.
- 40KB를 선택하고 24KB가 남는다.
- 적재할 수 없다.
- 18KB를 선택하고 2KB가 남는다.
- 25KB를 선택하고 9KB가 남는다.
정답과 해설 보기
정답: 3
정답은 ③이다. Best Fit은 요청을 수용할 수 있는 빈 영역 중 가장 작은 영역을 선택한다. 16KB를 넣을 수 있는 후보는 18KB, 25KB, 40KB이며 12KB는 부족하다. 그중 가장 작은 18KB 영역을 선택하면 18−16=2KB의 빈 공간이 남는다. 이 문제는 가용 영역을 분할할 수 있다고 했으므로 남은 2KB는 별도의 빈 조각으로 볼 수 있다. 선택 영역 전체를 프로세스에 고정 배정하는 경우의 내부 단편화와 혼동해서는 안 된다.
선지별 해설
- 40KB도 들어갈 수 있지만 최소 적합 영역이 아니다.
- 18KB 이상인 영역이 있어 배치할 수 있다.
- 최소 적합 크기 18KB를 골라 2KB가 남는다.
- 25KB보다 작은 18KB에도 들어가므로 Best Fit 선택이 아니다.
편집 해설 근거: Arpaci-Dusseau & Arpaci-Dusseau, OSTEP Chapter 17 Free-Space Management — Best Fit — Basic Strategies
75. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. 172.16.4.0/24 네트워크를 FLSM으로 8개 서브넷에 균등 분할하고 subnet-zero를 사용한다. 세 번째 서브넷의 다섯 번째 사용 가능한 호스트 주소는? 서브넷과 호스트는 주소가 작은 순서로 센다.
- 172.16.4.95
- 172.16.4.64
- 172.16.4.68
- 172.16.4.69
정답과 해설 보기
정답: 4
정답은 ④이다. /24를 같은 크기의 8개로 나누려면 서브넷 비트 3개를 추가하므로 각 서브넷은 /27이다. 주소 간격은 32이며 subnet-zero를 포함해 첫 서브넷은 .0, 두 번째는 .32, 세 번째는 .64에서 시작한다. 세 번째 서브넷의 사용 가능한 첫 호스트는 .65이므로 다섯 번째는 .69이다. .64는 네트워크 주소이고 .95는 브로드캐스트 주소다. 세 번째 서브넷을 셀 때 첫 번째 .0 블록을 빠뜨리거나 호스트 순번에 네트워크 주소를 포함하면 안 된다.
선지별 해설
- 세 번째 서브넷의 브로드캐스트 주소다.
- 세 번째 서브넷의 네트워크 주소이며 첫 호스트가 아니다.
- 네 번째 사용 가능한 호스트에 해당한다.
- 세 번째 /27의 첫 호스트 .65에서 네 칸 뒤인 .69다.
편집 해설 근거: IETF RFC 1878, Variable Length Subnet Table For IPv4 (1995) — /24 and /27 subnet masks; RFC 4632, Classless Inter-domain Routing (2006) — CIDR prefix addressing
76. 단일 CPU에서 시각 0에 P1(버스트 5), P2(버스트 3)이 도착한다. 초기 준비 큐 순서는 P1, P2이며 라운드로빈 시간 할당량은 2, 문맥 전환 비용은 0이다. 처음 세 CPU 구간의 실행 순서는?
[학습용 개정문항]
- P1(5) → P2(3)
- P1(2) → P2(2) → P1(2)
- P2(2) → P1(2) → P2(1)
- P1(2) → P1(2) → P2(2)
정답과 해설 보기
정답: 2
정답은 ②이다. 준비 큐의 앞에 있는 P1이 먼저 2만큼 실행되고 남은 버스트는 3이 된다. 아직 끝나지 않았으므로 큐 뒤로 이동하여 P2가 다음 2만큼 실행한다. P2의 남은 버스트는 1이며 다시 큐 뒤로 가고, P1이 세 번째 구간에서 2만큼 실행한다. 따라서 처음 세 구간은 P1(2)→P2(2)→P1(2)이다. 동시에 도착한 프로세스의 초기 큐 순서를 정하지 않으면 시작 순서가 달라질 수 있으므로 주어진 순서를 확인해야 한다.
선지별 해설
- 라운드로빈의 시간 할당량에 따른 교대가 적용되지 않았다.
- 초기 큐 P1, P2와 할당량 2를 따르면 이 순서다.
- 초기 큐의 선두가 P1이므로 P2가 먼저 시작하지 않는다.
- P1의 할당량이 끝나면 대기 중인 P2에게 기회가 간다.
편집 해설 근거: Arpaci-Dusseau, OSTEP v1.10, 7 Scheduling: Introduction — Round Robin
77. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. POSIX C 프로그램에서 현재 프로세스를 복제해 자식 프로세스를 만드는 빈칸의 함수는? pid_t pid = ( ); if (pid == 0) { /* child */ } else if (pid > 0) { /* parent */ }
- waitpid
- fork
- chmod
- execve
정답과 해설 보기
정답: 2
정답은 ②이다. fork()는 호출한 프로세스를 바탕으로 자식 프로세스를 만든다. 성공하면 자식에서는 반환값이 0이고 부모에서는 생성한 자식의 프로세스 ID가 양수로 반환되므로 지문의 두 분기로 구분한다. 실패한 경우에는 부모에 −1을 반환하고 자식은 생성되지 않는다. execve는 현재 프로세스의 프로그램 이미지를 바꾸며 새로운 자식 생성과는 다르다. waitpid는 자식 상태 변화를 기다리고 chmod는 파일 권한을 변경하는 함수이다.
선지별 해설
- 자식의 상태 변화를 기다리거나 확인하는 함수다.
- 자식 프로세스를 생성하고 부모·자식에 다른 반환값을 준다.
- 파일 접근 권한을 변경하는 함수다.
- 현재 프로세스의 실행 이미지를 교체하며 자체로 새 자식을 만들지 않는다.
편집 해설 근거: The Open Group, POSIX.1-2024 fork() — DESCRIPTION; RETURN VALUE
78. 다음 C 프로그램의 출력은?
#include <stdio.h>
int main(void) {
int v[] = {2, 4, 8};
int sum = 0;
for (int i = 0; i < 3; ++i) {
sum += v[i] * (1 << i);
}
printf("%d", sum);
return 0;
}
[학습용 개정문항]
- 48
- 84
- 24
- 42
정답과 해설 보기
정답: 4
정답은 ④이다. i가 0, 1, 2일 때 1<<i는 각각 1, 2, 4이다. 배열 값 2, 4, 8에 이를 곱하면 2×1=2, 4×2=8, 8×4=32가 된다. sum은 0에서 시작하여 2, 10, 42로 누적되므로 출력은 42이다. 배열 원소만 합하거나 이동한 비트를 원래 값과 혼동하면 결과가 달라진다. 여기서는 이동 횟수가 작고 중간 정수 값도 표현 범위 안에 있어 음수 이동이나 오버플로 같은 정의되지 않은 동작은 발생하지 않는다.
선지별 해설
- 세 항의 실제 합 2+8+32와 다르다.
- 모든 항을 두 배로 계산하면 생길 수 있으나 식의 이동 횟수와 맞지 않는다.
- 가중치를 적용한 세 항을 모두 더한 결과가 아니다.
- 1, 2, 4의 가중치를 적용해 2+8+32=42다.
편집 해설 근거: ISO/IEC JTC1/SC22/WG14, C11 committee draft N1570 (2011-04-12) — §6.5.7 Bitwise shift operators; §6.8.5.3 The for statement
79. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. 다음 중 소스 컴파일·테스트·패키징을 자동화하는 빌드 도구가 아니라, KDC가 발급한 티켓으로 네트워크 주체를 인증하는 기술은?
- Gradle
- Apache Ant
- Kerberos
- Apache Maven
정답과 해설 보기
정답: 3
정답은 ③이다. Kerberos는 신뢰하는 키 배포 센터인 KDC와 티켓을 이용하여 네트워크의 주체를 인증하는 프로토콜이다. 클라이언트가 서비스에 접근할 때 인증 정보를 티켓으로 제시하는 구조이며 소스 컴파일이나 패키징을 수행하는 빌드 도구가 아니다. Gradle, Ant와 Maven은 프로젝트 빌드 과정을 정의하고 실행하는 도구로 활용된다. 자동화라는 공통 표현만으로 기능을 묶지 않고, 소프트웨어 산출물을 만드는 빌드와 주체의 신원을 확인하는 인증을 구별해야 한다.
선지별 해설
- 태스크 기반 빌드 자동화 도구다.
- 빌드 작업과 의존 관계를 정의하는 자동화 도구다.
- KDC가 발급한 티켓을 이용하는 네트워크 인증 프로토콜이다.
- 프로젝트 빌드와 의존성 관리를 지원하는 도구다.
편집 해설 근거: IETF RFC 4120, The Kerberos Network Authentication Service V5 (2005) — RFC 4120 — §1 Introduction; authentication exchanges; Gradle Build Tool User Manual, Build Lifecycle (2026-10-08 확인) — Task Graphs; Build Phases; Apache Maven, What is Maven? — What is Maven?
80. 프로그램과 운영환경을 분석하여 다음 물음에 답한다. 손실을 일부 허용하는 실시간 음성 패킷을 낮은 지연으로 전송하고 재전송 대기는 피하려 한다. 전송 계층 선택은?
- UDP
- TCP
- ICMP
- ARP
정답과 해설 보기
정답: 1
정답은 ①이다. UDP는 전송 계층에서 데이터그램을 전달하며 자체적으로 순서 보장이나 손실 재전송을 수행하지 않는다. 일부 손실보다 지연 감소를 중시하고 전송 계층의 재전송 대기를 피하려는 지문에는 UDP가 적합하다. 다만 UDP를 선택했다고 실제 네트워크 지연이 언제나 작거나 손실이 없다는 뜻은 아니다. 필요한 순서 처리나 오류 대응은 응용이 설계해야 한다. TCP는 신뢰성 있는 스트림을 제공하고, ICMP와 ARP는 이 문항에서 고를 전송 계층 프로토콜이 아니다.
선지별 해설
- 자체 재전송을 하지 않는 데이터그램 전송으로 요구에 부합한다.
- 신뢰성 유지를 위한 재전송과 순서화가 지연에 영향을 줄 수 있다.
- IP 계층의 제어·오류 메시지에 쓰이는 프로토콜이다.
- 로컬 네트워크에서 IP 주소에 대응하는 링크 주소를 찾는 데 쓰인다.
편집 해설 근거: IETF RFC 768, User Datagram Protocol (1980) — RFC 768 — Introduction; IETF RFC 9293, Transmission Control Protocol (2022) — §2.2 Model of Operation
정보처리기사 필기 기출문제 · 정보시스템 구축관리
81. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 승인되지 않은 사용자가 급여 파일을 읽지는 못했지만 값을 바꾸었다. 직접 훼손된 보안 속성은?
- 무결성
- 가용성
- 부인방지
- 기밀성
정답과 해설 보기
정답: 1
정답은 ①이다. 무결성은 정보가 권한 없이 변경되거나 파괴되지 않도록 보호하는 속성이다. 공격자가 급여 파일을 읽지는 못했더라도 값을 바꿨다면 정보의 정확성과 신뢰성이 손상되므로 직접 훼손된 것은 무결성이다. 기밀성은 허용되지 않은 공개나 열람을 막는 속성이고 가용성은 필요한 때 접근하고 사용할 수 있게 하는 속성이다. 부인방지는 수행 사실을 나중에 부정하지 못하도록 하는 목적이다. 정보 유출이 없었다고 해서 보안 침해가 없었던 것은 아니다.
선지별 해설
- 권한 없는 값의 변경이므로 무결성이 직접 훼손되었다.
- 서비스 접근 불가가 아니라 데이터 변경이 제시되었다.
- 행위 사실의 부인 여부를 묻는 사례가 아니다.
- 허가 없는 열람이나 공개는 발생하지 않았다는 조건이다.
편집 해설 근거: NIST FIPS 199 — §2, Integrity; Confidentiality; Availability
82. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 한 악성 프로그램이 네트워크의 취약한 호스트를 스캔해 스스로 복사되고, 별도의 숙주 파일이나 사용자의 실행 없이 다음 호스트로 전파된다. 이 유형은?
- Adware
- Reflection Attack
- Worm
- Trojan Horse
정답과 해설 보기
정답: 3
정답은 ③이다. 웜은 스스로 복제하고 다른 시스템으로 전파할 수 있는 독립적인 악성 프로그램이다. 취약한 호스트를 찾아 별도의 숙주 파일 감염이나 사용자 실행 없이 다음 호스트로 퍼지는 사례가 이에 해당한다. 바이러스는 일반적으로 다른 프로그램이나 파일에 의존해 증식한다는 점에서 구별한다. 트로이 목마는 유용한 프로그램처럼 보이면서 숨겨진 악성 기능을 수행하는 유형이며 자기 복제가 필수 특징은 아니다. 광고 소프트웨어나 반사 공격 역시 지문의 자율 전파 특징과 다르다.
선지별 해설
- 광고 표시와 관련된 소프트웨어 유형으로 자율 전파가 핵심 정의가 아니다.
- 위조 주소에 대한 제3자의 응답을 이용하는 공격 방식이다.
- 스스로 복제하여 네트워크의 다른 호스트로 전파하는 웜이다.
- 유용한 기능으로 가장한 악성 동작이 중심이며 자기 복제가 필수는 아니다.
편집 해설 근거: NIST CSRC Glossary, worm: SP 800-28 Version 2 및 SP 800-82 Rev. 3 정의 — Worm — SP 800-28 Version 2; SP 800-82 Rev.3 definitions
83. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 대용량 파일을 빠르게 암호화하고 같은 비밀키로 복호화하려 한다. 적합한 알고리즘은?
- AES
- RSA
- SHA-256
- ECDSA
정답과 해설 보기
정답: 1
정답은 ①이다. AES는 같은 비밀키 계열을 사용해 암호화와 복호화를 수행하는 대칭키 블록 암호이다. 대용량 데이터의 기밀성을 보호하는 데 널리 사용되며 블록 크기는 128비트, 키 길이는 128·192·256비트이다. RSA는 공개키 암호 체계이고 SHA-256은 해시 함수, ECDSA는 전자서명 알고리즘이므로 지문의 같은 비밀키로 파일을 암복호화하는 요구와 다르다. 실제 파일 암호화에는 AES 자체뿐 아니라 안전한 운용 모드와 키·논스 관리도 필요하다.
선지별 해설
- 대칭키 블록 암호로 같은 비밀키를 이용하는 암복호화 요구에 맞는다.
- 공개키와 개인키를 구분하는 비대칭 암호 체계다.
- 해시값을 만드는 함수이며 역연산으로 파일을 복호화하지 않는다.
- 전자서명을 생성·검증하는 알고리즘이다.
편집 해설 근거: NIST FIPS 197-upd1, Advanced Encryption Standard (2023) — §1 Scope; §3.1 Inputs and Outputs; §5 Algorithm Specification
84. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 웹 애플리케이션 서버의 논리적 보안 설정 점검표가 아니라 시설의 물리적 보안 통제로 분류해야 하는 것은?
- 서버실 출입 배지 확인과 방문자 동행
- 서비스 계정의 최소 권한 설정
- 운영체제 관리 포트의 접근 대상 제한
- 진단 정보와 로그에 포함되는 민감정보 제한
정답과 해설 보기
정답: 1
정답은 ①이다. 서버실 출입 배지를 확인하고 방문자를 동행시키는 조치는 시설에 물리적으로 접근할 수 있는 사람을 통제한다. 따라서 웹 서버의 계정이나 설정을 조정하는 논리적 보안과 구분해 물리적 접근 통제로 분류한다. 서비스 계정의 최소 권한, 관리 포트 접근 제한, 로그의 민감정보 제한은 소프트웨어와 정보 접근에 관한 통제이다. 물리적 통제가 서버 보안에 중요하지 않다는 의미는 아니며, 보호 대상과 작동 방식에 따라 관리 영역을 구분하는 것이다.
선지별 해설
- 서버실이라는 물리적 공간의 출입을 통제한다.
- 계정이 수행할 수 있는 작업을 제한하는 논리적 권한 통제다.
- 네트워크 관리 인터페이스에 대한 논리적 접근 통제다.
- 진단·로그를 통한 정보 노출을 제한하는 소프트웨어 통제다.
편집 해설 근거: NIST SP 800-53 Rev.5, Security and Privacy Controls (2020, 2020-12-10 정오표 포함본) — PE-3 Physical Access Control; AC-6 Least Privilege; SI-11 Error Handling
85. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 서버가 다수의 위조 출발지 SYN을 받고 연결 완료 ACK 없이 반개방 연결만 쌓인다. 공격은?
- SYN Flood
- SQL 삽입
- ARP 스푸핑
- Smurf
정답과 해설 보기
정답: 1
정답은 ①이다. TCP 연결은 SYN, SYN-ACK, ACK의 교환으로 성립한다. SYN flood는 다수의 연결 요청을 보내고 마지막 확인 단계가 완료되지 않게 하여 서버의 반개방 연결 상태와 관련 자원을 소모시키는 공격이다. 지문처럼 출발지 주소를 위조하면 정상적인 최종 ACK가 돌아오지 않는 요청이 쌓일 수 있다. SQL 삽입은 질의 구조 변조, ARP 스푸핑은 로컬 주소 대응 위조, Smurf는 ICMP 반사·증폭을 이용하므로 이 연결 상태의 고갈과 구별된다.
선지별 해설
- 완료되지 않은 TCP 연결 요청으로 자원을 소모시키는 SYN flood다.
- 데이터베이스 질의에 입력을 코드로 섞는 취약점을 이용한다.
- IP와 링크 계층 주소의 대응을 속이는 공격이다.
- ICMP 반사·증폭 공격이며 SYN의 반개방 연결과 다르다.
편집 해설 근거: IETF RFC 4987, TCP SYN Flooding Attacks and Common Mitigations (2007) — §2 Attack Description; §2.2 Theory of Operation
86. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. V 모델의 개발 단계와 대응 테스트 수준을 연결한 것으로 틀린 설명을 고르면? 왼쪽의 명세·설계 산출물과 오른쪽의 검증 활동이 서로 대응한다고 본다.
- 통합 테스트 — 아키텍처와 인터페이스 설계 검증
- 단위 테스트 — 모듈 또는 상세 설계 검증
- 인수 테스트 — 모듈 상세 설계의 내부 분기 검증
- 시스템 테스트 — 시스템 요구사항과 시스템 명세 검증
정답과 해설 보기
정답: 3
정답은 ③이다. V 모델은 개발 산출물과 이를 검증할 시험 수준을 대응시켜 일찍부터 시험을 계획하도록 돕는다. 모듈 상세 설계는 단위 시험, 아키텍처와 인터페이스는 통합 시험, 시스템 요구사항은 시스템 시험의 주요 근거이다. 인수 시험은 사용자의 필요와 업무 요구, 인수 기준을 충족하는지 판단한다. 따라서 모듈 내부 분기 검증을 인수 시험의 대응 목적으로 연결한 ③이 틀리다. 실제 프로젝트에서 하나의 시험 기법이 여러 수준에 쓰일 수 있다는 점과 기본 목적의 대응은 구별한다.
선지별 해설
- 구성 요소 간 연결과 인터페이스를 확인하는 통합 시험에 맞는다.
- 개별 모듈의 구현과 상세 동작을 확인하는 단위 시험에 맞는다.
- 인수 시험의 중심은 사용자·업무 요구이며 모듈 내부 분기 설계가 아니다.
- 시스템 전체의 요구사항과 명세 충족을 확인한다.
편집 해설 근거: ISTQB CTFL 2018 Syllabus v3.1.1 (2021-07-01) — §2.1.1 Sequential Development Models; §2.2 Test Levels
87. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 낙관 LOC 600, 가능성 높은 LOC 800, 비관 LOC 1600을 제시했다. 가중 평균 (낙관+4×가능+비관)/6은?
- 1600 LOC
- 900 LOC
- 600 LOC
- 800 LOC
정답과 해설 보기
정답: 2
정답은 ②이다. 지문이 지정한 가중 평균은 낙관 추정값과 비관 추정값에 각각 가중치 1, 가장 가능성 높은 값에 가중치 4를 적용한다. 따라서 (600+4×800+1600)÷6=(600+3200+1600)÷6=5400÷6=900 LOC이다. 단순히 세 값을 더해 3으로 나누는 산술 평균이나 중간 추정값 800을 그대로 고르는 방식이 아니다. 이 값은 주어진 가정에 따른 규모 추정치이며 실제 최종 코드 줄 수나 개발 공수를 보장하지 않는다.
선지별 해설
- 비관 추정값 하나만 선택한 값이다.
- 가중 합 5400을 총 가중치 6으로 나누면 900 LOC다.
- 낙관 추정값 하나만 선택한 값이다.
- 가장 가능성 높은 값이지만 지정된 가중 평균 결과는 아니다.
편집 해설 근거: R. G. Batson, NASA TM-100311 Program Risk Analysis Handbook (1987) — Three-point estimation — optimistic, most likely, pessimistic
88. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 로그인 API가 문자열 연결 대신 SELECT … WHERE id = ? AND pw_hash = ? 형태의 준비된 문장을 사용한다. 이 보안 조치에 대한 기술로 적절하지 않은 설명을 고르면?
- 사용자 입력을 SQL 코드가 아닌 바인딩 값으로 전달한다.
- 입력이 쿼리 구조를 바꾸기 어렵게 해 SQL 삽입 위험을 낮춘다.
- 모든 DBMS의 문법·함수·주석 표기가 같으므로 공격 구문도 항상 동일하다.
- 서버 쪽 권한 최소화와 오류 정보 제한도 함께 적용할 수 있다.
정답과 해설 보기
정답: 3
정답은 ③이다. 준비된 문장과 올바른 매개변수 바인딩은 SQL 구조와 사용자 입력 값을 분리한다. 입력에 따옴표나 SQL처럼 보이는 내용이 있어도 값으로 처리하도록 하여 질의 구조를 바꾸는 공격을 막는 데 도움이 된다. DBMS마다 문법, 함수와 주석 표기 등이 다를 수 있으므로 모든 공격 구문이 동일하다는 ③은 틀리다. 데이터베이스 권한 최소화와 불필요한 오류 정보 제한도 함께 적용할 수 있다. 값 바인딩만으로 모든 동적 테이블명이나 SQL 조립 방식까지 안전해지는 것은 아니다.
선지별 해설
- 값을 매개변수로 바인딩해 질의 구조와 분리한다.
- 입력이 실행 구문으로 해석되는 것을 방지하는 핵심 방어다.
- DBMS별 문법과 기능 차이를 부정한 잘못된 설명이다.
- 주요 방어와 함께 권한과 오류 정보의 범위를 제한할 수 있다.
편집 해설 근거: OWASP — SQL Injection Prevention — Defense Option 1: Prepared Statements; Least Privilege
89. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 대규모 결제 시스템을 나선형 모델로 개발할 때의 기술로 틀린 설명을 고르면? 초기 요구가 완전히 확정되지 않았고, 외부 결제망 연동과 성능 위험을 반복적으로 확인해야 한다.
- 위험이 큰 기술은 시제품이나 분석으로 조기에 검증할 수 있다.
- 고객 평가 결과를 다음 반복 주기의 계획에 반영할 수 있다.
- 상세 설계가 시작되면 이후 반복 주기에서는 위험 분석을 다시 수행하지 않는다.
- 각 반복 주기에서 목표·대안·제약을 먼저 정리한다.
정답과 해설 보기
정답: 3
정답은 ③이다. 나선형 모델은 반복마다 목표·대안·제약을 정리하고 위험을 평가하며, 그 결과에 따라 개발·검증과 다음 반복의 계획을 진행한다. 외부 결제망 연동이나 성능처럼 위험이 큰 부분은 시제품과 분석으로 먼저 확인할 수 있다. 상세 설계를 시작했다는 이유로 이후의 위험 분석을 중단하지 않는다. 새로운 정보와 고객 평가가 나오면 다음 주기의 목표와 접근을 조정한다. 단순히 같은 개발 단계를 여러 번 도는 것이 아니라 위험을 중심으로 다음 활동을 정하는 점이 핵심이다.
선지별 해설
- 위험을 줄이기 위해 시제품과 분석을 활용할 수 있다.
- 평가 결과를 다음 반복의 계획에 반영한다.
- 위험 분석은 한 번만 하고 끝내는 활동이 아니다.
- 반복 주기의 목표·대안·제약을 정하는 단계에 맞는다.
편집 해설 근거: Barry W. Boehm, A Spiral Model of Software Development and Enhancement (1988), 논문 보존 사본 — A Spiral Model — four quadrants; risk-driven approach
90. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 위험이 큰 핵심 기능을 작은 반복마다 시제품으로 구현하고 위험 분석 후 다음 반복 범위를 정한다. 개발 모델은?
- 빅뱅 모델
- V 모델
- 나선형 모델
- 폭포수 모델
정답과 해설 보기
정답: 3
정답은 ③이다. 나선형 모델은 위험을 분석하고 줄이는 활동을 중심으로 개발을 반복한다. 위험이 큰 기능을 시제품으로 시험한 뒤 결과를 바탕으로 다음 반복 범위를 정한다는 조건이 이에 해당한다. 시제품을 만든다는 사실만으로 항상 나선형인 것은 아니지만, 여기서는 위험 분석이 다음 단계의 결정을 이끈다고 명시했다. 폭포수 모델은 순차적인 단계 진행, V 모델은 개발과 시험의 대응을 강조하며, 빅뱅 방식은 이처럼 체계적인 반복 위험 관리가 핵심인 모델이 아니다.
선지별 해설
- 체계적인 위험 중심 반복을 설명하는 명칭이 아니다.
- 개발 산출물과 시험 수준의 대응에 초점을 둔다.
- 위험 평가와 시제품 결과에 따라 반복을 계획하는 나선형 모델이다.
- 단계별 순차 진행이 대표 특징이며 지문의 위험 중심 반복과 다르다.
편집 해설 근거: Barry W. Boehm, A Spiral Model of Software Development and Enhancement (1988), 논문 보존 사본 — Risk-driven model; prototyping to resolve risks
91. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 인증 요소와 사례의 연결로 적절하지 않은 것은?
[학습용 개정문항]
- 생체 특성 — 사용자의 타이핑 리듬
- 지식 요소 — 사용자가 기억한 PIN
- 소유 요소 — 사용자가 보유한 보안 토큰
- 생체 특성 — 사용자가 제시한 QR 코드 문자열
정답과 해설 보기
정답: 4
정답은 ④이다. 인증의 지식 요소는 PIN처럼 사용자가 아는 값, 소유 요소는 보안 토큰처럼 사용자가 가진 수단과 관련된다. 생체 특성은 지문 같은 신체 특성뿐 아니라 타이핑 리듬과 같은 행동 특성도 포함할 수 있다. QR 코드의 문자열 자체는 신체나 행동의 측정값이 아니므로 제시했다는 이유만으로 생체 요소가 되지 않는다. QR 코드가 운반하는 자격 증명의 의미는 구현에 따라 달라진다. 생체 특성 하나의 분류와 실제 다중 요소 인증 요건을 충족하는지는 별도로 판단한다.
선지별 해설
- 타이핑 리듬은 사람의 행동에 기반한 생체 특성의 예다.
- 기억한 PIN은 사용자가 아는 지식에 해당한다.
- 보유한 인증 토큰의 제어를 입증하는 소유 요소다.
- QR 문자열 자체를 생체 정보로 볼 근거가 없다.
편집 해설 근거: NIST SP 800-63B-4, Digital Identity Guidelines — Authentication (2025) — §3.2.3 Use of Biometrics; Glossary — biometric characteristics; Peter Reiher, OSTEP v1.10, 54 Authentication — Authentication factors
92. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 사용자 입력을 문자열 연결로 SQL WHERE 절에 붙인다. 가장 직접적인 개선은?
- 오류 메시지만 숨긴다
- 매개변수화된 질의를 사용한다
- DB 포트를 임의 번호로 바꾼다
- 화면 글꼴을 변경한다
정답과 해설 보기
정답: 2
정답은 ②이다. 사용자 입력을 SQL 문자열에 직접 연결하면 입력의 일부가 질의 구문으로 해석되어 원래 조건을 바꿀 수 있다. 매개변수화된 질의는 SQL 구조를 정하고 입력을 별도의 값으로 바인딩하여 이 경계를 유지한다. 따라서 가장 직접적인 개선은 올바른 준비된 문장과 바인딩을 사용하는 것이다. 오류 메시지 제한은 정보 노출을 줄이는 보조 조치이고 포트 변경은 SQL 구문의 안전성을 바꾸지 않는다. 화면 글꼴은 데이터베이스 질의 생성 방식과 관계가 없다.
선지별 해설
- 정보 노출은 줄일 수 있어도 문자열 연결 취약점 자체는 남는다.
- 입력을 SQL 코드와 분리해 값으로 전달하는 직접적인 개선이다.
- 접속 포트가 바뀌어도 취약한 질의 생성 코드는 그대로다.
- 화면 표현 변경은 SQL 해석과 관계가 없다.
편집 해설 근거: OWASP — SQL Injection Prevention — Defense Option 1: Prepared Statements (with Parameterized Queries)
93. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 두 대의 서버가 공유 디스크와 서비스 IP를 감시하다가 활성 서버에 장애가 나면 대기 서버가 자원 그룹을 인수해 서비스를 계속 제공한다. 이 목적에 가장 가까운 솔루션은?
- 단순 점대점 케이블
- 산업 제어 악성코드
- IP 경로 선택 알고리즘
- 고가용성 클러스터
정답과 해설 보기
정답: 4
정답은 ④이다. 고가용성 클러스터는 구성원과 서비스 자원을 감시하고 장애 시 다른 노드가 자원을 인수하도록 구성한다. 활성 서버가 멈췄을 때 대기 서버가 서비스 IP와 저장 자원 등을 이어받는 흐름이 지문에 해당한다. 단순 케이블 연결이나 라우팅 알고리즘만으로 응용 서비스의 자원 인수가 이루어지는 것은 아니다. 실제 구성에서는 공유 저장소 장애, 데이터 일관성과 두 노드가 동시에 활성화되는 상황도 고려해야 한다. 클러스터라는 이름만으로 모든 장애에서 무중단을 보장하지는 않는다.
선지별 해설
- 통신 연결만으로 서비스 감시와 자원 인수 기능을 제공하지 않는다.
- 서비스 가용성을 높이는 솔루션이 아니라 해로운 프로그램 유형이다.
- 경로 선택만으로 응용 자원 그룹의 장애 조치를 수행하지 않는다.
- 장애 시 대기 노드가 서비스를 인수하는 고가용성 클러스터다.
편집 해설 근거: IBM Cloud Docs, Getting started with PowerHA Automation (2026-10-05 확인) — PowerHA concepts — resource groups and failover
94. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 게시판이 사용자 입력을 HTML 본문에 다시 표시한다. 스크립트 실행을 막는 가장 직접적인 출력 단계 방어는?
- 브라우저 캐시만 비활성화
- HTML 문맥에 맞는 출력 인코딩
- 입력 길이를 무조건 1자로 제한
- DB 포트 번호 변경
정답과 해설 보기
정답: 2
정답은 ②이다. 사용자 입력을 HTML 본문의 텍스트로 보여 줄 때에는 HTML 문맥에 맞게 출력 인코딩해야 한다. 꺾쇠 괄호와 같은 문자가 태그나 스크립트 구문으로 해석되지 않고 데이터로 표시되도록 하는 방어이다. 속성, URL과 JavaScript 문맥은 필요한 처리 방식이 다르므로 HTML 본문용 처리를 무조건 재사용해서는 안 된다. 의도적으로 HTML을 허용하는 편집기는 별도의 안전한 정화가 필요할 수 있다. 캐시나 데이터베이스 포트 변경은 출력이 실행 코드가 되는 문제를 해결하지 않는다.
선지별 해설
- 캐시 설정만 바꾸어도 위험한 출력 문법은 그대로 해석될 수 있다.
- HTML 본문에 넣는 데이터를 해당 문맥의 텍스트로 인코딩한다.
- 정상 입력을 제한하고도 올바른 문맥별 방어를 대신하지 못한다.
- DB 접속 포트는 브라우저의 HTML 해석을 바꾸지 않는다.
편집 해설 근거: OWASP, Cross Site Scripting Prevention Cheat Sheet — Output Encoding for HTML Contexts; Other Controls
95. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 상담원에게 고객 조회 권한만 주고 삭제 권한은 관리자 역할에만 둔다. 적용한 원칙과 모델의 조합은?
- 최소 권한과 RBAC
- 전면 공개와 DAC 해제
- 가용성 우선과 익명 접근
- 부인방지와 해시 충돌
정답과 해설 보기
정답: 1
정답은 ①이다. 최소 권한 원칙은 사용자가 업무 수행에 필요한 범위의 권한만 갖도록 한다. 고객을 조회하는 상담원에게 삭제 권한까지 주지 않는 것이 그 사례이다. RBAC는 사용자에게 역할을 부여하고 역할에 허용할 작업을 연결하므로 상담원 역할과 관리자 역할에 서로 다른 권한을 설정하는 구조에 맞는다. 실제로 관리자의 삭제가 필요한지도 업무와 정책에 따라 정해야 한다. 지문은 익명 접근이나 부인방지, 해시 충돌을 제어하는 상황이 아니다.
선지별 해설
- 필요한 조회만 허용하는 최소 권한과 역할별 허용 작업을 정하는 RBAC다.
- 권한을 전면 공개하거나 접근 통제를 해제한 조건이 아니다.
- 익명 접근을 허용하거나 가용성만 우선하는 사례가 아니다.
- 전자서명이나 해시 충돌이 아니라 권한 배정의 문제다.
편집 해설 근거: NIST SP 800-53 Rev.5, Security and Privacy Controls (2020, 2020-12-10 정오표 포함본) — AC-6 Least Privilege; Peter Reiher, OSTEP v1.10, 55 Access Control — Role-Based Access Control
96. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 동일 OS 커널을 공유하면서 애플리케이션별 사용자 공간과 파일시스템을 격리해 빠르게 배포한다. 기술은?
- 컨테이너
- 전가상화 가상머신만 해당
- RAID 미러링
- DNS 라운드로빈
정답과 해설 보기
정답: 1
정답은 ①이다. 컨테이너는 애플리케이션 프로세스와 필요한 실행 환경을 격리하면서 같은 호스트 커널을 공유하는 방식으로 실행할 수 있다. 각 컨테이너에 독립적인 사용자 공간과 파일시스템 관점을 제공한다는 조건이 이에 맞는다. 일반적인 가상머신은 게스트 운영체제와 커널을 별도로 실행한다. 컨테이너를 가상머신 위에 운영하는 구성도 가능하므로 두 기술은 함께 쓰일 수 있다. 격리는 런타임과 권한 설정에 의존하며 커널 공유가 모든 보안 경계를 자동 보장하는 것은 아니다.
선지별 해설
- 호스트 커널을 공유하는 격리된 실행 환경이라는 설명에 맞는다.
- 일반적인 가상머신은 게스트 커널을 별도로 실행하므로 이 조건을 독점하지 않는다.
- 디스크에 같은 데이터를 복제하는 저장 기술이다.
- DNS 응답을 분산하는 방식이며 프로세스 격리 기술이 아니다.
편집 해설 근거: Docker Docs, What is a container? — Containers versus virtual machines
97. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 런타임·미들웨어·배포 플랫폼은 공급자에게 맡기고 애플리케이션 코드와 데이터만 관리한다. 클라우드 모델은?
- IaaS
- SaaS
- 온프레미스만 사용
- PaaS
정답과 해설 보기
정답: 4
정답은 ④이다. PaaS는 공급자가 제공하는 실행 플랫폼 위에 사용자가 자신의 응용 프로그램을 배포하는 서비스 모델이다. 공급자가 운영체제와 런타임 등 기반 환경을 관리하고 사용자가 응용 코드와 데이터를 관리한다는 조건이 이에 부합한다. IaaS는 가상 서버 같은 기반 자원을 제공하여 사용자의 운영체제 관리 범위가 더 넓다. SaaS는 공급자가 제공하는 응용을 사용하는 모델이다. 실제 제품별 설정 책임에는 차이가 있지만 지문에서 나눈 관리 경계는 PaaS의 기본 정의와 맞는다.
선지별 해설
- 사용자가 운영체제 등을 직접 관리하는 범위가 더 넓은 기반 자원 모델이다.
- 공급자의 응용 소프트웨어를 이용하는 모델이다.
- 클라우드 공급자 플랫폼을 사용하는 조건과 다르다.
- 공급자의 실행 플랫폼에 자신의 응용을 배포·관리하는 PaaS다.
편집 해설 근거: NIST SP 800-145, The NIST Definition of Cloud Computing (2011) — Service Models — Platform as a Service; Infrastructure as a Service; Software as a Service
98. 같은 크기의 4TB 디스크 5개로 RAID 5를 구성한다. 파일시스템·메타데이터 오버헤드와 TB/TiB 표기 차이를 제외한 이론적 데이터 저장 용량은?
[학습용 개정문항]
- 20TB
- 8TB
- 4TB
- 16TB
정답과 해설 보기
정답: 4
정답은 ④이다. RAID 5는 데이터와 패리티를 여러 디스크에 분산 저장하고, 같은 크기 디스크 N개의 용량 중 한 개 분량을 패리티에 사용한다. 따라서 5개의 4TB 디스크에서는 (5−1)×4=16TB가 이론적 데이터 용량이다. 패리티가 전용 디스크 한 개에만 몰려 있다는 뜻은 아니며 전체 디스크에 분산된다. 파일시스템과 메타데이터, 단위 표기 등의 영향은 실제 표시 용량을 달라지게 할 수 있지만 이 문항에서는 제외한다. RAID는 별도의 백업을 대신하지 않는다.
선지별 해설
- 패리티 용량을 제외하지 않은 물리 용량의 합이다.
- RAID 5의 (N−1)×용량 공식과 맞지 않는다.
- 한 디스크의 용량일 뿐 다섯 디스크의 데이터 용량이 아니다.
- 4개 디스크 분량인 16TB를 데이터에 사용할 수 있다.
편집 해설 근거: Synology DSM, Choose a RAID Type — RAID 5 — available capacity
99. MQTT 5.0 센서와 브로커 사이에서 중복 수신은 허용하되 적어도 한 번 전달하는 최소 QoS를 선택한다. 메시지는 만료되지 않으며 PUBACK 미확인 상태로 연결이 끊기면 Clean Start=0으로 기존 세션에 재접속하여 미확인 PUBLISH를 다시 보낸다. 해당 QoS는?
[학습용 개정문항]
- Retain 플래그만 사용
- QoS 1
- QoS 0
- QoS 2
정답과 해설 보기
정답: 2
정답은 ②이다. MQTT QoS 1은 적어도 한 번 전달하는 수준이며 PUBLISH에 대해 PUBACK으로 확인한다. 확인 응답을 받지 못한 메시지는 재전송 과정에서 수신자가 중복해서 볼 수 있다. MQTT 5.0에서는 Clean Start=0으로 재접속하고 기존 세션이 존재할 때 미확인 PUBLISH를 원래 Packet Identifier로 다시 보낸다. 연결이 유지되는 동안 임의의 타이머로 계속 재전송하는 규칙은 아니다. QoS 2는 중복 전달을 막는 추가 절차를 사용하므로 중복을 허용하는 이 요구의 최소 수준보다 높다.
선지별 해설
- Retain은 이후 구독자에게 마지막 메시지를 제공하는 기능이며 QoS 확인 절차를 대신하지 않는다.
- PUBACK을 사용하는 적어도 한 번 전달 수준으로 중복을 허용한다.
- 확인 응답과 재전송 절차가 없는 최대 한 번 전달 수준이다.
- 정확히 한 번 전달을 위한 추가 교환을 사용하여 요구하는 최소 수준보다 높다.
편집 해설 근거: OASIS, MQTT Version 5.0 Standard (2019) — §4.3.2 QoS 1: At least once delivery; §4.4 Message delivery retry
100. 정보시스템 구축·보안 검토에서 다음 항목을 판단한다. 클라우드 HSM을 이용해 전자서명 키를 운영하는 방식에 대한 기술로 틀린 설명을 고르면? 애플리케이션은 API로 서명 연산을 요청하고 개인키 원문은 애플리케이션 서버로 내보내지 않는다.
- 암호 키 생성과 민감한 연산을 보호된 암호 모듈 경계 안에서 수행할 수 있다.
- 애플리케이션은 키 원문을 직접 보관하지 않고 HSM에 연산을 요청할 수 있다.
- 사용자 역할·인증·감사 기록 등 운영 통제는 클라우드 환경에서도 필요하다.
- 일반 객체 스토리지에 개인키를 평문으로 저장해도 소프트웨어 암호 라이브러리만 사용하면 HSM과 같은 보호 경계가 된다.
정답과 해설 보기
정답: 4
정답은 ④이다. HSM은 암호 키와 암호 연산을 보호하는 하드웨어 보안 모듈이다. 지문에서는 개인키를 모듈 밖으로 내보내지 않고 응용이 API를 통해 서명을 요청하므로 응용 서버에 키 원문을 두는 방식과 보호 경계가 다르다. 일반 객체 스토리지에 평문 키를 저장하고 소프트웨어 라이브러리를 사용한다고 해서 HSM의 하드웨어 경계가 생기지는 않는다. 클라우드에서도 사용자 인증과 권한, 감사 기록 등의 통제가 필요하며, 키 반출 가능 여부는 제품과 키 정책에 맞게 설정해야 한다.
선지별 해설
- 보호된 모듈 내부에서 키 생성과 암호 연산을 수행할 수 있다.
- API로 연산을 요청하여 응용 서버가 키 원문을 보관하지 않게 구성할 수 있다.
- 클라우드 사용 여부와 무관하게 접근 권한과 운영 기록을 관리해야 한다.
- 평문 키 파일과 소프트웨어만으로 HSM의 보호 경계를 대신할 수 없다.
편집 해설 근거: AWS CloudHSM User Guide, What is AWS CloudHSM? — Introduction; Full control of your keys; user management; NIST CSRC Glossary, Cryptographic module — Cryptographic module — SP 800-175B Rev.1; SP 800-152
정보처리기사 필기 기출문제 학습 방법
먼저 PDF 문제지를 시간에 맞춰 푼 뒤, 이 글에서 오답의 정답·해설·근거를 확인하세요. 법규 문항은 근거 기준일 이후 개정 여부도 함께 확인하는 것이 안전합니다.