디자인 패턴
디자인 패턴 = 객체지향 설계시 발생하는 문제에 대한 해결책을 패턴 형태로 만든 것
GoF가 처음으로 구체화함.
생구행 3가지
생 = 추빌팩프싱 -> 프로토타입
구 = 퍼플어브데프컴 -> 어뎁터, 프록시
행 = 나머지들 -> 옵저버, 이터레이터 등
결합도
자스제외공내
내부 결합도가 젤 쎔
응집도
기순교절시논우
기능적 응집도가 젤 쎔
테스트 커버리지
구결조 조변다
여기서 결정문 == A && B이고 조건문은 A, B 각각임.
즉, if, else로 처리할텐데 if 안에있는게 결정문, 각각이 조건문
1. 구문 커버리지 -> if 안쪽, 밖 문장중 하나라도 실행되면 ok -> 어떤 조건이라도 ㄱㅊ은듯
2. 결정 커버리지 -> 결정문(A&&B)가 T, F 한번씩 해야함.
-> T T / F T -> a&&b가 T, F 모두 됐음. -> 이거 여러가지 답이 가능한거임.
3. 조건 커버리지 -> 조건(a, b 각각)들이 한번씩은 true, false를 가져야함.
-> T F / F T -> a, b 모두 1번씩은 T F 경험함. -> 이게 좀 중요한듯
4. 조건/결정 커버리지 -> 2, 3번 모두 만족해야함
2개로는 만족이 안되니까 경우의 수가 3개로 가야함.
즉, A&&B가 T, F 1번씩 경험해야하고
A, B도 한번씩은 T, F 해야함.
T T T
F T F
F F T
이렇게 3개로 하면 되겟네요?
5. 변경조건 커버리지 -> A, B 각각이 결정 결과에 영향 주는거 보여줘야함. 즉, 기준 케이스 1개가 있고 조건들을 각각 바꾸면서 독립적으로 영향주는지 테스트하는거임.
기본적으로 T T가 제일 무난한 기준
T T -> T
F T -> F (A 바꾸니까 답 바뀜)
T F -> F (B 바꾸니까 답 바뀜)
-> 3개 케이스로 커버 가능
6. 다중 조건 커버리지 -> 가능한 모든 경우 테스트
T T
F F
T F
F T
패킷 교환 시스템
1. 연결 지향형(연결형)
- 가상회선 (tcp)
2. 비연결형
- 데이터그램 (udp)
패킷 교환 -> 패킷이 어떤 경로를 어떻게 가는지
-> 항상 일정한 경로 = 연결형 = 가상회선
-> 시시각각 변하는(최적) 경로 = 비연결형 = 데이터그램
라우팅 알고리즘
패킷은 라우터를 통해서 전달, 전달, ... 돼서 목적지에 도달함.
이때, 어떤 라우터에 전달할지를 어떻게 결정?
1. RIP
최소 홉 수에 있는 라우터에 전달
홉바이 홉 전달
최대 15홉까지 가능. -> 그 이후는 전달 불가로 판단
벨만포드
거리벡터
2. OSPF (open shortest path first)
홉수가 아닌 cost를 통해서 경로 판별
다익스트라 사용
링크 상태 -> 각 라우터가 다익스트라를 통해서 최단경로를 유지하는 것. -> 미리 해놓기 떄문에 빠르지만 용량, 메모리 부담이 커짐
정규화 과정
- 1 정규화 (원자값으로 만들기)
원자값 아닌거 분해
- 2 정규화 (부분 함수 종속 분해)
(복합키) -> 기본키에 의해서 결정되는 정보들을 다른 테이블로 분해
ex) 학번, 학년, 과목, 성적
학번, 과목이 복합키 -> 학년은 학번으로만 결정됨. -> 분할 필요
학번, 과목, 성적 / 학번, 학점으로 나누기
핵심 = 복합키에 완전 함수 종속
- 3 정규화 (이행적 함수 종속 분해)
이행적 함수 종속 x -> pk가 아닌 컬럼으로 결정되는게 있는 경우
핵심 = pk가 아닌 키에 종속되는게 있으면 제 3정규형 필요
- BCNF (결정자를 모두 후보키로 만들기)
결정자가 모두 후보키 -> not pk가 pk를 결정하는 것을 없애야함.
UML 클래스 관계
is a (일반화) == 상속 관계 -> 사자는 동물이다.
has a (연관) == association 관계 -> 집합 형태 -> 사람은 물, 피, 뼈가 있다.
uses (의존) -> 의존 관계 -> 컴퓨터는 본체를 사용한다.

차는 타이어, 바퀴, 엔진을 가진다. O -> 연관
차는 타이어이다. X
차는 타이어를 사용한다. X
버스, 택시, 승용차는 차를 가진다. X
버스, 택시, 승용차는 차이다. O -> 일반화
버스는 차를 사용한다. x
텔레비전은 리모콘을 가진다. X
텔레비전은 리모콘이다. X
텔레비전은 리모콘을 사용한다. O -> 의존
파이썬
슬라이싱
llist[::2] -> llist[start : end : step]
start부터 end-1까지 step 만큼 늘리면서 진행
if) llist[::-2]같이 step이 음수이면 역순으로 진행 -> 가장 오른쪽 idx부터 idx-2, idx-4, ... 0보다 작을때까지.
if) llist[1:0:-2]이면 arr[1], arr[-1] -> arr[-1]이면 음수이고 slice에서는 제일 뒤 idx가 아닌 없는 걸로 치기 때문에 arr[1]
if) llist[0:1:-1]이면 0번째 idx부터 줄이면서 하는데 end가 1이라서 아무것도 출력 안됨
자바
동적, 정적 바인딩
public class Main{
public static void main(String[] args){
Base a = new Derivate();
Derivate b = new Derivate();
System.out.print(a.getX() + a.x + b.getX() + b.x);
}
}
class Base{
int x = 3;
int getX(){
return x * 2;
}
}
class Derivate extends Base{
int x = 7;
int getX(){
return x * 3;
}
}
Base a = new Derivate()
1. Base(부모) 객체이지만 생성은 Derivate(자식)으로 생성 -> 이때 부모 생성자 호출되고 자식생성자 호출됨. 현재는 생성자 비어있음.
2. 정적 바인딩 -> 컴파일 시점에 결정되는 것 -> a.x는 Base 타입, b.x는 Derivate 타입 -> a.x는 3, b.x는 7
3. 동적 바인딩 -> 런타임 시점에 결정 -> 메서드 오버라이딩 -> a.getX, b.getX 모두 Derivate를 가리킴. -> x*3 == 7*3
os
페이지 교체 알고리즘
1. FIFO
들어온 순서대로 교체
-> FIFO와 LRU의 차이는 다시 사용된 페이지가 우선순위가 높냐의 차이
[1, 2, 3, 1, 4]
1
1 2
1 2 3
1 2 3 -> 그대로
2 3 4 -> 1이 최근에 사용됐지만 가장 먼저 빠짐. 하지만 LRU에서는 2가 빠짐
2. LRU
가장 오래된 페이지 제거
3. LFU
가장 사용 덜된 페이지 제거
주의) page fault는 페이지가 비어있을 때에도 1개씩 count 해줘야함.
CPU 스케줄링
- 비선점
하나 하던거 그대로 쭉 하는것
1. FCFS -> 먼저 들어온거 먼저 하는것 -> 대기큐 -> convoy effect 가능
2. SJF -> 짧은 작업 먼저 수행하는것 -> 어떤게 제일 짧은 작업인지 알아야함. -> 기아현상 가능
3. HRN(Highest Response-ratio Next)
-> 짧은 시간 + 대기를 길게한 것에 우선순위 주는 것
우선순위 계산 공식은 아래와 같음

-> 서비스 시간(cpu에 할당되어야 하는 시간)은 동일함. 대기 시간은 계속해서 길어짐.
즉, 대기시간이 길어질수록 응답할 확률(cpu가 처리할)이 높아짐.
주의) HRN은 비선점임
- 선점
작업을 다 끝내지 않고 다른걸 수행
1. RR -> 일정 시간(time quantum)마다 프로세스 교체
2. SRT -> 계속해서 현재 작업이랑 대기큐의 가장 짧은 작업이랑 비교해서 짧은 것부터 처리 -> 기아 가능
3. MLQ -> 여러 레벨의 큐를 놓고 우선순위에 맞게 처리 -> 우선순위 낮은 작업은 처리 안되는 기아현상
디비
디비 개념
튜플 = 행, row, record / 튜플의 수 = 카디널리티
속성 = 열, attribute, 디비를 구성하는 가장 작은 논리적 단위, 데이터 field / 속성의 수 = degree, 차수
도메인 = 하나의 attribute가 가질 수 있는 타입의 모음
무결성 제약조건(개참도)
1. 개체 무결성 -> pk 제약조건 == not null + 중복 x
2. 참조 무결성 -> 외래키 제약조건 -> 다른곳에 pk로 존재하는거 써야함
3. 도메인 무결성 -> 도메인 제약조건을 만족해야함
키들의 모음
1. 기본키(pk) -> 릴레이션에 1개만 존재 -> 많은 후보키 중에 1개
2. 후보키 -> 최소한의 열로 튜플을 구분할 수 있는 키들의 모음
3. 대체키 -> 후보키 - pk
4. 슈퍼키 -> 최소x -> 튜플 구분할 수 있는 키들의 모음
5. 외래키 -> 다른 릴레이션의 pk
순수 관계 연산자
Project
파이( π) = 해당 어트리뷰트만 select 하는것 -> 중복 제거 -> select와 다르게 col만 다 가져오는 것 -> 수직연산자
Select
시그마( σ) = 조건에 맞는 튜플을 select 하는 것 -> 수평연산자
Join
보타이( ⋈) = 릴레이션 합치는것
Division
÷ = 모든 조건 만족하는 튜플 select


일반 집합 연산자
- UNION (∪): 합집합, 중복 자동 제거
- INTERSECTION (∩): 교집합
- DIFFERENCE (-): 차집합
- CARTESIAN PRODUCT (×): 카티전 곱 -> 디그리(열) = 2개의 디그리 합 / 카디널리티(행) = a행 크기 * b행 크기
- UNION ALL -> 중복 제거 안한 합집합 -> 관계대수의 기본 연산은 아님
-> 주의할점은 저건 관계대수의 기본 연산이고 SQL에서는 저렇게 쓰면 안됨.
ex) 차집합 구하려고 DIFFERENCE를 하면 안된다는 의미
오류 검출기법 -> 커버리지 테스트
보안
oo웨어의 종류
4. 다음은 악성코드 관련된 문제이다. 아래 내용을 확인하여 보기에 골라 작성하시오.
사용자가 원치 않는 소프트웨어를 구매하도록 조작하기 위해 사회 공학을 사용하여 충격, 불안 또는 위협에 대한 인식을 유발하는 악성 소프트웨어의 한 형태이다.
‘겁을 주다’라는 영어 단어에서 유래한 것으로 공포를 이용하여 피해자를 속여 대가를 지불 하거나 특정 행동을 유도하는 랜섬웨어이다.
가짜 바이러스 경고나 시스템 문제를 표시하여 사용자가 돈을 지불하거나 특정 소프트웨어를 설치하도록 속이는 방식으로 작동한다.
보기
ㄱ. 컴포넌트 웨어 ㄴ. 유즈웨어 ㄷ. 셔블웨어 ㄹ. 스캐어 웨어 ㅁ. 안티 스파이 웨어 ㅂ. 네트웨어 ㅅ. 그룹웨어 ㅇ. 애드웨어
1. 컴포넌트 웨어 = 재사용가능한 sw 모듈
2. 셔블 웨어 = 품질 낮은 sw 대량 배포 -> 왜 이거임
3. 스캐어 웨어 = 충격(무서움)을 통해 특정 sw 구매하도록 유도
4. 안티 스파이 웨어 = 스파이웨어 탐지/제거
4-2. 스파이 웨어 = 사용자 동의 없이 개인정보 수집 sw (사용자 몰래 설치)
5. 네트웨어 = novell사의 os
6. 그룹웨어 = 협업 sw (메신저 등)
7. 애드웨어 = 광고 표시 sw -> 악성 가능
네트워크 취약점
- DOS 관련 공격
1. 스머핑
ICMP (ping, pong) 공격
수신자의 IP를 속여서 pong 브로드 캐스트 공격을 당하게함. -> 네트워크 마비
2. LAND 공격
수신자, 송신자의 IP를 공격자 IP로 바꿔서 패킷 받은 후에 보낼 때 자기 자신으로 보내게함 -> 에러 유도
3. Tear down
IP 패킷은 여러개로 쪼개져서 보내고 수신자가 이걸 합쳐서 확인
패킷 번호를 이상하게 처리해서 에러 유도
4. Ping of death
ICMP 패킷을 허용치보다 더 크게 보냄.(패킷은 쪼개져서 보내지기 때문에 가능)
나중에 패킷을 합칠 때 오버플로우 가능 -> 에러 유도
5. SYN Flooding
SYN을 엄청나게 많이 보내서 연결 상태를 지속해서 허용 가능한 요청을 줄여 네트워크 마비
-> ACK을 의도적으로 안보내서 연결 지속
- 공격 수법
1. 스푸핑
IP 위조 -> 송신자 속임
2. 파밍
DNS 스푸핑으로 다른 사이트로 리다이렉션
3. 버퍼 오버플로우
-> 방지 노력
스택 가드(버퍼 시작, 끝에 가드 값 추가)
스택 쉴드(스택에 실행 불가능한 마킹값 추가)
ASLR(메모리 주소를 무작위로 배치에 공격하기 어렵게 만듦)
- DDOS 관련 툴
Trinoo, TFN, Stacheldraht
- 악성코드 유형
1. worn
스스로 복제 -> 네트워크로 전파
2. virus
파일에 기생 -> 파일 실행시 악성 기능 수행
3. trojan
유용한 기능 인것처럼 행동 -> 실은 악의적인 파일
4. stuxnet
산업 제어 시스템 공격하는 고급 악성코드
이란의 핵시설 공격
- 블루투스 관련 보안
1. 블루버그 -> 블루투스로 스마트폰 원격 제어
2,. 블루스나프 -> 블루투스로 파일 훔치기
3. 블루프린팅 -> 블루투스 정보 스캔 -> 장치, 목록, 제조사 등 수집
4. 블루재킹 -> 블루투스로 다른 장치에 익명 메시지 전송
... 블루킵 -> 원격 실행가능한 취약점 -> 윈도우 공격 (블루투스 관련은 아님)
살라미 -> 1원씩 빼가는 것
킬 스위치 -> 분실한 기기의 데이터 원격 삭제
트러스트 존 -> 믿을 수 있는 영역
허니팟 -> 꿀통 -> 공격자가 공격하라고 일부러 만들어 놓는거