본문 바로가기

자격증 공부/정보처리기사 실기

[흥달쌤] 기출해설특강) 통신 프로토콜, 프로세스 스케줄링, 트랜잭션, OSI 참조 모델, 암호화 알고리즘

[2020년 1회 영상]

 

10. 통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는

      양식과 규칙의 체계이다. 통신 프로토콜의 기본 요소 3가지를 쓰시오.

 

→ 구문(Syntax), 의미(Semantic), 타이밍(Timing)

 

 

★★★

※ 통신 프로토콜의 기본 요소 3가지

     1. 구문(Syntax)

         - 데이터의 구조나 형태와 포맷을 정의

     2. 의미(Semantic)

         - 어떤 데이터를 보낼 것인지, 얼마나 빨리 보낼 것인지를 결정

     3. 타이밍(Timing)

         - 데이터의 각 부분이 무엇을 뜻하는지 알 수 있게 미리 정해둔 규칙


 

11. HRN(Highest Response-ratio Next) 우선순위를 결정하는 계산식을 쓰시오.

 

→ (대기시간 + 서비스시간) / 서비스시간

 

 

★★★

※ 프로세스 스케줄링

     • 비선점 스케줄링

        - 실행 중인 프로세스를 강제로 중단하지 않고, 작업이 끝나야 다음으로 넘어감(구현 단순/응답 시간 느림)

종류 설명
FCFS
(First Come First Service)
도착 순서대로 실행
- 단점 : 긴 작업이 먼저 오면 뒤가 밀림 (Convoy effect)
SJF
(Shortest Job First)
실행 시간이 가장 짧은 작업 먼저
- 단점 : 긴 작업은 계속 밀릴 수 있음 (기아 현상)
HRN
(Highest Response Ratio Next)
(대기시간 + 실행시간) / 실행시간 값이 큰 것 먼저
- 장점 : 기아 현상 완화
기한부 스케줄링
(Deadline)
정해진 기한(Deadline) 기준으로 우선 처리
우선순위 스케줄링 우선순위 높은 프로세스 먼저 실행
- 단점 : 낮은 우선순위는 기아 발생 가능

 

     • 선점 스케줄링

        - 실행 중인 프로세스를 강제로 중단하고 다른 작업 실행 가능(응답성 좋음, 문맥 교환 비용 발생)

종류 설명
SRT
(Shortest Remaining Time)
SJF의 선점형 → 남은 시간이 가장 적은 작업 선택
RR
(Round Robin)
일정 시간(Time Slice)마다 CPU를 순환 할당(공정성 높음)
MLQ
(Multi-Level Queue)
프로세스를 여러 큐로 나누고 큐마다 다른 스케줄링 적용(큐 간 이동 없음)
MFQ
(Multi-Level Feedback Queue)
프로세스가 큐 사이를 이동하며 우선순위 조정(동적 우선순위/기아 문제 완화)

 


 

★★★★★

12. 다음은 트랜잭션(Transaction)의 주요 특성 4가지이다. 빈칸 ① ~ ②에 알맞은 용어를 쓰시오.

(  ①  ) 트랜잭션의 가장 기본적인 특성으로 트랜잭션 내의 연산은 반드시 모두 수행되어야 하며 그렇지 못한 경우 모두 수행되지 않아야 함(커밋, 롤백과 연관 有)
일관성 트랜잭션이 정상적으로 완료된 후 언제나 일관성 있는 데이터베이스 상태가 되어야 하며, 결과에 모순이 생겨서는 안됨
(  ②  ) 하나의 트랜잭션이 수행 중에는 다른 트랜잭션이 접근할 수 없고 각각의 트랜잭션은 독립적이어야 함
영속성 지속성이라고도 하며, 트랜잭션이 성공적으로 완료된 후 결과는 지속적으로 유지되어야 함

 

→ ① 원자성, ② 독립성 == 격리성


 

13. OSI 7 참조 모델 중 다음이 설명하는 계층을 쓰시오.

• 전기적, 기계적, 기능적인 특성을 이용해서 통신 케이블로 데이터를 전송
• 통신 단위는 비트이며 이것은 1과 0으로 나타내어지는, 즉 전기적으로 On, Off 상태이다.
• 테이터를 전달할 뿐, 데이터가 무엇인지 어떤 에러가 있는지 신경쓰지 않는다.

 

→ 물리계층

 

 

★★★★★

※ OCI 7 참조 모델

 


 

14. 릴리즈 노트 작성 항목 중 문서 이름(릴리스 노트 이름), 제품 이름, 버전 번호, 릴리즈 날짜,

      참고 날짜, 노트 버전 등을 기술하는 작성 항목은 무엇인지 쓰시오.

 

→ 헤더 / Header

 

 

※ 릴리즈 노트 작성 항목

항목
머리말(Header) 릴리즈 식별 정보(버전, 날짜, 제품명)
개요 이번 릴리즈의 전체적인 변경 사항 요약
목적 이번 업데이트를 진행한 이유
이슈(문제) 요약 해결한 주요 문제 또는 개선 포인트
재현 항목 문제 발생 조건 및 재현 방법
수정/개선 내용 실제로 수정되거나 개선된 사항
사용자 영향도 사용자에게 미치는 영향(기능 변화, UI 등)
지원 영향도 운영/고객지원에 미치는 영향
노트 참고사항, 추가 안내 (주의사항 등)
면책조항 책임 제한 및 변경 가능성 안내
연락처 정보 문의 및 지원을 위한 연락 채널

 


 

15. 데이터 마이닝(Data mining)의 개념을 간략히 서술하시오.

 

→ 대규모로 저장된 데이터 안에서 체계적이고 자동적으로 통계적 규칙이나 패턴을 찾아내는 것

→ 수많은 데이터에서 가치있는 유용한 정보를 찾아내는 것


 

16. 1990년 R, Rivert가 MD4를 일방향 해시 함수로 개선한 알고리즘으로, 임의의 길이의 값을

      입력받아서 128비트 길이의 해시값을 출력하는 알고리즘은 무엇인지 쓰시오.

 

→ MD5

 

★★★

※ 암호화 알고리즘

     • 대칭키 암호(Symmetric Key)

        - 암호화와 복호화에 같은 키 사용

           ‣ 속도 빠름

           ‣ 키 관리 어려움

           ‣ 대표 알고리즘 : AES, DES, ARIA, SEED, IDEA

     • 비대칭키 암호(Public Key)

        - 공개키(암호화) + 개인키(복호화)를 사용

           ‣ 보안성 높음

           ‣ 속도 느림

           ‣ 대표 알고리즘 : RSA, EIGama

     • 해시 함수(Hash)

        - 데이터를 고정 길이 값으로 변환 (복호화 불가)

           ‣ 단방향 함수

           ‣ 무결성 검증에 사용

           ‣ 대표 알고리즘 : SHA, SHA-256, MD5(취약)


 

17. LOC 기법에 의하여 예측된 총 라인 수가 30,000라인일 경우 개발에 투입될

      프로그래머의 수가 5명이고, 프로그래머들 평균 생산성이 월당 300라인일 때,

      개발에 소요되는 기간을 구하는 계산식과 기간(개월)을 구하여 쓰시오.

 

→ 30000 / 300 / 5 = 20


 

18. 다음은 C언어로 작성된 프로그램이다. 이를 실행한 결과를 쓰시오.

int a[] = { 95, 75, 85, 100, 50 };
int i, j, temp;
int n = sizeof(a) / sizeof(int); //
int n = 5;

for(i = 0; i < n - 1; i++) {
    for(j = 0; j < 4 - i; j++) {
        if(a[j] > a[j + 1]) {
            temp = a[j];
            a[j] = a[j + 1];
            a[j + 1] = temp;
        }
    }
}

for(i = 0; i < 5; i++) {
    printf("%d ", a[i]);
}
// 해설.

int a[] = { 95, 75, 85, 100, 50 };
int i, j, temp;
int n = sizeof(a) / sizeof(int);   // 배열 길이 계산 (5)
int n = 5;

for(i = 0; i < n - 1; i++) {       // 총 4번 반복 (버블 정렬 외부 루프)
    for(j = 0; j < 4 - i; j++) {   // 매 회전마다 비교 범위 감소
        if(a[j] > a[j + 1]) {      // 앞이 크면 자리 교환 (오름차순 정렬)
            temp = a[j];
            a[j] = a[j + 1];
            a[j + 1] = temp;
        }
    }
    // 1회전 후: 가장 큰 값이 뒤로 이동
    // i=0 → [75, 85, 95, 50, 100]
    // i=1 → [75, 85, 50, 95, 100]
    // i=2 → [75, 50, 85, 95, 100]
    // i=3 → [50, 75, 85, 95, 100]
}

for(i = 0; i < 5; i++) {
    printf("%d ", a[i]);   // 최종 출력: 50 75 85 95 100
}

 

→ 50 75 85 95 100(버블정렬 알고리즘)


 

19. 다음은 JAVA로 작성된 프로그램이다. 이를 실행할 결과를 쓰시오.

public static int[] makeArray(int n) {
    int[] t = new int[n];
    for(int i = 0; i < n; i++) {
        t[i] = i;
    }
    return t;
}

public static void main(String[] args) {
    int[] a = makeArray(4);
    for(int i = 0; i < a.length; i++) {
        System.out.print(a[i] + " ");
    }
}
// 해설.

public static int[] makeArray(int n) {
    int[] t = new int[n]; // 길이 n짜리 배열 생성
    for(int i = 0; i < n; i++) {
        t[i] = i; // 인덱스 값을 그대로 저장 → [0,1,2,...]
    }
    return t; // 완성된 배열 반환
}

public static void main(String[] args) {
    int[] a = makeArray(4); 
    // makeArray(4) 실행 과정:
    // t = [0,1,2,3] 생성 후 반환 → a = [0,1,2,3]

    for(int i = 0; i < a.length; i++) {
        System.out.print(a[i] + " "); 
        // 순서대로 출력 → 0 1 2 3
    }
}

 

→ 0 1 2 3


 

20. 다음은 JAVA로 작성된 프로그램이다. 이를 실행한 결과를 쓰시오.

int i = 3, c = 1;
switch(i) {
    case 1: c++ ;
    case 2: c += 3;
    case 3: c = 0;
    case 4: c += 3;
    case 5: c -= 10;
    default: c-- ;
}
System.out.print(c);
// 해설.

int i = 3, c = 1;

switch(i) {
    case 1: c++;        // (실행 안됨)
    case 2: c += 3;     // (실행 안됨)
    case 3: c = 0;      // i=3이므로 여기부터 실행 시작 → c = 0
    case 4: c += 3;     // break 없으므로 계속 실행 → c = 3
    case 5: c -= 10;    // 계속 실행 → c = -7
    default: c--;       // 계속 실행 → c = -8
}

System.out.print(c);    // 최종 출력: -8

 

→ -8

 

* 만약 구문 도중, break가 나오면 거기까지의 값을 입력한다.