[문항 01] 소프트웨어 설계 / 데이터베이스
문제: 다음 중 데이터베이스 설계 단계 중 논리적 설계(Logical Design) 단계에서 수행하는 작업으로 가장 올바른 것은?
① 특정 DBMS의 특성을 고려하여 데이터베이스의 물리적 구조(저장 장치, 인덱스 등)를 정의한다.
② 개체-관계 모델(E-R 모델)을 이용하여 요구사항을 개념적 구조로 표현한다.
③ 개념적 설계를 바탕으로 목표 DBMS에 맞는 대량의 테이블 구조를 정의하고 정규화를 수행한다.
④ 사용자 요구사항을 수집하고 분석하여 요구사항 명세서를 작성한다.
- 정답: ③
- 핵심 개념 및 전체 보기 분석:
- ① 물리적 설계(Physical Design): 특정 DBMS의 물리적 특성(저장 구조, 인덱스, 파일 조직, 트랜잭션 주행 등)을 정의하는 단계입니다.
- ② 개념적 설계(Conceptual Design): 요구사항을 바탕으로 E-R 다이어그램과 같은 개념적 구조를 작성하는 단계입니다. DBMS 종속적이지 않습니다.
- ③ 논리적 설계(Logical Design): 개념적 구조를 목표 DBMS의 데이터 모델(관계형 모델 등)로 변환하여 테이블 스키마 정의, 정규화, 트랜잭션 인터페이스 설계 등을 수행합니다.
- ④ 요구사항 분석(Requirement Analysis): 데이터베이스 구축 전 사용자의 요구사항을 수집, 분석하여 요구사항 명세서를 작성하는 준비 단계입니다.
[문항 02] 소프트웨어 개발 / 소프트웨어 공학
문제: 다음 설명이 나타내는 디자인 패턴(Design Pattern)으로 가장 올바른 것은?
"객체의 생성 과정을 인스턴스화 로직과 분리하여, 복잡한 객체를 단계별로 생성할 수 있도록 하는 생성 패턴이다. 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 해준다."
① Singleton 패턴
② Factory Method 패턴
③ Builder 패턴
④ Adapter 패턴
- 정답: ③
- 핵심 개념 및 전체 보기 분석:
- ① Singleton 패턴: 생성 패턴 중 하나로, 객체의 인스턴스가 오직 1개만 생성되도록 보장하는 패턴입니다.
- ② Factory Method 패턴: 생성 패턴 중 하나로, 객체 생성 처리를 서브 클래스로 미루어 캡슐화하는 패턴입니다.
- ③ Builder 패턴: 복잡한 객체의 생성 과정과 표현 과정을 분리하여, 동일한 생성 절차에서 서로 다른 표현(객체 형태)을 생성할 수 있게 해주는 생성 패턴입니다.
- ④ Adapter 패턴: 구조 패턴 중 하나로, 호환성이 맞지 않는 클래스들의 인터페이스를 규격에 맞게 변환해 주는 패턴입니다.
[문항 03] 프로그래밍 언어 활용 (C언어 - 포인터)
문제: 다음 C언어 프로그램의 실행 결과로 올바른 값을 작성하시오.
#include <stdio.h>
int main() {
int arr[5] = {10, 20, 30, 40, 50};
int *p = arr;
p += 2;
printf("%d", *p + *(p - 1));
return 0;
}
- 정답: 50
- 코드 상세 분석:
- int arr[5] = {10, 20, 30, 40, 50};
- 배열 요소: arr[0]=10, arr[1]=20, arr[2]=30, arr[3]=40, arr[4]=50
- int *p = arr;
- 포인터 p는 배열의 첫 번째 요소인 arr[0](값 10)의 주소를 가리킵니다.
- p += 2;
- 포인터 연산으로 2칸 이동하여 p는 arr[2](값 30)의 주소를 가리킵니다.
- printf("%d", *p + *(p - 1));
- *p: 현재 p가 가리키는 arr[2]의 값인 30
- *(p - 1): p에서 1칸 이전 주소인 arr[1]의 값인 20
- 따라서 30 + 20 = 50이 출력됩니다.
- int arr[5] = {10, 20, 30, 40, 50};
[문항 04] 프로그래밍 언어 활용 (Java - 객체지향/상속)
문제: 다음 Java 프로그램의 실행 결과로 올바른 출력 값을 작성하시오.
class Parent {
int x = 10;
void show() {
System.out.print("Parent ");
}
}
class Child extends Parent {
int x = 20;
void show() {
System.out.print("Child ");
}
}
public class Main {
public static void main(String[] args) {
Parent p = new Child();
p.show();
System.out.print(p.x);
}
}
- 정답: Child 10
- 코드 상세 분석:
- Parent p = new Child();
- 다형성(Polymorphism): 참조 변수 p의 선언 타입은 Parent이지만, 실제 인스턴스는 Child입니다.
- p.show();
- 메서드 오버라이딩: 메서드는 실제 인스턴스인 Child의 오버라이딩된 show()가 호출되므로 Child 가 출력됩니다.
- System.out.print(p.x);
- 멤버 변수(필드)의 특징: Java에서 멤버 변수는 오버라이딩되지 않고 참조 변수의 타입(Parent)에 종속됩니다. p가 Parent 타입이므로 Parent 클래스의 x 값인 10이 출력됩니다.
- 최종 출력 결과: Child 10
- Parent p = new Child();
[문항 05] 신기술 / 보안 / 네트워크
문제: 다음이 설명하는 보안 공격 기법의 명칭을 영문 약어 또는 한글로 작성하시오.
"정상적인 네트워크 연결 요청(SYN)을 연속적으로 보낸 후, 서버의 ACK 응답에 대해 마지막 ACK를 보내지 않아 서버의 대기 큐(Queue)를 가득 채움으로써 정상적인 서비스 제공을 방해하는 DoS(서비스 거부) 공격 기법이다."
- 정답: SYN Flooding
- 개념 분석:
- SYN Flooding (SYN 플러딩): TCP 프로토콜의 3-Way Handshake 취약점을 이용한 DoS 공격입니다. 서버가 SYN+ACK로 응답 후 대기 상태(Half-Open)가 될 때 클라이언트가 마지막 ACK를 보내지 않고 자원을 계속 점유하여 서버를 마비시킵니다.
- DDoS와의 차이점: DDoS는 수많은 감염된 PC(봇넷)를 이용하는 '공격의 형태/규모'를 의미하며, SYN Flooding은 네트워크 계층에서 사용하는 세부적인 '공격 메커니즘'입니다.
'Certificate Study > 정보처리기사' 카테고리의 다른 글
| 정처기 Day3 (0) | 2026.08.31 |
|---|---|
| 정처기 Day2 (0) | 2026.08.26 |