1. 데이터베이스 모델링 과정 중 비정규화(반정규화, 역정규화)의 개념을 간력히 서술하시오.
데이터베이스 3단계
개념 : ERD 만들기 (개체: 사각형, 속성: 동그라미, 관계: 마름모)
논리 : 목표 DBMS에 맞는 설계, Transaction Interface, 정규화
물리 : 성능을 고려 → 이때 반정규화 하게 됨(최후의 보루)
정규화 복습하기 (3정규형 까지) 두부이결다줘
1. 도메인 원자성
2. 부분함수 종속 제거
3. 이행적 함수 종속 제거
BCNF : 결정자이면서 후보키가 아닌 것 제거
4. 다치 종속 제거
5. 조인 종속 제거
→ 너무 많이 쪼개게 되면 조인 연산을 했을 때 성능이 떨어짐
정답: 데이터베이스 정규화 이후, 성능향상과 개발 편의성 등 정규화 기법에 위배되는 수행 기법
2. 다음 설명에 부합하는 마크업 언어는 무엇인지 영문으로 쓰시오
( ) 은 SGML의 단순화 된 부분집합으로, 다른 많은 종류의 데이터를 기술하는 데 사용할 수 있다.
( ) 은 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게하여 HTML의 한계를 극복할 목적으로 만들어졌다.
( ) 은 텍스트 데이터 형식으로 유니코드를 사용해 전 세계 언어를 지원한다.
마크업 랭기지: HTML, SGML, XML
HTML: 구조 담당, 한계가 있음 → 사용할 수 있는 태그가 정해져 있음. ex) a, href, div...
SGML: 더럽게 복잡함
XML: 확장된 마크업 랭기지
정답: XML
3. 소프트웨어 테스트 방법의 원리 중 하나인 살충제 패러독스(Pesticide Paradox)의 개념을 간략히 설명하시오.
테스트 - v모델
단위테스트 - 정적 테스트(코드를 봄), 동적 테스트
통합테스트 - 하향식(메인부터, 스텁), 상향식 테스트(드라이버), 빅뱅 테스트, 백본 테스트
시스템 테스트 - 기능 테스트, 비기능(속도, 저장공간, 자원 효율, 보안, 등) 테스트
인수테스트 - 알파 테스트(개발자 + 사용자), 베타 테스트(사용자)
살충제 패러독스: 동일한 테스트 케이스로 테스트를 계속 수행하면, 다른 테스트케이스에서 발생하는 오류를 발견할 수 없다, 테스트 케이스를 주기적으로 바꿔줘야 한다
파레토 법칙: 20%의 핵심모듈에서 80%의 오류가 발생한다
테스트 오라클: 미리 정의된 참 값을 대입해서 테스트 하는 기법
(참 오라클, 샘플 오라클, 휴리스틱 오라클, 일관성 검사 오라클)
정답: 동일한 테스트 케이스로 동일한 절차를 반복 수행하면 새로운 결함을 찾을 수 없다.
4. 프로그램 모듈화와 모듈의 독립성에 대한 설명이다. 빈칸에 들어갈 용어를 쓰시오
모듈의 독립성을 판단하는 두 가지 지표이다. ( 1 )는 모듈과 모듈간의 상호 의존 정도, ( 2 ) 는 모듈 내부의 기능적인 집중 정도이다.
모듈의 독립성을 높이기 위해서는 모듈 간의 상호 의존 정도를 나타내는 ( 1 )를 낮추고 모듈이 독립적으로 자체 기능만을 수행하도록 ( 2 )를 높여야 한다.
소프트웨어 공학의 3R
재공학: 유지보수의 생산성으로 소프트웨어의 위기를 극복해보자
역공학: 소스코드를 보고 역으로 문서를 추출해내는 과정
재사용: 잘 만들어진 모듈을 재사용하자 → 모듈의 독립성이 높여야 함
모듈의 독립성을 높이기 위해선 응집도를 높여야 하고, 결합도를 낮춰야 한다.
응집도: 하나의 기능을 수행하기 위해 모듈의 구성 요소가 똘똘뭉친다
(우논시절통순기, '우'리 '놀'던 '시''절'에 먹었던 '통'통한 '순'대 '기'가막혔지)
기능적 응집도: 제일 좋음
순차적 응집도: 순차적으로 수행된다라는 의미가 아님, 하나의 모듈 내부에서 이전 결과값을 다음의 입력값으로 사용하는 것을 말함
통신적 응집도: 동일한 입력이나 출력을 사용함
절차적 응집도: 순차적으로 수행됨
시간적 응집도: 비슷한 시간대에 동작함
논리적 응집도: 비슷한 일을 함
우연적 응집도: 아무 상관이 없음
결합도: 모듈간 호출 시, 도 모듈 간의 관계
(데스제외공내, '데''스'형 '제''외'저래 '공'유랑 '내'가 닮았대)
데이터(자료): 값만 가지고 호출 함 call by value
스탬프: 배열 자료구조 포인터 이런것들(주소값)을 넘길때
제어: 제어 요소를 넘김 (if문에서 사용되는 값을 넘김)
외부: 외부 변수를 넘김(extern 변수)
공통: 전역변수를 넘김
내용: 최악임, 스파게티 코드
정답: 결합도(Coupling) 응집도(Cohesion)
5. 다음은 어떤 프로그램의 구조를 나타낸다 Fan-in의 수가 2 이상인 모듈의 이름을 쓰시오.
Fan - IN : 모듈 기준으로 들어오는거, 모듈 머리에 꽂히는거
Fan - Out: 모듈로부터 나가는거, 모듈의 다리 수
ex)
B: in - 1 out - 2,
C: in - 1 out - 1,
F: in - 3 out - 1,
H: in - 2 out - 0
정답 : F, H
주의! 모듈의 이름을 쓰는 것인지, Fan -in (의 수)를 쓰는 것인지 잘 구분하기
6. 다음 설명 중 빈 칸에 가장 부합하는 용어를 영문약어로 쓰시오.
Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포멧
( ) 표현식은 사람과 기계 모두 이해하기 쉬우며 용량이 작아서, 최근에는 ( )이 XML을 대체해서 데이터 전송 등에 많이 사용한다.
프로그래밍 문법이 아닌 단순히 데이터를 표시하는 표현 방법일 뿐이다.
( ) 데이터는 이름과 값의 쌍으로 이루어진다.
JSON, YAML(직렬형 언어)..XML(확장된 마크업 랭기지, 태그로 구분되어 있음), CSV(콤마로 구분)
정답: JSON
Framework: 개발할 때 기본적인 틀을 제공, 반제품 형태의 소프트웨어, 해당 언어로 만든 기본 틀
ex) Spring, 전자 정부 프레임웍
lib: 내부 라이브러리(C언어에서 기본적으로 제공하는 모듈), 외부 라이브러리(공유 정신이 투철한 개발자들이 만든 모듈)
API: Framework, lib 를 이용한 개발 형태. 입력값 출력값을 명시해서 외부에서 받은 입력값에 따른 출력값을 리턴
7. 다음 설명 중 빈 칸 (1) ~ (3)에 가장 부합하는 애플리케이션 성능 측정을 위한 지표를 쓰시오
(1) : 일정 시간 내에 애플리케이션이 처리하는 일의 양
(2) : 애플리케이션에 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
(3) : 애플리케이션에 요청을 전달한 시간부터 처리가 완료될 때까지 걸린 시간
자원 사용률(Resource Usage) : 애플리케이션이 작업을 처리하는 동안의 CPU 사용량, 메모리 사용량, 네트워크 사용량 등 자원 사용률
정답: 처리량(Throughput), 응답 시간(Response Time), 경과 시간(Turn Around Time)
친구에게 사과를 달라고 했을 때,
친구가 응이라고 대답하는데 걸린 시간 = 응답 시간(Response Time)
실제로 사과를 가져오는 데 걸린 시간 = 경과 시간, 반환 시간(Turn Around Time)
8. 학생(STUDENT) 테이블에 전자과 학생 50명, 전기과 학생 100명, 건축과 학생 50명의 정보가 저장되어 있을 때, 다음 1 ~ 3 SQL 문의 실행 결과 튜플 수를 쓰시오 (DEPT 칼럼은 학과 명이다)
1. SELECT DEPT FROM STUDENT;
2. SELECT DISTINCT DEPT FROM STUDENT;
3. SELECT COUNT(DISTINCT DEPT) FROM STUDENT WHERE DEPT='건축과';
정답:
1. 200
2. 3
3. 1
행 = 로우 = 튜플 = 레코드 = 카디널리티
열 = 칼럼 = 필드 = 속성 = 차수(degree)
도메인 = 열의 데이터에 들어갈 수 있는 값의 범위
SELECT 문 구조
SELECT *
FROM ~
WHERE AND/OR
GROUP BY .. 집계함수(COUNT, SUM, MIN, MAX, AVG)
HAVING SUM(영어) >= 200
ORDERY BY A ASC, B DESC
집계함수는 SELECT절 , HAVING 절 밖에 사용할 수 없다
DISTINCT는 SELECT 절에만 들어갈 수 있다
9. 다음에 가장 부합하는 네트워크 공격 유형을 쓰시오
출발지 IP와 목적지 IP가 같은 패킷을 만들어 보내는 공격 방법
수신자가 응답을 보낼 때, 목적지 주소가 자기 자신이므로 SYN 신호가 계속 자신의 서버를 돌게 되어 서버의 자원을 고갈 시 켜 가용성을 파괴한다
방화벽에서 출발지와 목적지가 같은 패킷은 모두 제거하여 대응한다.
DoS 공격 중 Land attack에 해당하는 설명이다
서비스 공격 유형이 종류
DoS(Denial of Service, 서비스 거부) 가용성을 해치는 공격
- Smurf Attack: IP, ICMP(데이터 전송 실패시 알려주는 프로토콜), 내 IP 주소를 속임
예를 들어 네이버 IP 주소가 2번이고 내 IP 주소가 1번일때, 내 IP 주소를 2번이라고 속인 후 실패를 유도해서 ICMP 프로토콜이 신호를 보내게 유도함. 이 신호는 내가 아닌 NAVER에게 전송됨
- SYN flooding: SYN 신호를 계속해서 보냄
- UDP flooding: UDP 패킷을 계속해서 보냄
- Ping flooding: Ping 관련된 ICMP 패킷을 계속해서 보냄
- Ping of Death: 규정 크기 이상의 패킷을 보내서 죽여버림
- Teardrop Attack: 재조립 불가, 패킷을 보낼 때 잘라서 보내게 되는데, 이 자른 패킷을 다시 조립할 수 없게 fragment number를 바꿔버림
- Land Attack: 출발지, 목적지 ip 주소를 같게 해서 서버 내에서 계속 돌게함
정보보안의 3요소
- 기밀성: 아무나 보지 못함, 암호화
- 무결성: 인가된 사용자만 수정할 수 있음, 접근제어
- 가용성: 인가된 사용자가 정보 자산을 언제든지 이용할 수 있음
DDoS vs DoS
DOS: 내가 공격의 주체가 됨, 공격 유형의 특징 알아두기
DDoS: 쫄병을 만들어서 공격을 시키고 나는 구경함, TFN, 슈타실드(?) 이런 도구들이 있음 알아두기
10. 통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다. 통신 프로토콜의 기본 요소 3가지를 쓰시오.
'구''타'를 왜하니? '으이'그 로 외구기
구문(Syntax)
타이밍(Timing)
의미(Semantic)
프로토콜 = 약속
11. HRN(Highest Response-ratio Next) 우선순위를 결정하는 계산식을 쓰시오
범위: process scheduling
HRN = 경로우대사상
SJF(Shortest Job First)
SRT(Shortest Remain Time)
은 실행시간이 짧은것들을 먼저 올리기 때문에 실행 시간이 길어지는 것들은 기아 현상이 발생할 수 있음
→ 기아 현상 예방을 위해 대기 시간이 길어진 것들에 힘을 실어주는 방식이 HRN
HRN = (대기시간 + 실행시간) / 실행시간
프로세스 스케쥴링
비선점 스케줄링 | 선점 스케줄링 |
FCFS | SRT |
SJF | RR |
HRN | MLQ(다단계 큐) |
기한부 | MFQ(다단계 피드백 큐) |
우선순위 |
비선점 스케줄링 → 먼저 처리되고 있는 프로세스가 있으면 기존 프로세를 빼낼 수 없음
- FCFS: 먼저 들어온거 먼저 처리함
- SJF: 실행시간이 짧은걸 먼저 실행함, SRT랑 비슷함
- HRN: 경로우대 사상 (대기시간 + 실행시간) / 실행시간
- 기한부: 기간을 정해 놓고 그 시간 내에 못하면 버림
- 우선순위: 우선순위를 줌
선점 스케줄링 → 운영체제가 강력한 제어권을 가짐, 급한 프로세스가 들어오면 기존 작업을 빼내고 급한거 먼저 수행 가능
- SRT(Shrotest Remain Time): 실행시간(=서비스 시간)이 짧은 것을 먼저 집어넣음
- RR(Round Robin): 타임 슬라이스를 할당하여 시간 만큼 돌림
- MLQ(다단계 큐): 여러 개의 큐를 두어 해당하는 큐에 프로세스를 배치, 상위 큐에 있는 프로세스가 모두 실행 되면 하위 큐에 있는 프로세스 실행, 중간에 상위 큐에 프로세스가 들어오면 상위 큐 갔다가 다시 내려옴
- MFQ(다단계 피드백 큐): 일정 시간 동안만 해당 큐에 남겨서 실행하고 그 시간 동안 수행을 완료하지 못하면 하위 큐로 넘겨버림. 마지막 큐는 RR
중요!
기아현상 발생 가능 스케줄링: SRT, MLQ, SJF, 우선순위
기아현상 방지를 위해 에이징 기법을 도입: MFQ, HRN
어떤 프로그램은 보조기억장치(HDD, SSD)에 저장되었다가 실행을 시키면 메모리(주기억장치, RAM)로 올라가게 됨
실행중인 프로그램은 프로세스 라고 부름.
프로세스 - 스레드(경량 프로세스)
프로세스는 코드, 데이터(전역변수, 정적변수), 힙(동적할당), 스택(지역변수)를 가짐
스레드는 각각의 스택 영역만 가짐
실행중인 프로세스는 CPU(프로세서)에 할당됨 이때 운영체제가 프로세스 스케줄링을 하게 됨
배치 프로그램: 한번에 모아서 처리(한번에 하나씩 처리하던 옛날 방식)
실시간 프로그램: 요청이 들어오면 그 시점에 처리
다중 프로그래밍: 여러개의 프로세스가 동시에 수행 됨, 실제로 동시에 수행되는 건 아니고 시분할 처리 혹은 다중 처리 시스템을 이용함 됨,
시분할은 여러개의 프로세스에 실행할 시간을 할당하는 것을 의미
다중 처리 시스템은 여러개의 처리기(프로세서)를 두는 것
12. 다음은 트랜잭션(Transcation)의 주요 특성 4가지이다. 빈칸 1 ~ 2에 알맞은 용어를 쓰시오.
( 1 ) : 트랜잭션의 가장 기본적인 특성으로, 트랜잭션 내의 연산은 반드시 모두 수행되어야 하며 그렇지 못한 경우 모두 수행되지 않아야 함.
일관성 : 트랜젝션이 정상적으로 완료된 후 언제나 일관성 있는 데이터베이스 상태가 되어야 하며, 결과에 모순이 생겨서는 안 됨
( 2 ) : 하나의 트랜잭션이 수행 중에는 다른 트랜젝션이 접근할 수 없고 각각의 트랜잭션은 독립적이어야 함.
영속성 : 지속성이라고 하며, 트랜잭션이 성공적으로 완료된 후 결과는 지속적으로 유지되어야 함.
ACID
Atomicity 원자성, commit rollback 과 연관
Consisteny 일관성
Isolation 독립성
Durability 영속성
정답: 원자성 격리성(독립성)
병행 제어
locking, 2단계 locking, time stamp
병행 제어 하지 않았을 때 문제점: 갱신 분실, 비완료 의존성, 모순성, 연쇄 복귀, 등..
13. OSI 7 참조 모델 중 다음이 설명하는 계층을 쓰시오.
전기적, 기계적, 기능적인 특성을 이용해서 통신 케이블로 데이터를 전송
통신 단위는 비트이며 이것은 1과 0으로 나타내어지는, 즉 전기적으로 On, Off 상태이다.
데이터를 전달할 뿐, 데이터가 무엇인지 어떤 에러가 있는지 신경쓰지 않는다.
응표세전네데물
응용 계층: 프로그램
표현 계층: 암호화, 압축
세션 계층: 연결 설정, 연결 유지
------------------------------------------------------ 위에 3 계층에서 데이터(D)가 만들어짐, PDU: 전송 단위, 아래부터 정말 중요
전송 계층: 양 종단 간의 신뢰성 있는 정보 전달Header/Data -> Segment, 로드 밸런싱 가능(L4 장비), TCP(연결 확립, 신뢰성)/UDP(빠른 전송)
네트워크 계층: 비연결성, 비신뢰성, 빨리빨리 보내는 역할, Header/Segment → Packet, 라우터(L3 스위치), IP
데이터링크 계층: 인접한 노드간의 신뢰성 있는 데이터 전달 Header/Packet → Frame, 스위치(L2 스위치, 똘똘함), 브릿지
물리 계층: 비트로 바꿔서 전송, NIC, 허브, 리피터(증폭기)
데이터링크 계층 + 물리 계층 = LAN
정답: 물리 계층
14. 릴리즈 노트 작성 항목 중 문서 이름(릴리스 노트 이름), 제품 이름, 버전 번호, 릴리즈 날짜, 참고 날짜, 노트 버전 등을 기술하는 작성 항목은 무엇인지 쓰시오.
릴리즈 노트: 소프트웨어를 배포할 때 수정사항을 작성한 문서
정답: Header
15. 데이터 마이닝(Data mining)의 개념을 간략히 서술하시오
데이터 웨어하우스: 데이터 마트를 모아서 관리하는 큰 덩어리
데이터 마트: 작은 덩어리
데이터 마이닝: 데이터 웨어하우스에서 의미있는 데이터 찾기
정답: 수많은 데이터에서 가치있는 유용한 정보를 찾아내는 것
16. 1990년 R.Rivert가 MD4를 일방향 해시 함수로 개선한 알고리즘으로, 임의의 길이의 값을 입력받아서 128 비트 길이의 해시값을 출력하는 알고리즘은 무엇인지 쓰시오.
정답: MD5
암호화 알고리즘(대칭키 알고리즘 VS 비대칭키 알고리즘)
대칭키 알고리즘: 암호화 키와 복호화 키가 같다 → 키 분배의 문제 발생, 많은 양을 암호화 시킬 수 있음, 속도가 빠름, key의 길이가 짧음
- DES
- AES
- ARIA
- SEED
- IDEA
- LEA
- JKIJACK
비대칭키(공개키) 알고리즘: 많은 양을 암호화 시키지 못함, 속도가 느림, key의 길이가 길다
- 소인수 분해: RSA, Rabin
- 이산 대수: Diffie-Hellman, DSA, ELGamal
- 타원 곡선+이산대수: ECC
- 해시 알고리즘(단방향 알고리즘, 복호화 불가능, 암호, 무결성 검증에 사용): SHA, MD5, HAS-160
역상 저항성: 암호문으로 평문을 알 수 없어야 함
제2 역상 저항성: 다른 평문으로 같은 암호문이 나올 수도 있는데 이를 서로가 몰라야함
충돌 저항성: 제2 역상 저항성과 비슷함, 암호문에 대한 정보를 아무것도 모른다는 차이점
해시 알고리즘의 취약점
레인보우 테이블: 해커들이 평문과 암호문에 대한 정보를 가지고있음, 방어전략 - 솔팅: 뒤에 회사만의 추가 평문을 넣음
무차별 대입 공격: ㅈㄴ게 대입함, 방어전략 - 키 스트레칭
17. LOC 기법에 의하여 예측된 총 라인 수가 30,000라인일 경우 개발에 투입될 프로그래머 수가 5명이고, 프로그래머들의 평균 생산성이 월당 300라인일 때, 개발에 소요되는 기간을 구하는 계산식과 기간(개월)을 구하여 쓰시오.
정답: 30000 / (5 * 300) = 20
일정 산정 - WBS 작성 - P/C 작성, 임계경로 구하기(가장 긴 시간이 임계경로) - 간트 차트 작성
비용 산정
- 상향식: LOC
- 하향식: 전문가 기법, 델파이
- 수학적 기법: COCOMO(라인 수 기반), PUTNAM(레일리 노든 곡선), FUCTION POINT(외부~),
18. 다음은 C언어로 작성된 프로그램이다. 이를 실행한 결과를 쓰시오.
#include <stdio.h>
int main() {
int a[] = {95, 75, 85, 10, 50);
int i, j, temp;
int n = sizeof(a) / sizeof(int); // 20 / 4
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]); // 10 50 75 85 95
}
}
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; // t는 지워지지만 t 배열의 주소를 return으로 넘기므로 배열은 지워지지 않고 메인의 a에 저장된다
}
public static void main(String[] agrs) {
int[] a = makeArray(4);
for(int i = 0; i < a.length; i++) // a.length = 4
System.out.print(a[i]+" "); // 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); // -8
// break 가 없으므로 해당 case로 간 다음 아래쪽으로 쭉 흐른다 default 포함
// break가 없는 경우 case 3, case 1 이런식으로 내림차순으로 나와도 무조건 아래쪽으로 흐름
'정보처리기사' 카테고리의 다른 글
[정보처리기사] 2020년 3회 실기 기출문제 풀이 (0) | 2024.10.15 |
---|---|
[정보처리기사] 2020년 2회 실기 기출문제 풀이 (0) | 2024.10.13 |
[정보처리기사] C언어 특강 60강 이후 정리(printf 출력순서, ++ -- 연속, fork) (0) | 2024.10.10 |
[정보처리기사] C언어 특강 58~60강 정리(중복 재귀함수) (0) | 2024.10.10 |
[정보처리기사] C언어 특강 53~57강 정리(재귀함수) (0) | 2024.10.09 |