포스트

2020 1회

Q. 살충제 패러독스의 개념에 관해서 서술하시오.

살충제 패러독스는 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지 못한다는 테스트의 원리이다.

  • 애플리케이션 테스트: 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
  • 시각에 따른 테스트
    • 검증(Verification)
      • 개발자 입장에서, 제품의 생산 과정을 테스트
      • 제품이 명세서대로 완성됐는지 테스트
    • 확인(Validation)
      • 사용자 입장에서 생산된 제품의 결과를 테스트
      • 개발된 소프트웨어가 고객의 요구사항을 만족하는가
    • 소프트웨어 테스트의 원리는 다음과 같다.
      • 테스팅은 결함이 존재함을 밝히는 것
        • 결합이 존재함을 밝히는 활동
        • 결함이 없다는 것을 증명할 수는 없음
        • 결함을 줄이는 활동
      • 완벽한 테스팅은 불가능
        • 무한 경로, 무한 입력값으로 인한 테스트 어려움
        • 애플리케이션 테스트는 소프트웨어의 잠재적 결함은 줄일 수 있지만 결함이 아예 없다고 증명할 수는 없다.
      • 개발 초기에 테스팅 시작
        • 조기 테스트 설계 시 장점: 테스트 결과를 단시간에 알 수 있고, 테스팅 기간 단축, 재작업을 줄여 개발 기간 단축 및 결함 예방
        • SW 개발 초기 체계적인 분석 및 설계가 수행되지 못하면 그 결과가 프로젝트 후반에 영향을 미치게되어 비용이 커진다는 요르돈의 법칙 적용(Snowball Effect, 눈덩이 법칙)
      • 결합 집중(Defect Clustering)
        • 적은 수의 모듈에서 대다수의 결함이 발견됨
        • 소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20%내에서 발견
        • 파레토 법칙(Pareto Principle)의 내용인 80대 20 법칙 적용
        • 애플리케이션 결함은 대부분 개발자의 특성이나 애플리케이션 기능적 특징 때문에 모듈에 집중되어 있다.
      • 파레토 법칙(Pareto Principle)
        • 애플리케이션의 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다.
      • 살충제 패러독스(Pesticide Paradox)
        • 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지 못함
        • 테스트 케이스의 정기적 리뷰와 개선 및 다른 시각에서의 접근이 필요
      • 테스팅은 정황(Context)에 의존적
        • 소프트웨어의 성격에 맞게 테스트 실시, 정황과 비지니스 도메인에 따라 테스트를 다르게 수행
        • 소프트웨어 특징, 테스트 환경, 테스터 역량 등 정황에 따라 테스트를 다르게 수행해야한다.
      • 오류-부재의 궤변
        • 사용자의 요구사항을 충족시켜주지 못한다면, 결함이 없다고 해도 품질이 높다고 볼 수 없음

Q. 데이터 마이닝의 개념에 관해서 서술하시오.

데이터 마이닝은 대규모로 저장된 데이터 안에서 체계적이고 자동적으로 통계적 규칙이나 패턴을 찾아내는 기술이다.

  • 많은 데이터 가운데 숨겨져 있는 유용한 상관관계를 발견하여, 미래에 실행 가능한 정보를 추출해 내고 의사 결정에 이용하는 과정을 말한다.
  • 대량의 데이터를 분석하여 데이터에 내재된 변수 사이의 상호 관계를 규명하여 일정한 패턴을 찾아내는 기법

Q. 프로토콜의 기본 요소 3가지를 쓰시오.

구문(Syntax), 의미(Semantic) , 순서(Timing)

  • 구문: 데이터의 형식이나 부호화 및 신호 레벨 등을 규정
  • 의미: 전송의 조작이나 오류 제어를 위한 제어 정보에 대한 규정
  • 순서: 통신 속도의 조정이나 순서 제어 등을 규정

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

XML(eXtensible Markup Language)

W3C(World wide Web Consortium)에서 개발되었고, 웹 브라우저 간 호환이 되지 않는 문제와 SGML (Standard Generalized Markup Language)의 복잡함을 해결하기 위해 개발된 다목적 마크업 언어이다.

  • XML은 송∙수신시스템 간 데이터 연계의 편의성을 위해서 전송되는 데이터 구조를 동일한 형태로 정의한다.
  • 인간과 기계가 모두 이해할 수 있는 텍스트 형태로 마크업 포맷을 정의하기 위한 메타언어이다.
  • 사용자가 직접 문서의 태그를 정의할 수 있으며, 다른 사용자가 정의한 태그를 사용할 수 있다.

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

JSON(JavaScript Object Notation)

  • JSON은 비동기 브라우저∙서버 통신(AJAX)을 위해 ‘속성-값 쌍’, ‘키-값 쌍’으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.
  • AJAX에서 많이 사용되고 XML을 대체하는 주요 데이터 포맷이다.
  • 언어 독립형 데이터 포맷으로 다양한 프로그래밍 언어에서 사용된다.
  • 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성하기에 용이하다.

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

(대기 시간 + 서비스 시간) ÷ 서비스 시간

  • HRN 스케줄링 기법은 SJF 스케줄링 기법의 약점인 긴 작업과 짧은 작업 사이의 불평등을 보완하기 위한 방법으로, 위의 우선순위 계산식은 시스템 응답시간이 커질수록 우선순위가 높아진다는 의미이다. 위의 HRN를 비롯하여, SJF와 FCFS, 우선순위, 기한부는 비선점형 프로세스 스케줄링 알고리즘의 유형은 다음과 같다.
    • 우선순위(Priority)
      • 미리 정의한 알고리즘대로 프로세스의 우선순위를 결정하는 방식
      • 프로세스별로 우선순위가 주어지고, 우선순위에 따라 CPU를 할당함 - 동일 순위는 FCFS
      • 설정, 자원 상황 등에 따른 우선순위 선정
      • 주요/긴급 프로세스에 대한 우선 처리
    • 기한부(Deadline)
      • 작업들이 명시된 시간이나 기한 내에 완료되도록 계획
      • 요청에 명시된 시간 내 처리 보장
    • FCFS(FIFO)
      • 프로세스가 대기 큐에 도착한 순서에 따라 CPU를 할당함
      • 도착한 순서대로 처리
    • SJF(Shortest Job First)
      • 프로세스가 도착하는 시점에 따라 그 당시 가장 작은 서비스 시간을 갖는 프로세스가 종료 시까지 자원 점유
      • 준비 큐 작업 중 가장 짧은 작업부터 수행, 평균 대기 시간 최소
      • CPU 요구시간이 긴 작업과 짧은 작업 간의 불평등이 심하여, CPU 요구 기간이 긴 프로세스는 기아 현상 발생
      • 기아 현상 발생 가능성
    • HRN(Highest Response Ratio Next)
      • 대기 중인 프로세스 중 현재 응답률(Response Ratio)이 가장 높은 것을 선택
      • SJF의 약점인 기아 현상을 보안한 기법으로 긴 작업과 짧은 작업 간의 불평등 완화
      • 기아 현상(starvation) 최소화 기법

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

원자성(Atomicity), 격리성 또는 독립성(Isolation)

  • 트랜잭션의 특성은 다음과 같다.[ACID]
    • 원자성(Atomicity): 트랜잭션의 연산은 데이터베이스에 모두 반영되도록 Commit되든지 아니면 전혀 반영되지 않도록 Rollback 되어야 함(ALL-OR-NOTHING 방식)
    • 일관성(Consistency): 트랜잭션이 그 실행을 성공적으로 완료하면, 언제나 일관성 있는 데이터베이스 상태로 유지해야 함
    • 독립성, 격리성(Isolation): 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우, 어느 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없음
    • 영속성, 지속성(Durability): 트랜잭션이 성공적으로 완료되었을 경우, 결과는 시스템이 고장나더라도 영구적으로 반영되어야 함

Q. 공격자가 패킷의 출발지 주소나 포트를 임의로 변경해 출발지와 목적지 주소(또는 포트)를 동일하게 함으로써 공격 대상 컴퓨터의 실행속도를 느리게 하거나 동작을 마비시켜 서비스 거부 상태에 빠지도록 하는 공격 방법으로 수신되는 패킷 중 출발지 주소와 목적지 주소가 동일한 패킷들을 차단함으로써 공격을 피할 수 있다.

랜드 어택(Land Attack)

  • 랜드어택은 출발지 IP와 목적지 IP를 같은 패킷 주소로 만들어 보냄으로써 수신자가 자기 자신에게 응답을 보내게 하여 시스템의 가용성을 침해하는 공격 기법이다.

  • 네트워크 공격 유형

    • 서비스 거부 공격 (DoS - Denial of Service)
      • 표적이 되는 서비스 자원을 고갈시킬 목적으로 다수의 공격자 또는 시스템에서 대량의 데이터를 한 곳의 서버에 집중적으로 전송함으로써 표적이 되는 서버의 정상적인 기능을 방해하는 공격 방법으로, DDoS와의 차이점은 Attacker가 직접 공격을 수행
    • 분산 서비스 거부 (DDoS -Distributed Denial of Service)
      • Attacker가 여러 대의 컴퓨터를 감염시켜 동시에 한 타깃 시스템을 집중적으로 공격하는 방법으로써, 짧은 시간 안에 서버를 마비시킬 수 있으며 Dos보다 치명적이고 Dos와의 차이점은 실질적인 Attacker가 아닌 Attacker가 감염시킨 좀비 PC가 공격을 수행한다는 점
    • Ping of Death
      • Ping 명령을 전송할 때 패킷의 크기를 인터넷 프로토콜 허용 범위 이상으로 전송하여 네트워크를 마비시키는 공격 방법
    • Smurfing
      • IP 또는 ICMP의 특성을 악용하여 엄청난 양의 데이터를 한 사이트에 집중적으로 보내냄으로써 네트워크 불능 상태로 만드는 공격(브로드캐스트)
    • SYN Flooding
      • 막대한 양의 TCP SYN 패킷을 대상 시스템으로 보내서 시스템을 **마비시키는 공격 방법
    • TearDrop
      • 데이터의 송.수신 과정에서 패킷의 크기가 여러 개로 분할되어 전송할때 분할 순서를 변경(Offset 값 변경)시켜 수신측에서 패킷을 재조립할 때 오류로 인한 과부하를 발생시킴으로써 시스템이 다운되도록 하는 공격 방법

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

MD5

  • RFC 1321로 지정되어 있으며, 로널드 라이베스트가 예전에 쓰이던 MD4를 대체하기 위해 고안한 128비트 (bit) 해시 암호화(일방향 암호화) 알고리즘이다.
  • 해시 암호화 알고리즘의 종류는 다음과 같다.
    • MD5(Message-Digest algorithm 5)
      • 1991년 R.rivest가 MD4를 개선한 암호화 알고리즘으로 프로그램이나 파일의 무결성 검사에 사용
      • 각각의 512bit짜리 입력 메시지 블록에 대해 차례로 동작하여 128bit의 해시값을 생성하는 해시 알고리즘
    • SHA-1(Secure Hash Algorithm)
      • 1993년 NSA에서 미 정부 표준으로 지정되었고, DSA(Digital Signature Agorithm)에서 사용
      • 160bit의 해시값을 생성하는 해시 알고리즘
    • SHA-256/384/512 (Secure Hash Algorithm)
      • SHA(Secure Hash Agorithm) 알고리즘의 한 종류로서 256bit의 해시값을 생성하는 해시 함수
      • AES(Advanced Encryption Standard, 미연방 표준 알고리즘)의 키 길이인 128, 192, 256bit에 대응하도록 출력 길이를 늘인 해시 알고리즘
    • HAS-160
      • 국내 표준 서명 알고리즘 KCDSA(Korean Cerificate-based Digital Signature Algorithm)를 위 하여 개발된 해시 함수
      • MD5와 SHA1의 장점을 취하여 개발된 해시 알고리즘

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

결합도, 응집도

  • 소프트웨어 개발에 있어 기능을 분할하고 추상화하여 성능을 향상시키고 유지보수를 효과적으로 하기 위한 공통 컴포넌트 구현 기법이다.
  • 인터페이스 모듈, 데이터베이스 접근 모듈 등 필요한 공통 모듈을 구현한다.
  • 모듈 간의 ( ① ) 은/는 줄이고, ( ② ) 은/는 높은 공통 모듈 구현을 권한하고 있다.

  • 결합도는 모듈 내부가 아닌 외부의 모듈과의 연관도 또는 모듈 간의 상호의존성으로서 낮을수록 좋다.
  • 응집도는 모듈의 독립성을 나타내는 개념이며, 모듈 내부 구성요소 간 연관 정도로서 높을수록 좋다.

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

50 75 85 95 100

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
void main(){
	int i, j;
	int temp;
	int a[5] = {75,95,85,100,50};

	for(i=0; i<4; 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]);
	}
}

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

0 1 2 3

1
2
3
4
5
6
7
8
9
public class Soojebi {
	public static void main(String[] args) {
		int i;
		int a[] = {0,1,2,3};
		for(i=0; i<4; i++) {
			System.out.print(a[i] + " ");
		}
	}
}

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

헤더

[보기]

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

  • 릴리즈 노트(Release Note)는 최종 사용자인 고객에게 개발 과정에서 정리된 제품의 릴리즈 정보를 제공하는 문서이다.
  • 릴리즈 노트 작성 항목은 다음과 같다.

    작성 헤더설명
    헤더문서 이름(릴리스 노트 이름), 제품 이름, 버전 번호, 릴리즈 날짜, 참고 날짜, 노트 버전 등의 정보
    개요제품 및 변경에 대한 간략한 전반적 개요
    목적릴리스 버전의 새로운 기능목록과 릴리스 노트의 목적에 대한 개요, 버그 수정 및 새로운 기능 기술
    이슈 요약버그의 간단한 설명 또는 릴리즈 추가 항목 요약
    재현 항목버그 발견에 따른 재현 단계 기술
    수정∙개선 내용수정∙개선의 간단한 설명 기술
    사용자 영향도버전 변경에 따른 최종 사용자 기준의 기능 및 응용 프로그램상의 영향도 기술
    소프트웨어 지원 영향도버전 변경에 따른 소프트웨어 지원 프로세스 및 영향도 기술
    노트소프트웨어 및 하드웨어 설치 항목, 제품, 문서를 포함한 업그레이드 항목 메모
    면책 조항회사 및 표준 제품과 관련된 메시지, 프리웨어 및 불법 복제 방지, 중복 등 참조에 대한 고지사항
    연락 정보사용자 지원 및 문의에 관련한 연락처 정보

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

프로젝트 개발 기간 : 20개월

계산식 : (30,000라인 / 300라인) / 5명 = 20개월

  • Man Month 모형은 한 사람이 1개월동안 할 수 있는 일의 양을 기준으로 프로젝트 비용을 산정하는 방식이다.
  • Man Month = LoC ÷ 프로그래머의 월간 생산성 = 30,000 ÷ 300 = 100개월
  • 프로젝트 기간 = Man Month ÷ 프로젝트 인력 = 100 ÷ 5 = 20개월

Q. 비정규화(De-Normalization)의 개념을 쓰시오.

비정규화는 정규화된 엔티티, 속성, 관계에 대해 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터모델링 기법이다.

  • 비정규화의 주요 기법은 다음과 같다.

    수행 방법설명
    테이블 병합1:1 관계, 1:M 관계를 통합하여 조인 횟수를 줄여 성능을 향상
    테이블 분할테이블을 수직 또는 수평으로 분할하는 것으로 파티셔닝이라고 함
    중복 테이블 추가대량의 데이터들에 대한 집계 함수(GROUP BY, SUM 등)를 사용하여 실시간 통계 정보를 계산하는 경우에 효과적인 수행을 위해 별도의 통계 테이블을 두거나 중복 테이블을 추가
    컬럼 중복화조인 성능 향상을 위한 중복 허용
    중복 관계 추가데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만, 이때 발생할 수 있는 성능 저하를 예방하기 위해 추가적 관계를 맺는 방법

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

물리 계층(Physical Layer)

  • 물리 계층은 OSI 7계층 중 1계층으로, 0과 1의 비트 정보를 회선에 보내기 위한 전기적 신호 변환으로서 전송단위는 비트(Bit)이다.
  • OSI 7계층의 특징은 다음과 같다. [아파서 티내다, 피나다][물데네전세표응]
    • 응용 계층(Application Layer)
      • 사용자와 네트워크 간 응용서비스 연결, 데이터 생성
      • 프로토콜: HTTP, FTP
      • 전송단위: 데이터(Data)
      • 장비: 호스트(PC 등)
    • 표현 계층(Presentation Layer)
      • 데이터 형식 결정, 부호 교환, 암∙복호화
      • 프로토콜: JPEG, MPEG
      • 전송단위: 데이터(Data)
      • 장비: 호스트(PC 등)
    • 세션 계층(Session Layer)
      • 송수신 간의 논리적인 연결
      • 연결 접속, 동기 제어
      • 프로토콜: RPC, NetBIOS
      • 전송단위: 데이터(Data)
      • 장비: 호스트(PC 등)
    • 전송 계층(Transport Layer)
      • 송수신 프로세스 간의 연결
      • 신뢰성 있는 통신 보장
      • 데이터 분할, 재조립, 흐름 제어, 오류 제어, 혼잡 제어
      • 프로토콜: TCP, UDP
      • 전송단위: 세그먼트(Segment)
      • 장비: L4 스위치
    • 네트워크 계층(Network Layer)
      • 단말기 간 데이터 전송을 위한 최적화된 경로 제공
      • 프로토콜: IP, ICMP
      • 전송단위: 패킷(Packet)
      • 장비: 라우터
    • 데이터링크 계층(Data Link Layer)
      • 인접 시스템 간 데이터 전송, 전송 오류 제어
      • 동기화, 오류 제어, 흐름 제어, 회선 제어
      • 프로토콜: HDLC, PPP
      • 전송단위: 프레임(Frame)
      • 장비: 브리지, 스위치
    • 물리 계층(Physical Layer)
      • 0과 1의 비트 정보를 회선에 보내기 위한 전기적 신호 변환
      • 프로토콜: RS-232C
      • 전송단위: 비트(Bit)
      • 장비: 허브, 리피터

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

처리량(Throughput), 응답 시간(Response Time), 경과 시간(Turnaround Time)

이미지

  • 애플리케이션 성능 측정 지표는 다음과 같다. [처응경자]
    • 처리량(Throughput, 스루풋)
      • 애플리케이션이 주어진 시간에 처리할 수 있는 트랜잭션의 수
      • 웹 애플리케이션의 경우 시간당 페이지 수로 표현
    • 응답 시간(Response Time)
      • 사용자의 입력이 끝난 후, 애플리케이션의 응답 출력이 개시될 때까지의 시간
      • 애플리케이션의 경우 메뉴 클릭 시 해당 메뉴가 나타나기까지 걸리는 시간
    • 경과 시간(Turnaround Time)
      • 애플리케이션에 사용자가 요구를 입력한 시점부터 트랜잭션을 처리 후 그 결과의 출력이 완료할 때까지 걸리는 시간
    • 자원 사용률(Resource Usage)
      • 애플리케이션이 트랜잭션을 처리하는 동안 사용하는 CPU 사용량, 메모리 사용량, 네트워크 사용량
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.