본문 바로가기
Certificate/정보처리기사

[정보처리기사] 2020년 1회차 실기

by HJ0216 2023. 8. 25.

정보처리기사 실기

1. 반정규화

DB 정규화 이후, 성능 향상을 위해 의도적으로 정규화 기법에 위배되어 데이터를 중복하여 저장하는 방법

데이터 모델링 3단계

  1. 개념
    • ERD 생성
  2. 논리
    • 정규화
    • Transaction Interface 설계
  3. 물리
    • 성능 향상(인덱스, 파티션, 반정규화 등)

정규화

  • 데이터의 중복을 방지하고, 무결성을 보장하기 위한 DB 설계 방법
  • 삽입 이상이나 갱신 이상 등 다양한 이상 현상(정보를 정확하게 검색하거나 조작할 수 없는 상태)을 제거할 수 있음

 

2. Markup Language

XML

Markup Language

HTML: 태그가 정해져 있어 데이터 전송이 어려움
→ SGML: 사용이 어려움
→ XML: 확장형 마크업 언어, 기본 태그 및 커스터마이징한 태그 사용 가능

인터페이스 전송 데이터

  • JSON(JavaScript Object Notation)
    • {Key: Value} 형태
  • XML(eXtensible Markup Language)
    • 웹에서 구조화한 문서를 표현하고 전송하도록 설계한 마크업 언어
  • CSV(Comma Separated Values)
    • 몇 가지 필드를 쉼표로 구분한 텍스트 데이터
  • YAML
    • 사람이 쉽게 읽을 수 있는 데이터 직렬화 양식

 

3. 살충제 패러독스(Pesticide Paradox)

동일한 테스트 케이스로 동일한 절차를 반복 수행하면 새로운 결함을 찾을 수 없다.

SW 테스트 방법

  • 결함 집중(파레토 법칙)
    • 대다수의 결함은 소수의 특정 모듈에 집중되는 경향이 있다.
  • 살충제 패러독스
    • 동일한 테스트 케이스를 반복적으로 수행하는 경우 더 이상 새로운 결함을 찾아낼 수 없다.
  • 오류-부재의 궤변
    • 거의 모든 결함을 확인 후 제거하였다고 해도 사용자의 요구 또는 비즈니스 목적을 충족시키지 못하는 경우 품질이 높다고 할 수 없다.

 

4. 결합도(Coupling), 응집도(Cohesion)

모듈의 독립성을 판단하는 두 가지 지표로, 결합도(Coupling)는 모듈과 모듈간의 상호 의존 정도, 응집도(Cohesion)는 모듈 내부의 기능적인 집중 정도이다.

결합도(Coupling)

: 모듈과 모듈간의 상호 의존 정도

  1. 자료(Data): 파라미터로 값만을 전달하는 경우
  2. 스탬프(Stamp): 파라미터로 배열이나 오브젝트, 스트럭쳐 등의 객체가 전달되는 경우
  3. 제어: 파라미터로 값뿐만 아니라 제어 요소도 전달되는 경우
  4. 외부(External): 어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조하는 경우
  5. 공통(Common): 공유되는 공통 데이터 영역(전역변수)을 여러 모듈이 사용하는 경우
  6. 내용(Content): 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정하는 경우
    • 내용 결합도가 높을 경우, 스파게티 코드가 될 수 있음
  • Spaghetti Code: 소스 코드가 복잡하게 얽힌 경우
  • Alien Code: 아주 오래되거나 참고문서가 없어 유지보수가 어려운 경우
  • Legacy Code: 더 이상 쓰기 힘들고 난해한 경우

응집도(Cohesion)

: 모듈 내부의 기능적인 집중 정도

  1. 우연적(Coincidental): 모듈 내부의 각 구성요소들이 연관이 없을 경우
  2. 논리적(Logical): 유사한 성격을 갖는 요소들이 한 모듈에서 처리
  3. 시간적(Temporal): 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리
  4. 절차적(Procedural): 모듈 안의 구성요소들이 그 기능을 순차적으로 수행
  5. 통신적(Communicational): 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우
  6. 순차적(Sequential): 모듈 내에서 한 활동으로 부터 나온 출력값을 다른 활동이 사용할 경우
  7. 기능적(Functional): 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우

 

5. Fan-in / Fan-out

Fan-in: 나를 누구가가 호출하는 것
Fan-out: 내가 누군가를 호출하는 것

 

6. JSON

  • JavaScript 객체 문법으로 구조화된 데이터를 표현하기 위해 사용
  • 최근 XML을 대체해서 데이터 전송 등에 많이 사용됨
  • 데이터 형식: {Key: Value}

 

7. 성능 측정 지표

  • 처리량(Throughput): 일정 시간 내에 애플리케이션이 처리하는 일의 양
  • 응답 시간(Response Time): 애플리케이션에 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
  • 경과 시간(Turn Around Time): 애플리케이션에 요청을 전달한 시간부터 처리 완료될 때까지 걸린 시간

 

8. DISTINCT

  • SELECT DEPT FROM STUDENT; // 200
  • SELECT DISTINCT DEPT FROM STUDENT; // 3
  • SELECT COUNT(DISTINCT DEPT) FROM STUDENT WHERE DEPT='건축과'; // 1

SELECT문 작성 순서

(SELECT) (FROM) (WHERE) (GROUP BY) (HAVING) (ORDER BY)

 

9. 서비스 공격

Land Attack: Packet의 보내는 사람과 받는 사람을 동일하게 설정하여 자신의 서버를 계속 돌면서 서버의 자원을 고갈시켜 가용성을 파괴

정보보안의 3요소

  • 기밀성: 인가된 사용자만 접근
  • 무결성: 인가된 사용자만 인가된 방법으로 자원 수정
  • 가용성: 인가된 사용자는 언제든지 접근 가능

Dos(Denial of Service)

  • Ping Of Death: 정상 크기보다 큰 ICMP 패킷을 작은 조각(Fragment)으로 쪼개어 공격 대상이 조각화된 패킷을 처리하게 만드는 공격
  • Smurf: IP를 위조하여 ICMP 받을 대상에 과부하
  • Land Attack: Packet의 보내는 사람과 받는 사람을 동일하게 설정
  • Teardrop Attack: Fragment를 재조립 시 정확한 조립을 위해 오프셋이라는 값을 더하게 되는데 이 오프셋 값을 고의적으로 수정하여 시스템의 기능을 마비시켜 버리는 방법
  • SYN Flooding: 접속을 요청하는 SYN Packet을 대량으로 전송해 네트워크를 마비 시킴
  • UDP Flooding: 많은 수의 UDP packet을 전송하여 정상적인 서비스가 불가능하도록 하는 공격
  • Ping Flooding: 많은 ICMP Echo를 보내 이에 대한 응답을 하기 위해 자원을 모두 사용해버려 시스템이 정상적으로 동작하지 못하도록 하는 공격

DDoS (Distributed Denial of Service)

  • Phishing: 공격자가 사람들을 속여 사기에 빠지도록 고안된 악성 이메일을 보내는 것
  • Pharming: 피싱 기법 중 하나로, 정확한 웹 페이지 주소를 입력해도 가짜 웹 페이지에 접속하게 하여 개인정보를 훔치는 것
  • Sniffing: 네트워크 중간에서 남의 패킷 정보를 도청하는 것
  • Smishing: SMS와 Phishing의 결합어로 문자메시지를 이용한 피싱
  • Qshing: QR코드와 피싱(Phishing)의 합성어로 QR코드를 이용한 피싱
  • Ransomware: 컴퓨터 시스템을 감염시켜 접근을 제한하고 일종의 몸값을 요구하는 악성 소프트웨어
  • Key Logger: 컴퓨터 사용자의 키보드 움직임을 탐지해 ID, 패스워드 등 개인의 중요한 정보를 몰래 빼가는 해킹 공격
  • SQL Injection: 임의로 작성한 SQL 구문을 애플리케이션에 삽입하는 공격 방식
  • XSS(Cross Site Scripting): 악의적인 스크립트를 포함하여 정보 유출 등의 공격을 하는 것

기타

  • Rainbow Table Attack: 해시함수에 입력한 값과 해시값을 저장한 일종의 정답지를 갖고 일치하는 해시값을 통해 Key 값을 찾는 방식
    • Salt: 해커들의 레인보우 테이블이 키 값에 대한 해시값을 갖고 있으므로, 해당 값에 다른 값을 덧붙여서 다른 암호 값으로 저장되도록 추가하는 값

 

10. 통신 프로토콜의 기본요소 3가지

  • 구문(Syntax): 데이터의 구조나 형태를 정의
  • 타이밍(Tining)
  • 의미(Semantic)

 

11. HRN(Highest Response-ratio Next)

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

프로세스 스케쥴링

: 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에 할당하는 작업

  1. 비선점(Non-Preemptive): 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법
    • FCFS: First Come First Served,
    • SJF: Shortest Job First
      • 가장 적은 평균 대기 시간을 제공하는 최적 알고리즘
      • 단점: 기아 현상 발생 ▶ 대안: HRN
    • HRN: Hightest Response-ratio Next
      • 우선순위를 계산하여 그 숫자가 가장 높은 것부터 낮은 순으로 우선순위가 부여
      • 우선순위 = (대기 시간 + 실행 시간)/(실행 시간)
    • 우선순위
    • 기한부
  2. 선점(Preemptive): 하나의 프로세스가 CPU를 할당받아 실행하고 있을 때 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있는 스케줄링 기법
    • Round Robin: 프로세스는 할당된 시간 동안만 실행한 후 실행이 완료되지 않으면 다음 프로세스에 CPU를 넘겨주고 큐의 뒤로 배치
    • SRT: Shortest Remaining Time, SJF의 선점형 버전
    • MLQ(다단계 큐): 각 작업들을 서로 다른 묶음으로 분류할 수 있을 때 사용하는 알고리즘
      • 예: 쇼핑몰에서 쇼핑은 빠르게 백그라운드에서는 다운로드는 느리게
    • MFQ(다단계 피드백 큐)
      • 그룹화 된 큐마다 실행 시간을 달리 부여하여 시간 내 실행이 완료되지 않을 경우 프로세스에 CPU를 넘겨주고 큐의 뒤로 배치
      • 프로세스 성격에 따라 적응적 스케줄링이 가능

 

12. 트랜젝션 성질

  1. 원자성(Atomicity): Commit, Rollback
  2. 일관성(Consistency): 무결성
  3. 격리성(Isolation)
  4. 영속성(Durability)

 

13. OSI 7 Layer Model

  1. 물리 계층(Physical Layer)
    • 0과 1의 비트 정보를 회선에 보내기 위한 전기적 신호 변환
    • 단위: 비트
    • 주요 장비: 허브, 리피터 등
  2. 데이터 링크 계층(Data Link Layer)
    • 인접 노드 간 프레임 전송, 신뢰성 있는 정보 전달
    • 단위: 프레임
    • 주요 장비: 스위치, 브릿지 등
  3. 네트워크 계층(Network Layer)
    • 단말기 간 데이터 전송을 위한 최적화된 경로 제공
    • 단위: 패킷
    • 주요 장비: 라우터 등
    • 프로토콜
      • IP: 데이터 전달
      • ICMP: IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜
      • ARP: 논리 주소인 IP 주소 ▶ 실제적인 물리 주소인 MAC 주소로 변환
      • RARP: 실제적인 물리 주소인 MAC 주소 ▶ 논리 주소인 IP 주소로 변환
  4. 전송 계층(Transport Layer)
    • 단말기(종단) 간의 연결. 신뢰성 있는 정보 전달
    • 단위: 세그먼트(TCP)/데이터그램(UDP)
    • 프로토콜
      • TCP
        • FTP(20-데이터, 21-제어): 파일 전송
        • telnet(23): 원격지의 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜
        • HTTP(80): 웹 서비스
        • SMTP(25): 메일 송신
        • POP3(110): 메일 수신
      • UDP
        • DHCP: IP 자동 할당
        • SNMP: 네트워크 관리
        • DNS(53): 도메인 ▶ IP 주소로 변환
  5. 세션 계층(Session Layer)
    • 송수신 간의 논리적 연결
    • 단위: 데이터
  6. 표현 계층(Presentation Layer)
    • 데이터 형식 설정, 암/복호화
    • 단위: 데이터
  7. 응용 계층(Application Layer)
    • 일반적인 응용 서비스를 수행
    • 단위: 데이터

 

15. Data Mining

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

 

16. 암호화 알고리즘

MD5: MD4를 개선한 알고리즘

  • 단방향(Hash): MD ▶ SHA
  • 양방향
    • 대칭키
      • 빠른 속도
      • 많은 양
      • 키 개수: n*(n-1)/2
      • 종류
        • Stream: RC4
        • Block: DES ▶ AES, IDEA, SEED, ARIA
    • 비대칭키(공개키)
      • 느린 속도
      • 적은 양 ◀ 내용보다는 키를 암호화하는 방식으로 사용
      • 키 개수: 2*n
      • 종류
        • 소인수분해: RSA, Robin
        • 이산대수: DH, DSA, EIGmal
        • 타원곡선: ECC, ECDSA

 

18. C 언어

int a[] = {95, 75, 85, 100, 50};
int i, j, temp;
int n = sizeof(a) / sizeof(int);
// sizeof(a): 배열 a의 전체 크기를 바이트 단위로 반환
// sizeof(int): int 데이터 형식의 크기를 바이트 단위로 반환
// sizeof(a) =  20바이트(5개의 int 요소 * 각각 4바이트)
// sizeof(int) =  일반적으로 4바이트
// sizeof(a) / sizeof(int) = 5, 배열에 저장된 요소의 개수 반환

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;
        }
    }
}

// 버블 정렬
// 이전 요소가 다음 요소보다 더 크다면 다음 요소값을 이전 요소에 대입
// 가장 큰 값이 가장 마지막에 위치되므로 반복문이 진행될수록 큰 값은 더 이상 정렬하지 않아도 됨
// i = 0, j = (0, 1), (1, 2), (2, 3), (3, 4)
// i = 1, j = (0, 1), (1, 2), (2, 3)
// i = 2, j = (0, 1), (1, 2)
// i = 3, j = (0, 1)

for(i=0; i<5; i++){
    printf("%d", a[i]);
}

 

20. Java

Switch문은 break를 만나기 전까지 계속 실행됨

int i = 3, c = 1;

switch i {
    case 1: c++;
    case 2: c += 3;
    case 3: c = 0; // 0
    case 4: c += 3; // 3
    case 5: c -= 10; // -7
    default: c--; // -8
}

System.out.print(c); // -8

 

 

 

🔗 마크다운 파일

GitHub

 

📚 참고 자료

 

흥달쌤

흥달쌤과 함께하는 IT 채널입니다. 정보처리기사 자격증 관련된 강의 및 실무 노하우, 프로그래밍 언어(JAVA, C언어, Python) 특강 등이 진행됩니다. 앞으로 진행 예정인 동영상은 IT 관련된 이야기

www.youtube.com