정처기 실기) 2020년 1회 기출문제

정우시·2022년 6월 23일
1

3. 정처기 실기

목록 보기
2/8
post-thumbnail

01. 데이터베이스 모델링 과정 중 비정규화(Denormalization, 반정규화, 역정규화)의 개념을 간략히 서술하시오.

데이터베이스 설계 과정은 개념설계, 논리설계, 물리설계로 총 3단계로 이루어져있다. 줄여서 개논물...

  • 개념설계: 요구사항 분석으로 머리에 있는 모든 것을 다 끄집어낸다. 그리고 그것들을 그림으로 만든다. → ERD라는 산출물이 나온다. ER 다이어그램
  • 논리설계: 다 끄집어냈으면 이것들을 체계적으로 모아야한다. 논리적으로 이쁜 그림을 만든다. → 정규화, 트랜잭션 인터페이스(T/i)를 논리설계에서 작업한다.
  • 물리설계: 성능을 고려한 설계를 한다.(ex. 인덱스, 파티션, 클러스터링, 뷰 만듬, 트리거 만듬)

근데 만들다가 성능이 안나오는 경우가 있다. 왜냐하면 정규화를 거치게 되면 Join이라는 연산이 나오는데 조인은 곱하기 연산이다. 1억 곱하기 1억 이렇게 엄청나게 작업을 하면 결국 조인으로 인해 성능이 떨어진다.

그래서 물리설계(인덱스, 파티션, 클러스터링...)를 해도 성능이 안나오면 반정규화를 시킨다.

반정규화는 DB의 성능향상을 위해 정규화에 위배되는 행위를 하는 것이다.

그러면 정규화는 왜 할까? 정규화는 이상현상 때문에 하게된다. (ex. 테이블이 중복되거나 등등)

이상현상에는 삽입이상, 삭제이상, 갱신이상이 있다. 이런 것들을 없애기 위해 정규화 과정을 하게 된다.

그래서 정답을 정리하면

데이터베이스 정규화 이후, 성능향상과 개발 편의성 등 정규화 기법에 위배되는 수행 기법이다.


02. 다음이 설명하는 용어는 무엇인지 쓰시오.

W3C(World Wide Web Consortium)에서 개발되었고, 웹 브라우저 간 호환이 되지 않는 문제와 SGML(Standard Generalized Markup Language)의 복잡함을 해결하기 위해 개발된 다목적 마크업 언어이다.
마크업 언어는 구조적인 언어이다. 우리가 가장 많이 쓰는 마크업 언어는 HTML이다. 뜻은 텍스트를 초월한(클릭해서 다른 곳으로 갈 수 있으니 ㅎㅎ) 구조화된 언어... 이런 뜻이다. 구조화는 HTML의 Tag를 생각하면 된다. 그리고 작성한 HTML을 브라우저가 해석해서 이미지로 보여준다.

근데 태그가 정해져있기에 내가 테이터를 전송할 때 태그들로 전송을 할 수 없다. 그래서 SGML을 만들었다. 근데 SGML이 사용하기 어려워서 XML을 만들게 되었다. XML의 뜻은 확장형 마크업 언어라는 뜻이다.

HTML처럼 기본적인 태그만 쓰는 것이 아니라 내가 원하는 태그들을 확장해서 만들 수 있는 언어로 알면 된다. 보통 마크업 언어를 말하면 HTML, SGML, XML을 뜻한다. 그리고 XML은 UTF-8 형태로 저장하기에 유니코드를 사용해 전 세계 언어를 지원한다.

그래서 정답은 XML

옛날에는 XML을 통해 데이터를 많이 전송했다.(ex. RSS, Atom...) 그러나 요즘에는 JSON이 더 많이 쓰인다.

※ 인터페이스 전송 데이터

JSON

  • AJAX를 이용해 통신을 할 때 많이 이용한다.
  • 이름과 값의 쌍으로 이루어진다.

XML

  • 웹에서 구조화된 문서를 표현하고 전송하도록 설계한 마크업 언어
    CSV (Comma Separated Values)
  • 몇 가지 필드를 쉼표로 구분한 텍스트 데이터 및 텍스트 파일

YAML

  • '사람이 쉽게 읽을 수 있는'데이터 직렬화 양식

03. 소프트웨어 테스트 방법의 원리 중 하나인 살충제 패러독스(Pesticide Paradox)의 개념을 간략히 설명하시오.

살충제 패러독스는 동일한 테스트 케이스로 동일한 절차를 반복 수행하면 새로운 결함을 찾을 수 없다.

※ 소프트웨어 테스트의 원리

  • 테스팅은 결함이 존재함을 밝히는 활동이다.
  • 완벽한 테스팅은 불가능하다.
  • 테스팅은 개발 초기에 시작해야 한다.
  • 결함 집중(파레토 법칙): 20%의 핵심 모듈에서 80%의 결함이 발생한다.
  • 살충제 패러독스
  • 테스팅은 정황(Context)에 의존한다.
  • 오류-부재의 궤변: 오류가 없는 소프트웨어라고 하더라도 사용자의 요구사항에 맞지 않다면 가치가 없다.

04. 다음은 공통 모듈 구현의 개념에 대한 설명이다. 괄호 ( )안에 알맞은 용어를쓰시오.

  • 소프트웨어 개발에 있어 기능을 분할하고 추상화하여 성능을 향상시키고 유지보수를 효과적으로 하기 위한 공통 컴포넌트 구현 기법이다.

  • 인터페이스 모듈, 데이터베이스 접근 모듈 등 필요한 공통 모듈을 구현한다.

  • 모듈간의( 1 )는 줄이고,( 2 )는 높은 공통모듈 구현을 권장하고 있다.

모듈은 하나의 일처리 과정이다. 예를 들어서 계산기라는 프로그램을 만들면 더하기 모듈, 빼기 모듈, 곱하기 모듈, 나누기 모듈을 만들어서 각각의 기능을 수행한 다음에 이것을 통합하는 것이다.

모듈은 하나 하나가 기능을 하는 것이다. 모듈은 독립성이 높아야 한다. 독립성은 만약에 더하기를 뜯어서 다른 프로젝트에 쓸 수 있는 것이다. 이런 독립성을 높이기 위해 결합도(Coupling)는 줄이고 응집도(Cohesion)는 높인다.

★ 결합도 유형, 응집도 유형 잘 외우기


05. 다음은 모듈의 관계를 나타낸 다이어그램이다. fan-in 개수가 2 이상인 모듈 명칭을 쓰시오.

Fan-in이 있고 Fan-out이 있다. Fan-in은 나를 누군가 호출하는 것! Fan-out 내가 호출하는 것!

👉 F, H 👈


06. 속성-값(Attribute-Value Pair)으로 이루어진 데이터 오브젝트를 전달하기 위해 사용하는 개방형 표준 포맷이다. Ajax(Asynchronous JavaScript and XML)에서 많이 사용되고 XML(eXtensible Markup Language)을 대체하는 주요 데이터 포맷이다. 언어 독립형 데이터 포맷으로 다양한 데이터 프로그래밍 언어에서 사용 하고 있는 기술은 무엇인가?

👉 JSON 👈


07. 애플리케이션의 성능을 측정하기 위한 지표는 무엇인가?

지표설명
( 1 )일정 시간 내에 애플리케이션이 처리하는 일의 양
( 2 )애플리케이션에 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
( 3 )애플리케이션에 요청을 전달한 시간부터 처리가 완료될 때까지 걸린 시간
자원 사용률애플리케이션이 작업을 처리하는 동안의 CPU 사용량, 메모리 사용량, 네트워크 사용량 등 자원 사용률

👉 ( 1 ): 처리량(Throughput)
👉 ( 2 ): 응답 시간(Response Time)
👉 ( 3 ): 경과 시간(Turnaround Time)

애플리케이션 성능 측정 지표

처응경자처리량 / 응답시간 / 경과시간 / 자원 사용률

08. STUDENT 테이블에 컴퓨터과 학생 50명, 인터넷과 학생 100명, 사무자동화과 학생 50명의 정보가 저장되어 있을 때, 다음 SQL 문의 실행 결과에 따른 튜플의 수는? (단, DEPT 칼럼은 학과명이다.)

1 SELECT DEPT FROM STUDENT; 				// 학생에서 DEPT 전체를 가져와
2 SELECT DISTINCT DEPT FROM STUDENT			// DISTINCT 중복제거
3 SELECT COUNT(DISTINCT DEPT) FROM STUDENT	// 컴퓨터과 1만
	WHERE DEPT=‘컴퓨터과’

튜플의 수는 행의 수를 말한다.

SELECT의 구조

  • 먼저 SELECT는 가져오는 구조이기에 SELECT와 FROM을 많이 사용한다.
  • 다 가져와 하면 *를 사용한다.
SELECT
	*, A, B, C
FROM
  • 여기서 조건을 설정하고 싶으면 WHERE를 사용한다.
SELECT
	*, A, B, C
FROM TABLE
WHERE DEPT = '전기'
  • 조건을 세분화 시키고 싶으면 AND, OR
SELECT
	*, A, B, C
FROM TABLE
WHERE DEPT = '전기'
AND / OR
  • 그 다음 할 수 있는 것은 GROUP BY를 통한 그룹핑
SELECT
	*, A, B, C
FROM TABLE
WHERE DEPT = '전기'
AND / OR
GROUP BY DEPT
  • 근데 그룹핑을 시켰는데 여기서 조건을 주고 싶다면 HAVING
SELECT
	*, A, B, C
FROM TABLE
WHERE DEPT = '전기'
AND / OR
GROUP BY DEPT
HAVING
  • 가장 마지막에 오는 것은 ORDER BY를 통한 정렬이다.
SELECT
	*, A, B, C
FROM TABLE
WHERE DEPT = '전기'
AND / OR
GROUP BY DEPT
HAVING
ORDER BY 속성 DESC
			 ASC

👉 1. 200
👉 2. 3
👉 3. 1


09. 공격자가 패킷의 출발지 주소나 포트를 임의로 변경해 출발지와 목적지 주소를 동일하게 함으로써 공격 대상 컴퓨터의 실행속도를 느리게 하거나 동작을 마비시켜 서비스 거부 상태에 빠지도록 하는 공격 방법은 무엇인가?

보안의 3요소

  • 기밀성: 이 안에 있는 데이터는 남들이 보면 안된다.
  • 무결성: 이 데이터는 인가가 안된 사람들이 바꾸면 안된다.
  • 가용성: 이 데이터를 인가가 된 사람들이라면 원하는 시점에 언제든지 사용해야 한다.

서비스 공격 유형의 종류

  • Dos(Denial of Service, 서비스 거부) / DDOS - 가용성을 떨어트린다.
    • Smurf Attack: IP, ICMP 프로토콜을 이용해 공격, IP주소를 속인다.
    • SYN flooding
    • UDP 플러딩
    • Ping 플러딩
    • Ping of Death: ICMP 패킷을 엄청 크게 보낸다. 조합하기 힘들게 만든다.
    • Teardrop Attack: 조합할 수 있는 플래그 번호가 있는 데 그것을 조작한다.
    • LAND Attack: 똑같은 주소를 계속 돌게 한다.
  • DDoS(Distributed Denial of Service, 분산 서비스 거부)
  • 피싱(Phishing)
  • 파밍(Pharming)
  • 스니핑(Sniffing)
  • 스미싱(Smishing)
  • 큐싱(Qshing)
  • 랜섬웨어(Ransomware): 컴퓨터에 있는 모든 자원을 암호화하여 돈달라~
  • 키 로거(Key Logger)
  • SQL 삽입(SQL Injection): SQL을 삽입해서 서버에서 자원을 탈취하는 것
  • XSS(Cross Site Scripting): 자바스크립트를 사용해서 공격하는 것
  • 무작위 대입 공격(Brute-Force Attack): 아이디를 알고 있을 경우 암호를 엄청 돌린다.
  • 스피어 피싱(Spear Phishing)
  • APT(Advanced Persistent Threat, 지능적 지속 위협)
  • 제로데이(Zero - day)공격
  • 백도어(Back Door)
  • Rainbow Table Attack: 해시 암호화는 단방향 암호화이기에 복호화가 안된다. 그러나 이것을 깨는 방법이 있다. 레인보우 테이블에서 어떤 데이타가 들어가면 어떤 문자열이 들어가면 aaa가 만들어진다.라고 해커들끼리 공유를 한다. 그러면 해킹한 암호를 레인보우 테이블과 매칭을 시켜본다. 그래서 레인보우 테이블을 피하기 위해서는 salt를 붙인다. salt를 이용해 암호가 들어오면 추가로 덧붙인다. ex) aaa/hung
  • CSRF(Cross Site Request Forgery)
  • TOCTOU(Time Of Check To Time Of Use = TOCTTOU): 병행제어를 할 때 시간과 관련된 것이다.

👉 랜드 어택(Land Attack)


10. 통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다. 통신 프로토콜의 기본 요소 3가지를 쓰시오.

프로토콜의 기본요소

  • 구문: 데이터의 구조나 형태와 포맷을 정의
  • 타이밍: 어떤 데이터를 보낼 것인지, 얼마나 빨리 보낼 것인지를 결정
  • 의미: 데이터의 각 부분이 무엇을 뜻하는지 알 수 있게 미리 정해둔 규칙
구의타구문 / 의미 / 타이밍

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


11. 스케줄링 방식에서 HRN(Highest Response ratio Next) 우선순위 계산식을 쓰시오.

  • SJF(Shortest Job First)는 기아현상이 일어날 수 있다. 왜냐하면 실행 시간이 빠른 것들을 먼저 처리(CPU에 넣는다)를 한다. 그러면 상대적으로 시간이 긴 것은 처리가 안될 수 있다. 그래서 대기시간이 긴 친구부터 먼저 처리를 하자라는 것이 HRN이다.

  • HRN은 대기 중인 프로세스 중 우선순위가 가장 높은 것을 선택하는 기법이다.

프로세스 스케줄링

비선점 스케줄링선점 스케줄링
FCFS (계산식 있음)SRT (계산식 있음)
SJF (계산식 있음)RR
HRN (계산식 있음)MLQ(다단계 큐)
기한부MFQ (다단계 피드백)
우선순위
  • 선점의 의미: 뭔가 실행 중 일때 강제로 뺏을 수 있는 것
  • 비선점의 의미: 못 뺏음

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


12. 트랜잭션의 특성 중 일관성, 지속성 외 2개의 특성을 쓰시오.

  • 원자성: 트랜잭션의 가장 기본적인 특성으로 트랜잭션 내의 연산은 반드시 모두 수행되어야 하며 그렇지 못한 경우 모두 수행되지 않아야 함
    • Commit, RollBack의 영향을 받는 것이 원자성이다.
  • 일관성: 트랜잭션이 정상적으로 완료된 후 언제나 일관성 있는 데이터베이스 상태가 되어야하며, 결과에 모순이 생겨서는 안 됨
  • 격리성: 하나의 트랜잭션이 수행 중에는 다른 트랜잭션이 접근할 수 없고 각각의 트랜잭션은 독립적이어야 함
  • 영속성: 지속성이라고도 하며, 트랜잭션이 성공적으로 완료된 후 결과는 지속적으로 유지되어야 함

👉 원자성, 격리성


13. OSI 계층 중 비트를 전송하는 계층은 무엇인가?

👉 물리 계층(Physical Layer)

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

OSI 7 참조 모델

OSI 7 계층 참조 모델TCP / IP 4 계층프로토콜장비
응용 계층응용 계층TCP와 연관된 프로토콜: telnet, FTP, HTTP, POP, SMTP / UDP와 연관된 프로토콜: DHCP, SNMP, DNS
표현 계층응용 계층TCP와 연관된 프로토콜: telnet, FTP, HTTP, POP, SMTP / UDP와 연관된 프로토콜: DHCP, SNMP, DNS
세션 계층응용 계층TCP와 연관된 프로토콜: telnet, FTP, HTTP, POP, SMTP / UDP와 연관된 프로토콜: DHCP, SNMP, DNS
전송 계층전송 계층TCP, UDP
네트워크 계층인터넷 계층IP, ICMP, ARP, RARP라우터
데이터링크 계층링크 계층브리지
물리 계층링크 계층허브, 리피터
  • IP주소를 가지고 MAC 주소(어떤 컴퓨터의 고유한 주소)로 바꿔주는 것은 ARP
  • MAC 주소를 IP로 바꿔주는 것은 RARP
  • TCP: 3-Way Handshake를 해서 연결성을 보장
  • UDP: 냅다 보낸다.
  • 라우터: 밖으로 빠져나가기 위해 사용
  • 전송 계층: 양 종단간의 신뢰성 있는 정보를 전달하는 것
  • 네트워크 계층: 전달만 하는 역할
  • 데이터링크 계층: 인접한 노드들끼리 신뢰성 있는 정보를 전달
  • 응용, 표현, 세션 계층에서 데이터가 만들어져서 전송 계층에서 데이터가 헤더를 붙여서 세그먼트를 만드는 것이고 세그먼트를 네트워크 계층으로 내려서 헤더를 붙이면 패킷이 되고 패킷을 데이터링크 계층으로 내려서 헤더를 붙여서 프레임을 만들어준다. 그리고 이것을 쫙 전송한다.

14. 다음이 설명하는 제품 패키지 릴리스 노트의 작성 항목은 무엇인가?

문서 이름(릴리스 노트 이름), 제품 이름, 버전 번호, 릴리즈 날짜, 참고 날짜, 노트 버전 등의 정보

👉 헤더

  • 릴리스 노트의 기본 사항들을 헤더에 작성한다.

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

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


16. RFC 1321로 지정되어 있으며, 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용된다. 1991년 로널드 라이베스트가 예전에 쓰이던 MD4fmf 대체하기 위해 고안된 128비트 암호화 해시 함수는 무엇인가?

👉 MD5

  • MD5는 깨져서 SHA관련된 것을 많이 사용한다.
  • MD5는 단방향 암호화로 들어가면 역으로 못간다.
  • 암호화는 대칭키 암호화가 있고 비대칭키 암호화가 있다. 대칭키는 양쪽키가 똑같은 것이고 비대칭키 암호화는 양쪽키가 다르다. 대칭키는 블록 알고리즘이 있고 스트림 알고리즘이 있다. 블록 알고리즘에는 DES(Feistel 암호 구조를 사용), AES(SPN 구조를 사용) 등이 있고 스트림 알고리즘에는 LFSR, RC4 등이 있다. 비대칭키 알고리즘은 소인수분해 그런 것을 이용한 RSA 타원 곡선이 그런 것을 이용한 ECC 등이 있다.

17. LoC(Line of Code)가 30,000라인이고, 개발자가 5명이며, 개발자가 월평균 300라인을 개발한다. 이때 프로젝트 개발 기간과 계산식을 쓰시오.

👉 프로젝트 개발 기간: 20개월
👉 계산식: (30,000라인 ÷ 300라인) ÷ 5명 = 20개월

  • Man Month에 프로젝트 인원과 관련 없이 한 사람이 프로젝트를 할 때 걸리는 시간으로 Man Month = LOC ÷ 프로그래머의 월간 생산성 ÷ 30,000 ÷ 300 = 100개월
  • 프로젝트 기간 = Man Month ÷ 프로젝트 인원 = 100 ÷ 5 = 20개월

18. 다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>
void main( ){
 int i, j;								//1️⃣
 int temp;						   		//2️⃣
 int a[5] = {75, 95, 85, 100, 50};
 
 for(i=0; i<4; i++){					//3️⃣				
   for(j=0; j<4-i; j++){				//4️⃣	
     if(a[j] > a[j + 1]){				//5️⃣
       temp = a[j];
       a[j] = a[j + 1];
       a[j + 1] = temp;
     }
   }
 }
 for(i=0; i<5; i++){					//6️⃣
   printf("%d ", a[i]);
 }
}
  • 소스 코드는 거품 정렬(Bubble Sort)로서 두 인접한 원소를 검사하여 정렬하는 방법이다.

1️⃣ 이중 for문을 위한 변수 i,j
2️⃣ 임시 저장 변수
3️⃣ (요소의 개수-1)만큼 반복
4️⃣ (요소의 개수-i)만큼 반복
5️⃣ 현재 요소의 값과 다음 요소의 값을 비교하여 큰 값을 다음 요소로 보냄
6️⃣ 0번째에서 4번째 값을 출력

👉 정답: 50, 75, 85, 95, 100


19. 다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

public static void main(String[] args) {
 int i;										//1️⃣
 int a[4] = {0, 1, 2, 3};					//2️⃣
 
 for(i=0; i<4; i++){
 System.out.print(a[i] + “ ”);				//3️⃣
 }
}
  • 소스 코드는 배열 선언한 후 배열을 출력한다.

1️⃣ for 문을 제어하기 위한 변수
2️⃣ 4개의 요소를 가진 배열
3️⃣ i번째 인덱스의 요소 값을 출력, + “ ”는 공백

👉 정답: 0 1 2 3


20. 다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

public static void main(String[] args){		//1️⃣
 int i = 3;
 int k = 1;
 
 switch(i){
 case 0:
 case 1:
 case 2:
 case 3: k=0;								//2️⃣
 case 4: k+=3;								//3️⃣
 case 5: k-=10;								//4️⃣
 default: k--;								//5️⃣
 }
 
 System.out.print(k);						//6️⃣
}
  • switch case 문에 break가 없기 때문에 case 3에 있는 k=0부터 문장을 순차적으로 실행한다.

1️⃣ i가 3이므로 case 3으로 이동
2️⃣ case 3에서 k=0을 실행
3️⃣ break가 없으므로 k+=3 실행(k는 3)
4️⃣ break가 없으므로 k-=10 실행(k는 -7)
5️⃣ break가 없으므로 k-- 실행(k는 -8)
6️⃣ k가 저장하고 있는 값인 -8을 출력

👉 정답: -8

profile
프론트엔드 공부하고 있는 정우시입니다.

0개의 댓글