2020년 1회 실기 기출 복원 문제로 정리해보자.
출처 : https://ss-o.tistory.com/57?category=950890
소프트웨어 테스트 방법 중 하나로 동일한 테스트 케이스로 반복 실행하면 더 이상 결함을 발견할 수 없음을 의미한다. 그렇기에 주기적으로 테스트 케이스를 점검 해야한다.
<소프트웨어 테스트 원리>
- 테스팅 : 결함이 존재하는지 확인하는 것.
- 완벽한 테스트는 존재하지 않는다.
- 개발 초기에 테스팅을 시작해야한다.
- 결함의 집중 : 결함은 한 모듈에 집중 되어 있다.
- 정황에 의존적이다.
- 살충제 패러독스
- 오류-부재의 궤변 : 요구사항을 충족시키지 못하면 결함이 없다고 해도 품질이 높다고 할 수 없다.
많은 데이터 가운데 숨겨져 있는 유용한 상관관계를 발견해 미래에 실행 가능한 정보를 추출하여 의사 결정에 이용하는 것.
구문, 의미, 타이밍
XML
XML
- HTML의 단점을 보완한 인터넷 언어로, SGML의 복잡한 단점을 개선한 다목적 마크업 언어
- 웹 상에서 구조화된 문서를 상호교환 가능하도록 설계된 웹 표준 문서 포맷으로 메타 데이터 정의가 명확.
- 사용자가 새로운 태그와 속성을 작성 할 수 있는 확장성을 가짐.
- 유니코드를 사용해서 전 세계 모든 문자를 처리 가능하며 장치와 시스템에 독립적.
JSON
JSON
- 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 data 교환 형식.
- Ajax에서 서버와 통신하며 데이터 교환을 쉽게 하기 위해 데이터 전송형식으로 사용
- Key-Value 쌍으로 존재하며 '{}'형식으로 사용하며 ','로 나열한다.
- 테이블 내 모든 학과를 가져옴(전체 학생이 200명=튜플 200개)
- 중복을 제외한 학과를 가져옴(학과는 컴퓨터과, 인터넷과, 사무자동화과=튜플 3개)
- 중복을 제외한 학과가 컴퓨터명인 학생의 수(중복을 제외했기 때문에 컴퓨터과=튜플 1개)
(대기시간 + 서비스시간) / 서비스시간
<프로세스 스케줄링>
- 선점형 스케줄링 : 하나의 프로세스가 CPU에 할당 됐을 때, 우선 순위가 높은 프로세스가 현재 실행 중인 프로세스를 중단 시키고 CPU를 점유하는 방식
- 라운드로빈(RR) : CPU 할당 시간 설정 후 프로세스가 할당 시간 내 처리하지 못하면 리스트 큐의 맨 마지막으로 이동하고 다음 프로세스를 CPU에 할당
- SRT(Shortest Remaining Time First) : 가장 짧은 시간이 소요되는 프로세스를 먼저 처리하고 남은 시간이 짧은 프로세스가 리스트 큐에 생기면 CPU에 할당
- 다단계 큐 : 작업들을 분할, 여러개의 큐를 이용해 상위 단계 작업에 의한 하위 단계 작업 선점 및 독자적 스케줄링
- 다단계 피드백 큐 : FIFO + RR. 마지막 단계는 RR 방식으로 처리
- 비선점형 스케줄링 : 한 프로세스가 CPU를 할당 받으면 작업 후 CPU 반환시까지 다른 프로세스가 CPU에 할당 받지 못하는 방식
- 우선순위 : 미리 정의한 알고리즘대로 우선순위를 결정한 후, 우선순위에 따라 CPU할당
- 기한부 : 작업들을 명시된 시간이나 기한 내 완료 되도록 계획
- FCFS : 프로세스가 대기 큐 리스트에 도착한 순서에 따라 CPU할당
- SJF(Shortest Job First) : 가장 작은 서비스시간을 가진 프로세스를 우선순위로 두고 평균 대기시간을 최소화하는 방법. 기아현상 발생 가능.
- HRN(High Response Ratio Next) : 대기 중인 프로세스 중 현재 응답률이 가장 높은 것을 선택하는 방법. SJF의 약점인 기아현상을 보완하기 위한 방법
- 반환시간 / 대기시간
- 반환시간 : 종료시간 - 도착시간
- 대기시간 : 반환시간 - 서비스시간
원자성, 지속성, 독립성, 영속성
<트랜잭션>
DB 시스템에서 하나의 논리적인 기능을 수행하기 위한 작업의 기본 단위
- 원자성(Atomicity) : 트랜잭션 내의 연산은 반드시 모두 수행되어야 하며, 그렇지 못한 경우에는 모두 수행되지 않아야함.
- 일관성 (Consistency) : 트랜잭션이 정상적으로 완료된 후 언제나 일관성 있는 데이터베이스 상태가 되어야하며, 결과에 모순이 생겨서는 안됨.
- 독립성(Isolation) : 하나의 트랜잭션이 수행 중일 때, 다른 트랜잭션이 접근할 수 없고 각각의 트랜잭션은 독립적이어야함.
- 영속성(Durability) : 트랜잭션이 성공적으로 완료된 후 결과는 시스템이 고장나더라도 영구적으로 반영됨.
랜드 어택(LandAttack)
공격자가 패킷의 출발지 주소(Address)나 포트(Port)를 임의로 변경해 출발지와 목적지 주소를 동일하게 함으로써, 공격 대상 컴퓨터의 실행 속도를 느리게 하거나 동작을 마비시켜 서비스 거부 상태에 빠지도록 하는 공격 방법. 수신되는 패킷 중 출발지 주소와 목적지 주소가 동일한 패킷들을 차단함으로써 공격을 피할 수 있음.
MD5
128비트의 암호화 해시함수로 ,RFC1321로 지정되어 있으며 주로 프로그램이나 파일이 원본 그대로인지 확인하는 무결성 검사 등에 사용됨. 1991년 로널드 라이베스트(Ronald Rivest)가 예전에 쓰이던 MD4를 대체하기 위해 고안
<암호 알고리즘>
데이터의 무결성 및 기밀성 확보를 위해 정보를 쉽게 해독할 수 없는 형태로 변환하는 기법
- 대칭키 암호 방식
암호화, 복호화에 같은 암호키를 쓰는 알고리즘
- 블록 암호방식 : 긴 평문을 암호화 하기 위해 고정 길이의 블록을 암호화하는 블록 암호 알고리즘을 반복하는 방법
- DES : 56bit의 키를 이용. 64bit의 평문 블록을 64bit의 암호문 블록으로 만드는 미국표준(NIST) 암호화 알고리즘
- AES : 고급 암호화 표준이라고 불리며 DES를 대체한 암호 알고리즘. 암호화와 복호화 과정에서 동일한 키를 사용하는 알고리즘
- SEED : KISA, ETRI에서 개발하고 TTA에서 인증한 안정성, 신뢰성이 우수한 고속 블록 단위의 128bit 알고리즘
- 스트림 암호 방식 : 매우 긴 주기의 난수열을 발생시켜 평문과 더불어 암호문을 생성하는 방식
- RC4
- 비대칭키(공개키) 암호 방식 : 공개 키를 이용해 암호화하고 공개 키에 해당하는 개인 키를 이용해 복호화 하는 암호 방식. 공개키와 개인키가 존재하며 공개키는 누구나 알 수 있지만 개인키는 소유자만이 알아야함.
- 디피-헬만 : 암호키를 교환하는 방법으로서 두 사람이 암호화 되지 않은 통신망을 통해 공통의 비밀키를 공유할 수 있도록 하는 방식
- RSA : 로널드 라이베스트, 아디 사미르, 래너드 애들먼의 앞글자를 딴 비대칭키 암호화 알고리즘. 현재 가장 널리 쓰이는 방식이며 소인수 분해의 어려움을 이용한 방식.
- 해시 방식 : 단방향 알고리즘으로 임의의 데이터를 고정된 길이의 데이터로 매핑하는 함수. 연산에 걸리는 시간은 빠르지만 동일한 결과를 갖는 값이 생성되는 해시 충돌 문제 발생 가능.
- SHA : 미국 국가보안국(NSA)이 1993년에 처음으로 설계, 미국 국가 표준으로 지정된 해시 암호 알고리즘. 안전한 해시 암호화 알고리즘으로 SHA-224 SHA-256, SHA-384, SHA-512 등을 통칭해 SHA-2라고 함.
- MD5 : 128비트의 암호화 해시함수로 ,RFC1321로 지정되어 있으며 주로 프로그램이나 파일이 원본 그대로인지 확인하는 무결성 검사 등에 사용됨. 1991년 로널드 라이베스트(Ronald Rivest)가 예전에 쓰이던 MD4를 대체하기 위해 고안
결합도는 낮추고, 응집도는 높인다
50, 75, 85, 95, 100
#include <stdio.h>
#define SIZE 5
int main(void){
int arr[SIZE] = {75, 100, 95, 50, 85};
int i, j, tmp;
for(i=1; i<SIZE; i++){
for(j=0; j < SIZE-i; j++){
if(arr[j] > arr[j+1]){
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
for(i=0; i<SIZE; i++){
printf("%d", arr[i]);
}
}
0 1 2 3
public class Test{
static int nSize = 4;
public static void main(String[] args){
int[] arr = new int[nSize];
makeArray(arr);
for(int i=0; i<nSize; i++){
System.out.print(arr[i] + " ");
}
}
public static void makeArray(int[] arr){
for(int i=0; i<nSize; i++){
arr[i] = i;
}
}
}
-8
public class Test{
public static void main(String[] args){
int i = 3, k = 1;
switch(i){
case 0 :
case 1 :
case 2 :
case 3 : k=0;
case 4 : k+=3;
case 5 : k-=10;
default : k--;
}
System.out.println(k);
}
}
Header(헤더)
릴리즈 노트 작성 항목 중 문서이름(릴리즈 노트 이름), 제품 이름, 버전 번호, 릴리즈 날짜, 참고 날짜, 노트 버전 등을 기술하는 작성항목
식 : (30,000 / 300) / 6
답 : 20개월
물리계층
두 장비 간의 전송을 위한 연결이나 전달 등, 인터페이스의 기계적, 전기적, 절차적 특성을 정의해 비트를 물리적인 매체를 통해 전송하는 계층
OSI7계층 자세히 알아보기
처리량, 응답시간, 반환시간, 자원 사용율
시스템의 성능 향상, 개발 과정의 편의성, 운영의 단순화를 목적으로 수행되는 의도적인 정규화원칙 위배행위.
Fan-in : 상위로 가는 node
Fan-out : 하위로 가는 node