신청한게 엊그제 같은데 벌써 정보처리기사 실기 시험이 2주 남았다.

작년엔 코로나로 불참 + 싸피로 바빠서 공부도 별로 하지 못하고 응시료만 날렸는데 백수인 지금은 2주 전부터 미리미리(?) 준비를 해서 한 번에 통과하겠다는 각오다.

문제를 직접 올리는건 저작권에 걸릴까봐 문제에서 묻는 개념 키워드를 설명하는 식으로 작성하겠다.

 

 

 

1. XML

웹 관련 프로그래밍을 해본 사람이면 AJAX라던지, XMLrequest 라던지 여러모로 익숙한 친구이다.

XML은 EXtensible Markup Language의 앞글자를 따서 붙인 이름으로 HTML의 부족한 부분을 보완하기 위해 만든 마크업 언어이다. 

 

마크업 언어는 데이터를 표현하기 위해 사용하는 문법으로 (프로그래밍 언어가 아니다!) 익숙한 HTML도 마크업 언어의 하나이다.단순히 HTML로 표현된 정적인 웹페이지의 위주이던 초창기 인터넷 환경에서 여러 데이터가 오갈 필요가 생기게 되는데 HTML의 경우엔 서로 다른 사이트 간에 데이터의 의미를 정확히 전달하기가 어려웠다.

예를들어 내가 학생명부를 보내려고 <p> 이름:김철수 학번:1234 , 이름:박철수 학번:1111 </p> 이런 데이터를 보냈을때 상대 사이트에선 학생 데이터가 온다는건 알아도 저 정보를 파싱하기 위한 파서가 따로 필요하다. 

또 내가 실수로 데이터 순서를 바꾸어 보낸다던지 할 경우 데이터가 뒤섞일 우려가 있다.

 

XML의 경우엔

<학생명부>
   <학생데이터>
        <이름>김철수</이름>
        <학번>1234</학번>
   </학생데이터>
   <학생데이터>
        <이름>박철수</이름>
        <학번>5678</학번>
   </학생데이터>
</학생명부>

이런 형태로 깊이와 태그명을 사용해서 데이터를 표현할 수 있다. 

지금은 이런 XML도 복잡하다고 JSON을 많이 사용하는데... 나중에 마크업언어들을 따로 정리해야겠다.

 

 

 

2. JSON

호랑이도 제 말 하면 온다더니 곧바로 JSON의 개념을 묻는 문제가 나왔다.

JSON은 속성-값 으로 이루어진 포맷이다.

아까 말했던 AJAX (Asynchronous JavaScript and XML)는 이름부터 XML이 들어가 있지만 요즘은 XML대신 JSON을 사용해 데이터를 전달한다. 

JSON을 사용해 아까 XML로 나타냈던 데이터를 표현하면 이런 느낌이다.

{
	"학생명부" : [{"이름":김철수, "학번":1234}, {"이름":박철수, "학번":5678}]
}

XML이던 JSON이던 프로그래머가 작성하기 나름이지만 JSON이 상당히 간료해 보이는걸 알 수 있다.

 

 

 

3. 릴리즈노트

릴리즈 노트는 소프트웨어 제품과 함께 배포되는 문서들을 말하며, 제품이 개발 중이거나 테스트 상태일 때 추가되기도 한다. 고객이 이미 사용 중인 제품의 경우 릴리즈 노트는 업데이트가 출시될 때 고객에게 전달된다. (위키피디아 설명)

그렇다고 한다. 흔히 우리가 사용하는 프로그램을 업데이트 했을때

어쩌구게임 ver 2022.378831 패치내역

1. 비쥬얼 업데이트를 적용함.
2. 김철수 캐릭터의 밸런스를 조정함.
3. 특정 상황에서 채팅이 쳐지지 않던 버그를 수정함.

이런 창을 보게 되는데 그런걸 생각하면 될 것 같다. 

릴리즈노트는 표준형식이 없이 프로그램의 개발 회사나 팀에 따라 다양하게 작성되는데, 보편적인 구성 항목은 이렇다고 한다.

머릿말: 문서 이름(예: 릴리스 노트), 제품 이름, 릴리스 번호, 출시일, 노트 날짜, 노트 버전 등.
개요: 다른 공식 문서가 없을 때 제품과 변경사항에 대한 간략한 개요.
목적: 버그 픽스와 새로운 기능을 포함한 이 릴리스의 새로운 사항의 나열과 더불어 릴리스 노트의 목적에 대한 간략한 개요.
문제 요약: 릴리스의 버그나 개선사항에 대한 짧은 설명.
재현 단계: 버그 발생을 재현하기 위한 절차.
해결책: 버그 수정을 위한 수정/개선사항의 짧은 설명.
최종 사용자 영향: 응용 프로그램의 최종 사용자에게 필요한 조치. 이 변경사항으로 인해 다른 기능이 영향을 받는지의 여부가 포함되는 것이 좋다.
지원 영향: 소프트웨어 관리의 일일 프로세스에 필요한 변경사항.
참고: 소프트웨어나 하드웨어의 설치, 업그레이드, 제품 문서화에 관한 참고사항. (문서화 업데이트 포함)
면책: 회사와 표준 제품 관련 메시지 (예: 프리웨어, 불법 복제 금지 등)
연락처: 지원 연락처 정보.

 

 

 

4. 살충제 패러독스

애플리케이션 테스트의 기본 원리 중, 살충제 패러독스의 의미를 묻는 문제이다.

살충제 패러독스는 이름 처럼 같은 테스트를 반복해서 실행할 시 프로그램의 장애, 버그를 찾을 수 없다는 개념을 의미한다.

 

예를 들어 우리가 어떤 길찾기 프로그램을 만들었다고 하자.

프로그램이 잘 작동하는지를 확인하기 위해 회사에서 근처의 편의점을 가는 경로를 찾아봤더니 오류가 발생했다!

열심히 오류를 고치고 다시 테스트 했더니 완벽하게 동작한다.

그 후 프로그램이 몇번의 업데이트를 거치고 다시 테스트의 시간이 되었다.

예전에 했던 테스트를 똑같이 반복해 근처의 편의점을 가는 경로를 검색했더니 잘 나온다. 와! 

 

그럼 이 프로그램은 버그가 없는걸까? 

우리가 이전의 테스트(살충제)를 통해 확인한 오류를 고쳤기 때문에 해당 버그는 사라졌지만, 다른 곳에는 어떤 버그가 남아있을지 모른다.

수천명이 동시접속하면 서버가 터질 수도 있고, 편의점 대신 병원을 검색하거나 PC가 아니라 모바일 환경에서 접속하면 버그가 발생할 수도 있다.

 

이렇듯 같은 방법의 테스트를 반복하면 오류를 찾을 수 없다는게 살충제 패러독스의 의미이다.

 

 

 

5. 데이터 마이닝

요 10년 사이에 핫해진 빅데이터 관련 용어이다. 

데이터 마이닝이란 "많은 데이터에서 데이터간의 관계를 찾아내어 유용하고 가치있는 정보를 추출해 내고 이를 의사결정에 이용하는 과정" 이라고 말할 수 있을것 같다.

참고로 데이터 마이닝과 데이터 크롤링, 웹 크롤링이 조금 혼동되는데 보통 데이터 마이닝은 모여진 데이터에서 의미를 찾는 과정. 데이터 크롤링은 그 데이터를 모으는 과정이라고 생각하면 될 것 같다.

 

 

 

6. 프로토콜

Protocol

컴퓨터들 간의 원활한 통신을 위해 지키기로 약속한 규약. 프로토콜에는 신호 처리법, 오류처리, 암호, 인증, 주소 등을 포함한다. 통신을 원하는 두 개체간에 무엇을 어떻게 언제 통신할 것인지 약속해 둔 규약이다.

우리가 네트워크에서 배운 TCP/IP 나 HTTP도 프로토콜이다.

 

프로토콜을 구성하는 세가지 요소는 이렇다.

-구문(Syntax)

   데이터의 형식(아날로그 or 디지털), 부호화(Unicode, ASCII), 신호크기를 정하는 구문

-의미(Semantics)

   전송제어 (동기화, 전송정지 및 재개, 완료, 재전송, 등등의 신호를 정함), 오류수정(데이터 무결성, 패리티비트, CRC)

-시간(Timing) :

   신호의 지속시간, 신호의 순서 등을 정하여 타이밍을 이룸

 

 

 

7. 해시함수

해시함수의 종류와 설명을 정확히 알고 있는지를 묻는 문제인데, 개인적으로 정말 싫어하는 유형이다.

중요한 해시함수들의 설명은 이렇다.

SHA-1 160 비트 암호화
512비트입력 -> 160비트 출력
SHA-256, SHA-512로 대체되고 있음
전자서명
MD5 128비트 기반 암호화 해시함수
결과 값은 16개 문자열
MD4를 대체하기 위해 개발
무결성 검사
HAVAL MD5를 변형에서 만듬
128-256비트까지 다양한 크기가 가능
MD5 단점 보완
Tiger 64비트 CPU에 최적화 됨
32비트 CPU에서도 빠르게 동작함
64비트 CPU의 해시

 

 

8. 스케쥴링

운영체제 전공 수업때 배운 스케쥴링 문제이다.

비선점 스케쥴링
한 번 프로세스가 실행되면 끝날때까지 계속 작업이 이루어짐.

장점: 공정한처리, 시간예측이 쉬움
단점: 비효율이 발생
FCFS (FIFO)
First Come First Served
(First In First Out)
큐와 똑같은 선입선출 스케쥴링
먼저 들어온 프로세스가 먼저 실행된다.
SJF
Shortest Job First
실행시간이 짧은 프로세스부터 실행된다.
HRN (HRRN)
Highest Response-ratio Next
SJF를 보완하기 위한 스케쥴 방법.
대기시간을 이용해서 우선순위를 정함.
공식->(대기시간+실행시간)/실행시간
선점 스케쥴링
다른 프로세스가 실행중일때도 우선순위가 높으면 CPU를 빼앗을 수 있음.

장점: 우선순위 높은 작업을 빠르게처리
단점: 시간 배당을 위한 타이머, 선점으로 인한 오버헤드 발생

RR
Round Robin
FCFS처럼 먼저 들어온 순서대로 처리하지만, 일정 시간이 지나면 다음 프로세스를 실행.
시간간격이 클 수록 FCFS와 비슷해짐
SRT
Shortest Remaining Time First
일정 시간(Time quantum)을 정하고 그 시간만큼 프로세스가 실행될 때마다 남은 시간이 짧은 프로세스를 가져와 실행한다.
SJF에서 공정성을 조금 높인 알고리즘.
MLQ
Multilevel Queue
작업들을 여러 그룹으로 나누어 여러개의 큐로 실행.
각 큐별로 최적화된 다른 스케쥴링을 가진다.
MLFQ
Multilevel Feedback Queue
IO위주와 CPU위주인 프로세스를 구분하고 실행시간이 길어질수록 점점 높은 우선순위 큐로 이동.
마지막 단계에서는 RR방식으로 처리.

 

 

9. 데이터베이스 트랜잭션

트랜잭션 Tx, Transaction의 특성

원자성 (Atomicity) 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는것을 보장.
Commit, Rollback 명령어
일관성 (Consistency) 트랜잭션이 성공적으로 실행되면 DB 상태를 일관성 있게 유지하는 것.
격리성 (Isolation) 트랜잭션이 수행되는 동안 다른 트랜잭션의 작업이 끼어들지 않도록 보장.
트랜잭션 바깥에선 연산의 중간단계를 볼 수 없음.
지속성 (Durability) 성공적으로 실행된 트랜잭션을 영원히 반영.

 

 

 

10. 서비스 거부 공격

DoS (Denial of Service)

시스템이 정상적인 서비스를 할 수 없도록 하는 공격을 의미한다.

DDoS는 다수의 좀비 PC을 이용해 정상적인 요청을 막대하게 보내는 방식으로 공격하지만 DoS는 서비스의 취약점을 노리고 보내는 공격이다.

 

Ping of Death Attack Ping을 이용해서 아주 크게 만든 패킷을 전송하면 네트워크에서 분할된 모든 패킷을 공격 목표가 처리하느라 부하가 발생
Land Attack 출발지와 목적지가 같은 패킷으로 공격 목표가 자기 자신에게 응답을 하게 해 부하를 유발
Smurf Attack 출발지를 공격 대상으로 위조한 패킷을 광범위하게 뿌려 다수의 응답을 받게 만들어 부하 유발
Teardrop Attack 하나의 IP패킷이 분할된 단편의 offset값이 중첩되도록 조작해서 이를 재조합 해야 되는 공격대상 시스템의 부하를 유발
TCP Flooding TCP 3-Way-Handshake에서 공격목표가 SYN을 받으면 ACK을 보내고 이 작업을 큐에 담아 응답을 기다리는데 SYN을 보내고 ACK은 보내지 않는 방식으로 큐를 채워 부하를 유발

해결방법 : 큐의 크기를 늘린다, 쿠키를 사용해 같은 SYN을 무시, 응답을 기다리는 시간을 제한함 (Timeout) 등
728x90

+ Recent posts