※ 모든 문제는 시험 응시자의 기억으로 복원 된 문제임을 알립니다. 따라서 문제의 지문과 답이 상이한 경우가 발생 할 수 있습니다. (서술형의 경우 정확하게 맞지 않을 수 있습니다.)
※ 또한, 모든 문제의 기본 풀이는 수제비2023 책을 기반으로 작성하였습니다. 오타가 있을 경우, 답이 틀렸을 경우 댓글 부탁드립니다.
※ 수제비 카페 바로가기 - https://cafe.naver.com/soojebi
1. 다음은 C언어 코드의 문제이다. 보기의 조건에 맞도록 괄호 안에 알맞은 코드를 작성하시오
#include <stdio.h>
int main(void){
int n[5];
int i;
for(i = 0; i<5; i++){
printf("숫자를 입력해 주세요:");
scanf("%d", &n[i]);
}
for(i=0; i<5; i++){
printf("%d",( 1 ));
}
return 0;
}
- 입력값이 54321일경우 출력값이 43215로 출력되어야 한다.
- 보기 : 0 1 2 3 4 5 6 7 8 9 , i, n, + - * / % = ^ & | ! < > ( ) [ ]
- 보기를 활용하여 답을 만들어라.
- n[(i + 1) % 5]
- 이번 시험에서부터 등장하는 유형이다. 보기에서 숫자를 골라서 알맞게 풀어야한다.
- 입력값이 54321일경우 출력값이 43215로 출력되어야 한다
- 인덱스로 보면 01234가 12340으로 출력되는걸 볼 수 있다.
- 따라서 인덱스 i가 12340을 갖도록 만들어줘야 하는데 이때 보기를 신경쓰지 않고 만들면 무수한 답이 존재한다.
- 보기를 알맞게 끼워맞추는 과정이 상당히 까다로울 수 있으니 넉넉한 시간을 갖고 차근차근 풀어야 한다.
2. 다음은 JAVA 코드 문제이다. 가지고 있는 돈이 총 4620원일 경우 1000원, 500원, 100원, 10원의 지폐 및 동전을 이용하여 보기의 조건에 맞춰 최소한의 코드를 통해 괄호안을 작성하시오.
public class Problem{
public static void main(String[] args){
m = 4620;
a = ( );
b = ( );
c = ( );
d = ( );
System.out.println(a); //천원짜리 4장 출력
System.out.println(b); //오백원짜리 1개 출력
System.out.println(c); //백원짜리 1개 출력
System.out.println(d); //십원짜리 2개 출력
}
}
- 보기
- 변수 : m
연산자 : / , %
괄호 : [ , ] , ( , )
정수 : 1000, 500, 100, 10
- m / 1000
- (m%1000) / 500
- (m%500) / 100
- (m%100) / 10
- 보기에 변수와 연산자, 괄호를 갖고 최소한의 코드를 만들어야 하는 문제이다.
- 사실 위의 코드로 천원짜리, 오백원짜리, 백원짜리, 십원짜리를 출력하는건 나머지 연산으로도 충분히 가능하긴 하다.
- 하지만 가장 최소한의 출력을 물어보고 있으므로 여러 답을 적어낸 후 가장 짧은 답을 적어야 한다.
- 물론 시험 도중에 적어낸 리스트 중에 더 짧은게 있다고 생각할 수 있는 문제이다.
- 이러한 유형은 솔직히 억까스러운 면이 보이긴 한다...
3. 다음은 c언어의 코드이다. 보기의 조건에 맞추어 알맞은 출력값을 작성하시오.
#include<stdlio.h>
#include<stdlib.h>
char n[30];
char* test() {
printf(입력하세요 : );
gets(n);
return n;
}
int main()
{
char * test1;
char * test2;
char * test3;
test1 = test();
test2 = test();
test3 = test();
printf(%s\n,test1);
printf(%s\n,test2);
printf(%s,test3);
}
- 입력값은 홍길동, 김철수, 박영희 순서로 주어진다.
- 박영희
- 박영희
- 박영희
- main에서 test 1,2,3 포인터 변수를 생성하였다.
- 먼저, 전역변수로 n배열이 생성되었다.
- 그 후, 메인 함수에서 test함수를 불러오는데 test함수의 구조에 주목해야 한다.
- test함수에는 scanf()와 같은 기본적으로 볼 수 있는 c언어의 함수가 아닌 gets라는 함수를 쓰고 있다.
- gets함수는 파라미터에다가 값을 저장하라는 함수이다. 따라서 첫 입력에서 n 배열에는 홍길동\0 (널 문자 포함, 문자열이기 때문)이 저장된다.
- 그 후, 리턴값은 char형 포인터이기 때문에 주소값이 리턴된다. 따라서 test1에는 n의 주소값 즉, 배열의 첫번째 글자인 홍의 주소값이 저장된다.
- 마찬가지로 세번의 입력을 받았을 때, 전부 배열 n에 저장되는 값이기 때문에 덮어씌워져서 박영희만 저장되고, 모든 test변수들에는 n의 주소값만 저장되게 된다.
- 따라서 메인 함수의 printf함수는 n을 출력하게 되고 모두 박영희만 출력되게 된다.
- 상당히 까다로운 문제로 문자열 포인터를 잘 알아야 틀리지 않는다.
4. 다음은 테이블에 데이터를 삽입하기 위한 과정이다. 보기의 조건식에 맞게 데이터 삽입을 위한 SQL문을 작성하시오.
- 보기
CREATE TABLE 학생 ( 학번 int, 이름 varchar(20), 학년 int, 전공 varchar(30), 전화번호varchar(20) ); |
- 결과값
[학생]
학번 | 이름 | 학년 | 전공 | 전화번호 |
9830287 | 홍길동 | 3 | 컴퓨터공학 | 010-1234-1234 |
- 문자열일경우, 작은 따옴표를 쓰시오.
- INSERT INTO 학생(학번,이름,학년,전공,전화번호)
VALUES(9830287,'홍길동', 3, '컴퓨터공학', '010-1234-1234'); - 테이블에 값을 추가할때는 INSERT INTO VALUES 구문을 쓰게 된다.
- VALUES에 값을 추가할 때, 문자열일경우는 따옴표로 묶어야 한다.
- INTO 구문에서는 테이블명(속성1,속성2,....) 로 적어주어야 한다.
5. 다음은 C언어의 문제이다. 알맞은 출력값을 작성하시오.
int n[3] = [73, 95, 82]
sum = 0
for(i=0;i<3;i++){
sum += n[i];
}
switch(sum/30){
case 10:
case 9: printf(“A”);
case 8: printf(“B”);
case 7:
case 6: printf(“C”);
default: printf(“D”);
}
- BCD
- 제일 먼저 for문에서 sum에 배열에 있는 숫자를 전부 더한다. 더한 값은 250이다.
- 그 후, switch문에서는 더한 값을 30으로 나눈 몫의 케이스로 이동하라고 하고 있다. 몫은 8이다.
- 스위치 문 내부에 break문이 없기 때문에 case 8,7,6,default 를 전부 이동하여야 한다.
- 따라서 BCD가 출력된다.
6. 다음은 테스트 커버리지에 대한 내용이다. 내용을 보고 보기에 알맞는 기호를 고르시오.
- 프로그램 내에 있는 결정포인트 내의 모든 각 개별 조건식에 대한 모든 가능한 결과(참/거짓)에 대해 적어도 한번 수행한다.
- 소프트웨어 테스트 수행시 소스코드를 어느 수준까지 수행하였는가를 나타내는 기준을 나타낸다.
- 실제 업무에서는 다양한 툴을 사용하여 테스팅 수행한다.
- True/False에충분한 영향을 줄 수 없는 경우가 발생 가능한 한계점을 지닌다.
- 보기:
- ㄱ. 구문 커버리지 ㄴ. 경로 커버리지 ㄷ. 조건/결정 커버리지 ㄹ. 변형 조건/결정 커버리지
- ㅂ. 다중 조건 커버리지 ㅅ. 결정 커버리지 ㅇ. 조건 커버리지
- ㅇ. 조건 커버리지
- 테스트 커버리지는 화이트박스 테스트이다.
- 화이트박스 테스트는 각 응용프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트이다.
- 유형은 다음과 같다.
-
구문 커버리지 모든 명령문을 적어도 한번 수행 결정 커버리지 전체 조건식이 적어도 한 번은 참과 거짓 조건 커버리지 개별 조건식이 적어도 한번은 참과 거짓 조건/결정 커버리지 전체 조건식뿐만 아니라 개별 조건식도 참 한번 거짓 한번 결과가 되도록 수행 변경 조건/결정 커버리지 개별조건식이 다른 개별 조건식에 영향을 받지 않고, 전체 조건식에 독립적으로 영향을 주도록
조건/결정 커버리지를 향상 시킨 커버리지다중 조건 커버리지 결정 조건 내 모든 개별 조건식의 모든 가능한 조합을 100% 보장하는 커버리지 기본 경로 커버리지 수행 가능한 모든 경로를 테스트 하는 기법 제어 흐름 커버리지 프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직을 테스트하는 기법 데이터 흐름 테스트 제어 흐름 그래프에 데이터 사용현황을 추가한 그래프를 통해 테스트 루프 테스트 반복 구조에 초점을 맞춰 실시하는 테스트 기법
화이트박스 테스트
10-6
7. 다음은 소스코드의 알맞은 출력을 작성하시오.
#include <stdio.h>
int main(){
int c = 0;
for(int i = 1; i <=2023; i++) {
if(i%4 == 0) c++;
}
printf(“%d”, c);
}
- 505
- i는 1부터 2023까지의 값을 가지고, for문 내부에서 i가 4로 나누어떨어질 때 마다 c를 증가시키는것을 보아 4로 나누어 떨어지는 값이 몇개인지 묻고 있는 문제이다.
- 하나씩 세 보아도 되지만, 2023을 4로 나누면 몫이 505이다.
- 따라서 505개이다.
8. 다음 내용에 알맞는 답을 작성하시오.
- 소프트웨어에서 워터마크 삭제등과 같이 소프트웨어가 불법으로 변경(unauthorized modifications)되었을 경우, 그 소프트웨어가 정상 수행되지 않게 하는 기법이다.
- 소프트웨어 변조 공격을 방어하기 위해 프로그램에 변조검증코드(tamper-proofing code)를 삽입하는 것도 한 방법으로
- 변조검증코드의 용도는 첫째 프로그램이 변경되었는지를 탐지하는 것이고, 둘째는 변조가 탐지되었다면 프로그램이 실행되지 않게 한다.
- 소프트웨어의 위변조 방지 역공학 기술의 일종으로 디지털 콘텐츠의 관련 산업이나 전자상거래 또는 보호해야 할 소프트웨어가 있는 다양한 산업 분야에 적용된다.
- 템퍼프루핑
- 소프트웨어가 불법으로 변조된 경우, 그 소프트웨어가 정상적으로 실행되지 않게 하는 기법이다. 소프트웨어 변조 공격을 방어하기 위한 방법으로는 프로그램에 변조검증코드를 삽입하는 것도 있다. 변조검증코드의 용도는 프로그램이 변조되었는지를 탐지하고 변조가 탐지되었다면 프로그램이 실행되지 않게 하는 것이다.
- 출처 : 저작권 위원회 용어사전 https://www.copyright.or.kr/information-materials/dictionary/view.do?glossaryNo=296&pageIndex=1&searchLangType=&searchkeyword=&pageDisplaySize=10&searchIdx=&searchText=&clscode=01&searchTarget=
- 책에는 나오지 않는다.
9. 다음은 C언어 문제이다. 알맞은 출력값을 작성하시오.
#include <stdio.h>
#define MAX_SIZE 10
int isWhat[MAX_SIZE];
int point= –1;
void into(int num) {
if (point >= 10) printf(“Full”);
isWhat[++point] = num;
}
int take() {
if (isEmpty() == 1) printf(“Empty”);
return isWhat[point––];
}
int isEmpty() {
if (point == –1) return 1;
return 0;
}
int isFull() {
if (point == 10) return 1;
return 0;
}
int main(int argc, char const *argv){
into(5);
into(2);
while(!isEmpty()){
printf(“%d”, take());
into(4);
into(1);
printf(“%d”, take());
into(3);
printf(“%d”, take());
printf(“%d”, take());
into(6);
printf(“%d”, take());
printf(“%d”, take());
}
return 0;
}
- 213465
- stack구조를 구현한 코드이다.
- 스택은 pop연산, push연산 등으로 이루어진 구조이고, 후입선출(LIFO)구조의 자료구조이다.
- 스택의 최대 크기는 10이다.
- 그후, 가장 빈번하게 호출되는 take함수는 만약 스택이 비었다면 empty를 출력하고 그렇지 않다면 isWaht배열의 point인덱스를 출력한 후, point를 1 감소시키는 동작을 하고 있다.
- 따라서 take함수는 pop연산과 같다고 할 수 있다.
- 메인 함수의 흐름을 따라가보면, 5와 2가 들어오고 난 후 while문에서 스택이 비어있지 않을때 까지 반복을 하고 있다.
- 그 후, 2를 먼저 pop하고, 4와 1을 넣는다. 따라서 현재 배열은 5,4,1이 저장되어있는 상태이다.
- 그 후, 1을 꺼낸다. 현재 5,4가 저장되어있다.
- 다시 3을 넣는다. 5,4,3이 저장되어있다.
- 다음 take연산을 두번 사용해 3,4순서대로 꺼낸다. 현재 스택에는 5가 남았다.
- 6을 넣고 5,6이 된 상태에서 take연산을 두번 호출하면 6,5 순서대로 꺼내진다.
- 따라서 출력은 213465가 된다.
10. 데이터베이스 설계 순서에 관한 내용이다. 순서대로 나열하시오
- 구현, 요구조건 분석, 개념적 설계, 물리적 설계, 논리적 설계
- 요구조건 분석- 개념적 설계- 논리적 설계- 물리적 설계- 구현
- 데이터 모델 절차는 요구사항 분석, 개념적 데이터 모델, 논리적 데이터 모넬, 물리적 데이터 모델이 있다.
- 개념적 데이터 모델은 트랜잭션을 모델링 하는 단계이고, 현실세계의 인식을 추상적, 개념적으로 표현하여 개념적 구조를 도출하는 데이터 모델이다. 주요 산출물로 개체관계 다이어그램이 있다.(ER Diagram)
- 논리적 데이터 모델은 트랜잭션의 인터페이스를 설계하는 단계이고, 업무의 모습을 모델링 표기법으로 형상화 하여 사람이 이해하기 쉽게 표현한 데이터 모델이다. 스키마의 평가 및 정제, 정규화를 수행하는 단계이다.
- 물리적 데이터 모델은 DBMS의 특성 및 성능을 고려하여 물리적인 스키마를 만드는 단계이고, 데이터 베이스 저장구조로 변환하는 모데이다. 성능측면에서 반 정규화를 수행한다
데이터 모델 절차
3-3
11. 다음은 디자인 패턴에 관한 문제이다. 보기에서 알맞는 답을 작성하시오.
- 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고, 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 반환하는 디자인 패턴이다. 즉, 객체를 하나만 생성하고 그 객체를 모든 곳에서 참조할 수 있도록 하는 디자인 패턴이다.
- 알고리즘을 객체 구조에서 분리시키는 디자인 패턴이다. 이렇게 분리를 하면 구조를 수정하지 않고도 실질적으로 새로운 동작을 기존의 객체 구조에 추가할 수 있게 된다. 즉, 연산을 수행해야 할 요소의 클래스를 수정하지 않고도 새로운 연산을 추가 가능하게 하는 디자인 패턴이다.
보기
생성패턴 | 구조패턴 | 행위패턴 |
Abstract Factory Builder Factroy Method Prototype Singleton |
Adapter Bridge Composite Decorator Facade Flyweight Proxy |
Chain of Responsibility Command Interpreter Mediator Memento Observer State Strategy Templaye Method Visitor |
- Singleton
- Visitor
- 디자인 패턴은 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계방법을 정리한 패턴이다.
- 디자인 패턴을 참고하여 개발할 경우 개발의 효율성과 유지보수성, 운용성이 높아지며, 프로그램의 최적화에 도움이 된다.
- 디자인 패턴의 유형으로는 목적에 따라 생성, 구조, 행위 패턴이 있고, 범위에 따라서는 클래스, 객체가 있다.
주요 키워드로 패턴을 찾아야 쉽게 찾을 수 있다.
생성
Builder 조립 |
Prototype 원형 복사 |
Factory Method 상위 클래스에서 객체 생성 하위 클래스에서 인스턴스 생성 |
Abstract Factory 구체적인 클래스 의존X |
Singletone 객체 하나 생성 |
구조
Bridge 연결 |
Decorator 장식추가 |
Facade 단순한 인터페이스 |
Flyeight 클래스 경량화 |
Proxy 대리객체, |
Composite 부분 - 전채 |
Adepter 중간 역할 |
행위
Observer 상태 변경 -> 다른 객체 연락 |
Mediator 중재자 |
Visitor 클래스를 돌아다님 |
Strategy 캡슐화 된 클래스 필요시 교환 |
디자인 패턴 - 행위패턴
1-31
12. 다음 내용에서 설명하는 문제에 대해 보기에 알맞는 답을 골라 작성하시오.
- 데이터 전송시 오류를 검출하고 수정하는 오류검출방법 중 ( 1 ) 코드는 데이터 전송 과정에서 발생한 오류를 검출해 재전송 요구 없이 수신측에서 스스로 수정하는 ( 2 )방식에 포함된다. 이와 반대로 오류발생 시 송신측에 재전송을 요구하는 방식인 ( 3 )의 종류에는 ( 4 )검사, ( 5 ) 검사가 있다.
-( 1 )코드 : 전송 데이터에 Nbit의 검사 비트를 추가해 오류를 검출하고, 수정까지 할 수 있는 방법.
-( 4 )검사 : 전송 데이터의 한 블록 끝에 1bit의 검사 비트를 추가함으로써 오류를 검출하는 방법.
-( 5 )검사 : 송신측과 수신측이 동일한 특정 다항식을 사용하여 오류를 검출하는 방법 - 보기
- FEC, CRC, BEC, NAK, parity, BCD, MD5, hamming
- hamming
- FEC
- BEC
- parity
- CRC
- 데이터링크 계층의 오류 제어
- 오류 제어는 데이터 전송 시 감쇠, 왜곡, 잡음에 의해 생성된 오류를 검출하고 정정하는 기능으로 데이터 전송의 신뢰성을 위해 반드시 필요한 기능이다.
- 전진(순방향) 오류 수정 방식과 후진(역박향) 오류 수정 방식이 있다.
- 전진 오류 수정 방식(FEC; Forward Error Correction)은 데이터 전송 과정에서 발생한 오류를 검출하여 검출된 오류를 재전송 요구 없이 스스로 수정하는 방식이다. 해밍코드방식과 상승코드 방식이 있다.
- 후진 오류 수정 방식(BEC ;Backward Error Correction)은 데이터 전송 과정에서 오류가 발생하면 송신 측에 재전송을 요구하는 방식이다. 패리티검사, CRC, 블록 합 검사가 있다.
- 해밍코드방식은 수신 측에서 오류가 발생한 비트를 찾아 재전송을 요구하지 않고 자신이 직접 오류를 수정하는 방식으로 1비트의 오류 수정이 가능하다.
- 상승 코드 방식은 1개의 오류 비트를 수정할 수 있는 해밍코드방식과 다르게 여러 개 비트의 오류가 있더라도 한곗값(경곗값), 순차적 디코딩을 이용하여 모두 수정할 수 있는 방식이다.
- 패리티 검사는 7~8개의 비트로 구성되는 전송 문자에 패리티 비트를 추가하여 오류를 검출하는 방식이다.
- CRC(순환 잉여 검사; Cycle Redundancy Check)는 다항식을 통해 산출된 CRC값을 토대로 오류를 검사하는 방식으로 집단 오류를 해결하기 위한 방식이다.
- 블록 합 검사(Block Sum Check)는 프레임의 모든 문자로부터 계산되는 잉여 패리티 비트들을 사용하는 이차원(가로/세로) 패리티 검사 방식이다.
데이터 링크 계층- 데이터링크계층의 오류제어
11-49
13. 다음은 HDLC 프로토콜에 대한 설명이다. 보기 안에 알맞는 답을 골라 작성하시오.
- ( 1 ) 프레임은 Seq, Next, P/F의 필드를 가진다. 또한 맨 처음 비트를 0으로 가진다. Seq는 송신용 순서번호를 가지고 있다. Next는 응답용 순서번호를 가진다. P/F는 P가 1로 설정된 경우 주국에서 종국에 데이터 전송을 허용하는 것을 의미하고 F가 1로 설정된 경우 종국에서 주국으로 데이터 전송을 하는 것을 의미한다.
- ( 2 ) 프레임은 맨 앞의 필드가 1로 되어 있어 정보 프레임이 아니라는 것을 나타내고 다음 비트가 0이 나와있다. Type의 경우에는 2비트를 가지고 있어 4가지의 종류로 나누어진다. 데이터를 보내는 역할이 아니라 응답의 기능을 수행하므로 Seq에 대한 값은 필요가 없고 다음 프레임을 요구하는 Next만 존재한다.
- ( 3 ) 프레임은 순서 번호가 없는 프레임을 의미한다. 첫 번째 비트와 두 번째 비트가 모두 1로 설정되어 있다. 여러 종류를 가지고 있는데 Type의 2비트와 Modifier의 3비트를 합쳐 5비트를 통해 종류를 나눈다.
- ( 4 ) 은/는 두 호스트 모두 혼합국으로 동작한다. 양쪽에서 명령과 응답을 전송할 수 있다.
- ( 5 ) 은/는 불균형 모드로 주국의 허락 없이 종국에서 데이터를 전송할 수 있다.
- 보기
- ㄱ. 연결제어 ㄴ. 감독 ㄷ. 정보 ㄹ. 양방향 응답 ㅁ. 익명 ㅂ. 비번호
ㅅ. 릴레이 ㅇ. 동기균형 ㅈ. 동기응답 ㅊ. 비동기균형 ㅋ. 비동기응답
- 정보
- 감독
- 비번호
- 비동기 균형
- 비동기 응답
- HDLC는 데이터 링크 계층 프로토콜로, 점대점 방식이나 다중방식의 통신에서 사용되는 ISO에서 표준화한 동기식 비트 중심의 데이터 링크 프로토콜이다.
- HDLC의 구조는 다음과 같다.
Flag | Address | Control | Data | Checksum | Flag |
시작 | 주소 | 제어 | 데이터(정보) | 오류검출 (FCS,CRC) |
끝 |
- 프레임의 종류는 I-Frame, S-Frame, U-Frame가 있다. 전송 모드에는 정규 응답모드(NRM), 비동기 균형 모드(ABM), 비동기 응답 모드(ARM) 이 있다.
데이터링크 계층 프로토콜
11-48
책에는 자세한 내용은 안나옴.
14. 다음은 자바에 대한 문제이다. 알맞은 출력값을 작성하시오.
public class Main{
public static void main(String[] args) {
String str1 = ‘Programming’;
String str2 = ‘Programming’;
String str3 = new String(‘Programming’);
println(str1==str2)
println(str1==str3)
println(str1.equals(str3))
print(str2.equals(str3))
}
}
- true
- false
- true
- true
- 자바에서 문자열을 선언하는 방식은 리터럴 대입 방식, new연산자로 객체 생성 후 문자열 대입 방식이 있다.
- str1,str2가 리터럴 대입 방식이고, str3이 객체 생성 후 문자열 대입 방식이다.
- 리터럴 대입 방식은 문자열 상수 풀(String Constant Pool)이라는 공간에 문자열을 저장하게 된다.
- 문자열은 자주 사용하는 자료형이기 때문에 이러한 과정을 거친다. 특징은 이미 만들어진 문자열이 있다면 참조하는 형식이다. 즉 str1과 str2는 같은 값을 참조한다.
- ==연산은 참조 주소를 비교하는 연산이고 equals함수는 값을 비교하는 함수이다.
- 1번 2번 출력은 문자열을 저장한 주소값을 비교하기 때문에 true, false가 출력되게 되고, 3,4번 출력은 값 자체를 비교하기 때문에 true,true를 출력하게 된다.
- 자바에서 T,F의 표현은 모두 소문자를 사용해 true, false로 출력한다!
15. 다음 보기는 암호화 알고리즘에 대한 내용이다. 대칭키와 비대칭키에 해당하는 보기의 내용을 작성하시오
대칭키 : ( )
비대칭키 : ( )
보기
DES, RSA, AES, ECC, PKI, ARIA, SEED
- 대칭키 : DES,AES,ARIA, SEED
- 비대칭키 : RSA, ECC
- 대칭키 암호화 알고리즘은 양방향 방식 알고리즘이다.
- 양방향 알고리즘에는 대칭키 방식과 비 대칭키 방식이 있다.
- 대칭키 암호화 알고리즘은 암호화와 복호화에 같은 암호키를 쓰는 알고리즘이다.
- 대칭키 암호화 방식 중 DES는 블록 암호화 방식이다.
- 블록 암호화 방식에는 DES, AES, SEED 등이 있다.
DES (Data Encryption Standard) |
1975년 IBM에서 개발하고 미국의 연방 표준국(NIST)에서 발표한 대칭 키 기반의 블록 암호화 알고리즘 블록 크기는 64비트이고, 키 길이는 56비트인 페이스텔 구조이다. |
SEED | 1999년 국내 한국 인터넷 진흥원(KISA)이 개발한 블록 암호화 알고리즘 128비트 비밀키로 부터 생성된 16개의 64비트 라운드 키를 사용하여 총 16회의 라운드를 거쳐 128비트의 평문블록을 128비트의 암호문 블록으로 암호화 하여 출력하는 방식 |
AES (Advanced Encryption Standard) |
2001년 미국 표준 기술 연구소(NIST)에서 발표한 블록 암호화 알고리즘 DES의 개인 키에 대한 전사적 공격이 가능해지고, 3DES의 성능 문제를 극복하기 위해 개발하였다. 블록 크기는 128비트이며, 키 길이에 따라 128bit, 192bit, 256bit로 분류된다. |
ARIA (Academy, Research Institute Agency) |
2004년 국가정보원과 산학연구협회가 개발한 블록 암호화 알고리즘 ARIA는 학계, 연구기관, 정부의 영문 앞글자로 구성되었다. 블록 크기는 128비트이며 키 길이에따라 128bit, 192bit, 256bit로 분류된다. |
IDEA (International Data Encryption Algorithm) |
DES를 대체하기 위해 스위스 연방 기술 기관에서 개발한 블록 암호화 알고리즘 128비트의 키를 사용해 64비트의 평문을 8라운드에 거쳐 64비트의 암호문을 만든다. |
LFSR (Linear Feedback Shift Register) |
시프트 레지스터의 일종으로, 레지스터에 입력되는 값이 이전 상태 값들의 선형 함수로 계산되는 구조로 되어있는 스트림 암호화 알고리즘 LFSR에서 사용되는 선형함수는 주로 배타적 논리합(XOR)이고, LFSR의 초기 비트 값은 시드(Seed)라고 한다. |
Skipjack | 미 국가안보국(NSA)에서 개발한 Clipper칩에 내장된 블록 알고리즘 |
비 대칭키 암호화 알고리즘
디피-헬만 (Diffie-Hellman) |
최초의 공개키 알고리즘으로 W.Diffie와 M.Hellman이 1976년에 고안한 알고리즘으로서 유한 필드 내에서 이산 대수의 계산이 어려운 문제를 기본 원리로 하고 있다. 공개키 암호 방식의 개념을 이용하여 두 사용자 간에 공통의 암호화 키를 안전하게 공유할 방법을 제시하였으며, 많은 키 분배 방식에 관한 연구의 기본이 되었다. |
RSA (Rivest-Shamir-Adleman) |
1977년 3명의 MIT 수학교수가 고안한 큰 인수의 곱을 소인수 분해하는 수학적 알고리즘 이용하는 공개키 암호화 알고리즘이다. 비밀키의 복호화가 어려운 RSA 안전성은 소인수 분해 문제의 어려움에 근거하였다. |
ECC (Elliptic Curve Cyptography) |
1985년 코블리치와 밀러가 RSA암호 방식에 대한 대안으로 처음 제안하였다. 타원 곡선 암호(ECC)는 유한체 위에서 정의된 타원곡선 군에서의 이산대수의 문제에 기초한 공개키 암호화 알고리즘이다. |
ElGamal | T.ElGamal이 1984년에 제안한 공개키 알고리즘이다. 이산대수의 계산이 어려운 문제를 기본 원리로 하고 있으며, RSA와 유사하게 전자서명과 데이터 암/복호화에 함께 사용 가능하다. |
암호 알고리즘 상세 - 대칭 키 암호화 알고리즘, 비대칭키 암호화 알고리즘
9-23,9-24
16. 다음 괄호안에 알맞는 답을 작성하시오.
- 단방향암호화(One-Way Encryption)는 평문을 암호문으로 바꾸는 암호화는 가능하지만, 암호문을 평문으로 바꾸는 복호화는 불가능하기 때문에 단방향 암호화라고 한다. 단방향 암호화에서는 ( )(을)를 이용한 암호화 방식을 사용한다. ( )(이)란 임의의 길이의 입력 데이터를 받아 고정된 길이의 값으로 변환하는 방식이다. 이 방식을 사용하는 대표적인 ( ) 알고리즘으로는 HAVAL, SHA-1등이 있다.
- 해시(Hash)
- 단방향 암호 방식(해시 암호 방식)은 임의 길이의 정보를 입력받아, 고정된 길이의 암호문(해시값)을 출력하는 암호방식이다.
- 해시 암호화 알고리즘이 적용된 정보는 복호화가 불가능하다.
- 해시 함수를 기반으로 하는 일방향 방식에는 MAC와 MDC가 있다.
- 해시 암호화 알고리즘에는 MD5, SHA-1, SHA-256/384/512, HAS-160, HAVAL이 있다.
일방향 암호 방식
9-22
17. 다음 보기의 SQL문에서 괄호안에 알맞는 단어를 작성하시오.
- DROP VIEW 학생 ( )
- 학생 테이블을 참조하는 다른 VIEW나 제약 조건까지 모두 삭제되어야 한다.
- CASCADE
- CASCADE는 참조하는 테이블까지 연쇄적으로 제거하는 옵션이다.
- RESTRICT는 다른 테이블이 삭제할 테이블을 참조중이라면 제거하지 않는 옵션이다.
DROP TABLE 명령어 옵션
7-14
18. 다음 코드는 선택정렬 구현에 관한 문제이다. 빈칸에 알맞는 연산자를 보기에서 골라 작성하시오.
#include
int main() {
int E[] = {64, 25, 12, 22, 11};
int n = sizeof(E) / sizeof(E[0]);
int i = 0;
do {
int j = i + 1;
do {
if (E[i] ( ) E[j]) {
int tmp = E[i];
E[i] = E[j];
E[j] = tmp;
}
j++;
} while (j < n);
i++;
} while (i < n–1);
for(int i=0; i<=4; i++)
printf(“%d “, E[i]);
}
보기
<, <=, =>, >, ==, /, %
- 실행결과 : 11 12 22 25 64
- >
- 선택정렬은 현재위치와 다음 인덱스를 비교하여 정렬하는 기법이다.
- 버블 정렬과 다르게 모든 요소를 전체 비교하지 않는다. 따라서 시간복잡도는 더 빠르다.
- 현재 실행 결과가 오름차순이다.
- 따라서 >가 들어가야 한다.
- 자신보다 더 작은수가 있다면 앞으로 옮겨야 하기 때문
19. 다음 파이썬 코드에서 알맞는 출력값을 작성하시오.
a = “engineer information processing”
b = a[:3]
c = a[4:6]
d = a[28:]
e=b+c+d
print(e)
- engneing
- 리스트 관련 인덱스 연산이다.
- 문제를 풀 때, 문자열 위에 조그만하게 인덱스 번호를 적어두면 편하게 풀 수 있다.
- [a:b]연산일 경우, a를 포함하는 위치부터 b직전 즉 b-1까지 문자열을 저장한다.
- a가 비어있다면 자동으로 인덱스는 0부터 시작이다.
- b가 비어있다면 자동으로 인덱스는 끝번까지이다.
- b = eng
- c = ne
- d = ing
- 따라서 모두 더하면 engneing이다.
20. 다음 설명에 대한 알맞는 답을 작성하시오.
1.
- 하향식 테스트 시 상위 모듈은 존재하나 하위 모듈이 없는 경우의 테스트를 위해 임시 제공되는 모듈이다.
- 특별한 목적의 소프트웨어를 구현하는 것으로 컴포넌트를 개발하거나 테스트할 때 사용된다.
- 서버-클라이언트 구조에서 서버만 구현된 상태로 테스트를 해보고 싶을때 단순히 값만 넘겨주는 가상의 클라이언트를 만들어서 테스트 할 수 있다.
2.
- 상향식 테스트 시 상위 모듈 없이 하위 모듈이 존재할 때 하위 모듈 구동 시 자료 입출력을 제어하기 위한 제어 모듈(소프트웨어)이다.
- 서버-클라이언트 구조에서 클라이언트만 구현된 상태로 테스트를 해보고 싶을때 접속 인증 등의 간단한 기능만 하는 가상의 서버를 만들어서 테스트 할 수 있다.
- 스텁
- 드라이버
- 통합 테스트는 각 모듈간의 인터페이스 관련 오류 및 결함을 찾아내기 위한 체계적인 테스트 기법이다.
- 하향식 통합은 위에서 아래로 이동하면서 테스트를 진행하는 방법이다. 스텁을 써서 수행한다.
- 스텁은 모듈 및 모든 하위 컴포넌트를 대신하는 더미 모듈이다.
- 상향식 통합은 아래에서 위로 이동하면서 테스트를 진행하는 방법이다. 테스트 드라이버를 써서 수행한다.
- 테스트 드라이버는 상위 모듈에서 데이터의 입력과 출력을 확인하기 위한 더미 모듈이다.
통합테스트 - 상향식 통합, 하향식 통합
10-42
2023년 2회차 문제는 역대 최고로 합격률이 낮은 시험이었습니다.
또한, 코딩 문제에서 보기를 준 후, 보기에서 끼워맞춰야 하는 문제가 다량으로 나왔습니다.
코딩은 본래 정답은 없지만 이번 시험에서는 보기에서 찾아서 답을 맞추는 개념이라 여러 답의 조합을 비교해가면서 문제를 풀어가나야 할 것 같습니다.
시간은 충분하니 꼼꼼히 시험에 응시한다면 원하는 결과를 가져올 것 같습니다.
오타 및 틀린문제는 댓글 부탁드립니다!
'Study > 정보처리기사' 카테고리의 다른 글
정보처리기사 2023년 3회를 위한 개념정리 (1) | 2023.10.03 |
---|---|
2023년 1회 정보처리기사 실기 기출문제 풀이 (0) | 2023.09.30 |
2022년 3회 정보처리기사 실기 기출문제 풀이 (0) | 2023.09.27 |
2022년 2회 정보처리기사 실기 기출문제 풀이 (1) | 2023.09.27 |
2022년 1회 정보처리기사 실기 기출문제 풀이 (0) | 2023.09.25 |