정보처리기사

[정보처리기사 실기 기출] 2021년 2회

juble 2024. 10. 8. 16:51

01. 다음 설명에 해당하는 용어를 쓰시오.

  • 무선 기반의 이동단말기 간 연결망의 일종으로서, 라우터 장비가 따로 없고 이동단말기 중 일부가 라우터 역할을 담당하는 네트워크이다.
  • 동적으로 경로를 설정할 수 있어 '기반구조 없는 네트워크'라고도 한다. 험난한 지형이나 위험한 장소에서의 네트워크 구성을 하는 데 유용하다. 이동단말기에 센서 기능을 부가할 경우 USN(Ubiquitous Sensor Network)으로 발전한다.
AD-hoc-Network(애드혹 네트워크)

 


02. 다음 ①, ②에 설명하는 알맞은 답안을 쓰시오.

  • ( ① ) : 사용자가 제품/서비스와 상호작용할 수 있도록 만들어진 매개체
  • ( ② ) : 사용자 경험의 약자로, 사용자가 어떠한 서비스/제품을 직간접적으로 이용하면서 느끼는 종합적인 만족
① UI(User Interface) , ② UX(User Experience)

 

* UI 설계 원칙

  • 직관성 : 화면의 버튼, 항목, 입력란 등 누구나 쉽게 이해하고 사용할 수 있어야 한다. 
  • 유효성 : 사용자의 목적을 정확히 달성할 수 있도록 유용하고 효과적이어야 한다. 
  • 학습성 : 사용자가 쉽게 배우고 익힐 수 있어야 한다. 
  • 유연성 : 사용자의 요구를 최대한 수용하면서 오류를 최소화해야 한다. 

 


03. 디자인 패턴 중 클래스나 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴으로, Chain of Responsibility, Command, Iterator, Observer 패턴 등이 있다.

행위 패턴

 

2024.09.23 - [기술 노트] - [Study] 디자인 패턴(Design Pattern)

 


04. 데이터베이스에서 트랜잭션의 특징인 ACID 중 원자성(Atomicity)의 개념에 대하여 간략히 설명하시오.

연산의 결과는 모두 반영되거나, 모두 반영되지 않아야 한다. (Commit, Rollback)

 

* 원자성(Atomicity)

  • 하나의 트랜잭션이 완료될 때, 처리가 완료되거나 그 이전의 상태여야 한다. 
  • 트랜잭션 연산은 완전하게 수행이 완료되지 않으면 전혀 수행되지 않아야 한다. 
  • 트랜잭션 연산 시 Commit, Rollback 을 이용하여 적용 또는 취소로 한꺼번에 완료되어야 하는 성질이다. 

 


05. 부분 함수적 종속성을 제거하여 완전 함수 종속을 만족하는 정규형이 무엇인지 쓰시오.

제 2정규형 (2NF)

 

* 정규화 과정

비정규 릴레이션

⬇️

원자값이 아닌 도메인을 분해 

1NF ⬇️       

부분 함수 종속 제거

2NF ⬇️       

이행 함수 종속 제거

3NF ⬇️       

결정자나 후보키가 아닌 함수 종속 제거

BCNF ⬇️          

다치 종속성 제거 

4NF ⬇️       

조인 종속

5NF ⬇️       

 


06. 평문의 길이와 동일한 스트림(Stream)을 생성하여 비트 단위로 암호화하며 DES를 대신하여 새로운 표준이 된, 블록 크기는 128bit이고 키 길이는 128/192/256bit인 SPN(Substitution-Permutation Network) 구조의 비밀키 암호화 기법을 의미하는 용어를 쓰시오.

AES(Advanced Encryption Standard, 고급 암호 표준)

 

* 스트림 방식의 비밀키 암호화 기법

DES
(Data Encryption
Standard)
- 1970년대 초 IBM이 개발한 알고리즘이다. 
- 16라운드 Feistel 구조를 가진다. 
- 평문을 64bit로 블록화를 하고, 실제 키의 길이는 56bit를 이용한다. 
- 전사 공격(Brute-Force Attack)에 취약하다. 
AES
(Advanced Encryption
Standard)
- DES를 대신하여 새로운 표준이 되었다. 
- 블록 크기는 128bit이고, 키 길이는 128/192/256bit이다. 
- SPN(Substitution_Permutation Network) 구조이다. 

* 블록암호 알고리즘

DES 64비트 블록,   56비트 키,  16라운드,  Feistel 구조
3-DES 2개의 키,  암호화,  복호화,  Feistel 구조
AES 128비트 블록, 80비트 키,  32라운드,  Feistel 변형구조
SKIPJACK 64비트 블록,   80비트 키,  32라운드,  Feistel 변형구조
IDEA 64비트 블록,  128비트 키,  8라운드,  Feistel+SPN구조(스위스)
SEED 128비트블록, 128비트 키, 16라운드, Feistel 구조(한국)
ARIA 128비트블록, 128/192/256비트 키, 12/14/16라운드, SPN 구조(한국)
LEA 128비트블록, 128/192/256비트 키, 24/28/32라운드, SPN 구조(한국, 경량)

* 스트림암호 알고리즘

  • LFSR : 선형 피드백 시프트 레지스터
  • RC4 : 인터넷 보안 프로토콜에서 널리 사용
  • A5 : GSM 통신에서 사용

* 공개키암호 알고리즘

  • 소인수 분해 : RSA, Rabin
  • 이산대수 : Diffie-Hellman, DSA, ELGamal
  • 타원곡선 : ECC 

* 단방향암호 알고리즘

  • MD5 : 빠른 계산 속도, 취약점 발견
  • SHA : NIST(미국 국립표준기술연구소)에 의해 개발된 해시 함수
  • HAS-160 : 한국에서 개발된 해시 함수, KCDSA(디지털서명)에 사용

 


07. 다음 <학생> 테이블에서 이름이 '이'씨로 시작하는 사람을 내림차순 정렬로 출력하는 SQL 문을 완성하시오.

학번 이름 학년 학과
181101 KKK 1 컴퓨터공학과
171201 HHH 2 전자공학과
171302 XXX 3 컴퓨터공학과
161107 YYY 3 건축공학과
151403 QQQ 4 전자공학과
 
SELECT *
FROM 학생
WHERE 이름 LIKE '이%' ORDER BY 이름 DESC;

 

* 문자열 부분 매치(LIKE절)와 정렬(오름차순, 내림차순)

  • 부분 매치 질의문은 조건문 작성 시 자료의 일부를 가지고 비교하여 검색하는 질의문이다. 
  • 부분 매치 질의문에서 '%'는 여러 문자를 대신하고, '_'는 한 자리를 대신한다. 
  • '%'나 '_'를 이용하여 조건문을 작성할 때는 '='를 대신하여 'LIKE'를 이용한다. 

 


08. 하나의 트랜잭션이 데이터를 액세스하는 동안 다른 트랜잭션이 그 데이터 항목을 액세스할 수 없도록 하는 병행 제어 기법이 무엇인지 쓰시오.

로킹(Locking)

 

* 병행제어 

  • 병행제어를 하지 않았을 때의 문제점
    • 갱신 분실
    • 비완료 의존성
    • 모순성
    • 연쇄 복귀 
  • 병행제어 기법
    • 로킹
    • 2단계 로킹
    • 타임스탬프
    • 낙관적 병행제어
    • 다중 버전 병행 제어 

* 회복 기법

  • 로그 기반 회복 기법
  • 검사점 회복 기법
  • 그림자 페이징 회복 기법
  • 미디어 회복 기법
  • ARIES 회복 기법(분석, REDO, UNDO) 

 


09. 다음 ①, ②, ③에 설명하는 알맞은 답안을 쓰시오.

  • ( ① ) : 모듈이 다수의 관련 기능을 가질 때 모듈 내부의 기능 요소들이 그 기능을 순차적으로 수행할 경우
  • ( ② ) : 동일한 입력과 출력을 사용하는 소작업들이 모인 경우
  • ( ③ ) : 모듈 내부의 모든 기능 요소들이 한 문제와 연관되어 수행되는 경우
① 절차적 응집도 , ② 통신적(교환적) 응집도 , ③ 기능적 응집도

 

* 응집도(Cohesion)

  • 모듈 안의 요소들이 서로 기능적으로 관련되어 있는 정도
  • 응집도가 강할수록 높은 품질의 모듈이다. 

* 응집도 유형

기능적
(Functional)
모듈 내부의 모든 기능 요소들이 한 문제와 연관되어 수행되는 경우  응집도 강함
순차적
(Sequential)
한 모듈 내부의 한 기능요소에 의한 출력 자료가 다음 기능 요소의 입력 자료로 제공되는 경우   
통신적
(Communication)
동일한 입력과 출력을 사용하는 소작업들이 모인경우    
절차적
(Procedural)
모듈이 다수의 관련 기능을 가질 때 모듈 내부의 기능 요소들이 그 기능을 순차적으로 수행할 경우   
시간적
(Temporal)
특정 시간에 처리되는 여러 기능을 모아 한 개의 모듈로 작성할 경우   
논리적
(Logical)
유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우   
우연적
(Coincidental)
모듈 내부의 각 기능 요소들이 서로 관련이 없는 요소로만 구성된 경우  응집도 약함

 


10. 학생 테이블에서 점수가 90점 이상인 학생의 과목평가를 'A'로 수정하는 SQL문을 완성하시오.

( ① ) 학생
( ② )
과목평가 = 'A'
WHERE 점수 >= 90
① UPDATE , ② SET

 

* UPDATE 명령문

  • SQL의 DML 명령어 중 UPDATE 명령문은 테이블의 자료(튜플) 중에서 값을 변경하고자 하는 경우에 사용되는 명령문이다. 
  • 형식 : UPDATE 테이블명 SET 변경속성명 = 변경값 WHERE 조건식; 

 


11. 다음 패킷 교환방식에 대한 설명으로 ①, ②에 알맞은 용어를 쓰시오.

  • ( ① ) : 패킷을 전송하기 전에 논리적인 연결을 먼저 수행하여 패킷을 주고 받는다.
  • ( ② ) : 각 전송 패킷을 미리 정해진 경로 없이 독립적으로 처리하여 교환하는 방식이다.
① 가상 회선 방식(Virtual Circuit) , ② 데이터그램 방식(Datagram)

 

* 패킷 교환 방식(Packet Switching)

  • 메시지를 일정한 길이의 전송 단위인 패킷으로 나누어 전송하는 방식이다. 
  • 다수의 사용자 간에 비대칭적 데이터 전송을 원할하게 하므로 모든 사용자 간에 빠른 응답 시간 제공이 가능하다. 
  • 전송에 실패한 패킷의 경우 재전송이 가능하다. 
  • 패킷 단위로 헤더를 추가하므로 패킷별 오버헤드가 발생한다. 
  • 현재 컴퓨터 네트워크에서 주로 사용하는 방식이며, 패킷교환공중데이터통신망(PSDN)이라고도 한다. 
  • 패킷 교환 방식은 축적 후 전달(Store-and-Forward) 방식이다. 
  • 메시지를 작은 데이터 조각인 패킷으로 블록화한다. 
  • 종류 : 가상 회선 방식, 데이터그램 방식 

 


12. 학생 정보와 학과 정보를 조인하여 결과값을 출력하는 SELECT문을 완성하시오.

SELECT * FROM 학생정보 T1 JOIN 학과정보 T2
( ① ) T1.학과 = T2.( ② )
① ON , ② 학과

* 동등 조인(Equi Join)에서의 JOIN~ON

  • 동등 조인은 조인 대상 테이블에서 공통 속성을 '='(equal) 비교를 통해 같은 값을 가지는 행을 연결한다. 
  • 임의의 조건을 지정하거나 조인할 컬럼을 지정하려면 ON절을 사용한다. 
  • 두 테이블을 JOIN 연산한 뒤 자료를 검색하는 형태의 질의문을 말한다. 
  • 형식 :  [테이블1] JOIN [테이블2] ON [조인조건]

 


 

13. 테스트 하네스 도구 구성요소 중 하향식 테스트 시 상위 모듈은 존재하나 하위 모듈이 없는 경우의 테스트를 위해 임시 제공되는 모듈로 골격만 있는 또는 특별한 목적의 소프트웨어 컴포넌트를 구현한 것을 의미하는 용어를 쓰시오. 

스텁(stup)

 

* 테스트 스텁 (Test Stub) 

  • 하향식 테스트 시 상위 모듈은 존재하나 하위 모듈이 없는 경우의 테스트를 위해 임시 제공되는 모듈이다.
  • 골격만 있는 또는 특별한 목적의 소프트웨어 컴포넌트를 구현한 것을 의미한다.
  • 스텁을 호출하거나 스텁에 의존적인 컴포넌트를 개발하거나 테스트할 때 사용한다.

 


14. 화이트박스 테스트에서 수행하는 구조적 커버리지의 설명으로 알맞은 것을 쓰시오.

  • ( ① ) : 시험 대상의 전체 구문 중에 테스트에 의해 실행된 구문을 측정한다.
  • ( ② ) : 시험 대상의 전체 분기 중 테스트에 의해 실행된 것을 측정한다.
  • ( ③ ) : 모든 조건식의 true, false 중 테스트에 의해 실행된 것을 측정한다.
① 구문 커버리지(문장 커버리지) , ② 결정 커버리지(분기 커버리지) , ③ 조건 커버리지

 

* 코드 커버리지 

  • 구문 커버리지 : 구문에 대해 한 번 이상 수행
  • 조건 커버리지 : 개별 조건식에 대해 수행
  • 결정 커버리지 : 결정포인트 내의 모든 분기문에 대해 수행
  • 조건/결정 커버리지 : 결정 포인트 T/F, 개별 조건식 T/F
  • 변경 조건/결정 커버리지 : 모든 결정포인트 내의 개별 조건식은 적어도 한 번 T/F
  • 다중 조건 커버리지 : 가능한 조합을 100% 보장
 

 


 

15. 다음은 데이터 모델링에 대한 설명이다. 빈칸에 들어갈 가장 적합한 용어를 골라 쓰시오.

  • ( ① ) : 럼바우의 객체지향 분석 모델로 프로레스들의 자료 흐름을 중심으로 처리 과정을 자료 흐름도(DFD, Data Flow Diagram)로 만드는 과정이다.
  • ( ② ) : 럼바우의 객체지향 분석 모델로 시간의 흐름에 따라 객체들 간의 제어 흐름, 동작 순서 등의 동적인 행위를 상태 변화도(STD, State Diagram)로 만드는 과정이다.
  • ( ③ ) : 개념적 모델링(Conceptual Modeling)이라고도 하며 개체와 개체들 간의 관계에서 ERD를 만드는 과정이다.
① 기능 모델링 (Functional Modeling) , ② 동적 모델링 (Dynamic) , ③ 정보 모델링 (Information)

 

*  객체지향 분석 방법론 

  • Rumbaugh(럼바우) 방법
    • 객체 모델링 : 객체 다이어그램
    • 동적 모델링 : 상태 다이어그램
    • 기능 모델링 : DFD
  • Booch(부치) 방법 : 미시적 및 거시적 개발 프로세스
  • Jacobson 방법 : Use case를 중심으로 한 분석 방법
  • Coad와 Yourdon 방법 : E-R 다이어그램을 사용
  • Wirfs-Brcock 방법 : 분석과 설계의 구분 없음 

* 정보 모델링 

  • 정보모델링(Information Modeling)은 시스템에 필요한 엔티티(객체)들을 정의하고 이들 엔티티 사이의 연관성을 규명하는 작업이다.
  • 이 모델은 시스템의 기능이나 동작에 초점을 맞추기 보다는 시스템을 구성하고 있는 객체를 중심으로 객체의 특성을 정의한다.
  • 정보 모델링은 객체 모델링(Object Modeling), 개념적 데이터 모델링(Conceptual Data Modeling), 의미 데이터 모델링(Semantic Data Modeling)으로도 불린다.

[출처] 8장 정보모델링(Information Modeling)|작성자 EJ

 


16. 클래스를 생성하지 않고 사용할 수 있는 메소드를 선언할 때 사용하는 명령어이다. 아래 JAVA 소스코드에 들어갈 명령어가 무엇인지 쓰시오.

public class CAlssA{
  public static void main(String args[]){
    System.out.println(check(1));
  }
  (    ) String check(int num) {
    return num;
  }
}
 
static

 

* Java의 static 메소드의 기본 형태 

static 반환형 메소드명(매개변수) {
	실행 코드;
	return 반환값;
}
  • 정적 필드처럼 static을 반환형 앞부분에 붙여 선언한 메소드를 정적 메소드(static 메소드)라고 한다. 
  • 정적 메소드는 객체를 생성하지 않고도 호출 가능하다. 
  • main() 메소드에서 check() 메소드는 Test.check()와 같이 클래스를 통해 호출할 수 있다. 
  • 보기의 private, protected, public은 자바의 접근 제어자(Access Modifier)이다. 

 


17. 다음 JAVA 프로그램의 실행결과를 쓰시오.

public class Class01 { 
  public static void main(String[] args){
    Class01 c1 = new Class01();
    Class02 c2 = new Class02();
    System.out.println(c1.sun(3, 2) + c2.sun(3, 2));
  }
  int sun(int x, int y){
    return x+y;
  }
}
class Class02 extends Class01 {
  int sun(int x, int y) {
    return x - y + super.sun(x, y);
  }
}
 
11

 

  • 해당 프로그램은 클래스 상속 시 부모 객체와 자식 객체 간 오버라이드된 메소드를 호출하여 반환값을 덧셈한 결과를 출력하는 Java 프로그램이다. 
  • a1.sun(3, 2)의 메소드 호출은 부모 객체 sun메소드를 호출하여 3+2의 결과를 반환하여 결과값은 5이다. 
  • a2.sun(3, 2)의 메소드 호출은 자식 객체 sun메소드를 호출하여 3-2+super.sun(3, 2)가 실행되어, 부모의 sun메소드를 호출하여 얻는 결과값 5를 반환하여 3-2+5를 수행한다. 결과값은 6이다. 
  • 최종 출력 결과는 5+6인 11이다. 

 

 


18. 다음 C 프로그램의 실행결과를 쓰시오.

int main(){
  int array[3];
  int s = 0;
  *(array + 0) = 1;			// arr[0] = 1;
  array[1] = *(array + 0) + 2;		// arr[1] = 1 + 2 = 3;
  array[2] = *array + 3;		// arr[2] = 1 + 3 = 4;
  for(int i=0; i<3; i++){
    s = s + array[i];
  }
  printf("%d", s);
}
 

 

  • 1차원 배열에서 배열의 이름은 배열의 첫 요소(0번지 요소)의 주소를 의미한다. 
  • 3개의 정수값을 지정하는 배열 arr에 포인터 연산자(*)를 통해 배열의 요소에 접근하며 배열의 요소 값을 할당한다. 
i 0 1 2
array[i] 1 3 4
  • for 반복 구조를 통해 1 + 3 + 4 = 8이 된다. 
 

19. 다음 파이썬 프로그램의 실행결과를 쓰시오.

a = 100
result = 0
for i in range(1, 3):
  result = a >> i
  result = result + 1
print(result)
 
26

 

  • for 명령문에 range() 함수를 결합하여 2회 반복 구조 내의 명령을 실행하도록 한다. 
  • range() 함수는 두 인수를 통해 반복의 횟수를 지정한다. 
  • range(1, 3)의 경우 1 이상부터 3 미만까지의 정수 리스트 객체를 생성하여 [1, 2]의 결과를 얻는다.
  • 100의 2진수 표현은 1100100 이다.
    • 100 >> 1 은 오른쪽 한개를 없애라는 것으로, 110010 이다.
      • 이를 다시 10진수로 바꾸면, 50이다. 즉, result = 50
      • result = result + 1 = 51
    • 100 >> 2 는 오른쪽 2개를 없애라는 것으로, 11001 이다.
    • 이를 다시 10진수로 바꾸면, 25이다. 즉, result = 25
    • result = result + 1 = 26
  • for 반복 구조를 통해 실행되는 동안의 디버깅은 다음과 같다. 
i a >> i result result + 1
1

2
100 >> 1

100 >> 2
50

25
50

25
51

26
최종 출력 print(result) 26

 


20. 다음 C 프로그램의 실행결과를 쓰시오.

int fp(int base, int exp) {
  int result = 1;
  for(int i=0; i<exp; i++){
    result = result*base;
  } 
  return res;
}
int main(){
  int result;
  result = fp(2, 10);
  printf("%d", result);
  return 0;
}
 
1024

 

  • 거듭제곱을 구하는 C프로그램이다. 
  • 주어진 두 변수 중 변수 base를 변수 exp 횟수만큼 곱하는 연산을 mp() 함수를 통해 구현하였다. 변수 base를 밑수로 변수 exp를 지수로 거듭제곱한 결과 baseexp가 출력 결과가 된다. 
  • result = 1*2*2*2*2*2*2*2*2*2*2 = 2^10 = 1024
  • main() 함수에서 mp(2, 10)를 통해 함수가 호출된다. mp() 함수로 Call by Value의 매개변수 전달 기법으로 각 가인수 base로 2, exp로 10이 전달된다. 
  • mp() 함수에서의 for 반복 구조를 통해 실행된다. 
  • mp() 함수는 10회 반복하여 1로 초기화된 변수 res에 2를 10회 곱하여 1024를 main() 함수에 최종 반환하게 된다. 

 


해설은 유투브 흥달쌤 강의와, 이기적 실기 기본서를 참고하였습니다 :)

https://youtu.be/_shX4WLAZzE?si=D3RaBubjc4ROKPjk

 

https://youtu.be/uBhc-GUvbXs?si=s--taUB45ls1jeEM

728x90
반응형