시스템의 정적인 구조를 표현합니다.
| 다이어그램 | 핵심 내용 |
|---|---|
| Class Diagram | 클래스, 속성, 메서드, 관계 |
| Object Diagram | 특정 시점의 객체 인스턴스 |
| Component Diagram | 소프트웨어 컴포넌트 구성 및 의존성 |
| Deployment Diagram | 하드웨어/서버에 소프트웨어 배치 구조 |
| Package Diagram | 패키지(모듈) 간 관계와 계층 |
| Composite Structure Diagram | 클래스 내부의 세부 구조 |
| Profile Diagram | UML 확장을 위한 메타모델 정의 |
시스템의 동적인 흐름과 상호작용을 표현합니다.
| 다이어그램 | 핵심 내용 |
|---|---|
| Use Case Diagram | 사용자(액터)와 시스템 기능 간 관계 |
| Activity Diagram | 작업 흐름, 분기, 병렬 처리 |
| State Diagram (State Machine) | 단일 객체의 상태 변화와 전이 |
| Sequence Diagram | 객체 간 메시지 교환 순서 (시간 축) |
| Communication Diagram | 객체 간 상호작용 (구조 중심) |
| Timing Diagram | 시간에 따른 상태/조건 변화 |
| Interaction Overview Diagram | 여러 상호작용 다이어그램의 흐름 요약 |
데이터 흐름도는 시스템 내에서 데이터가 어떻게 흐르고 처리되는지를 시각적으로 표현하는 구조적 분석 도구입니다.
DFD의 구성 요소는 정확히 4가지입니다.
| 구성 요소 | 영문 | 표기 기호 | 설명 |
|---|---|---|---|
| 프로세스 | Process | 원 (○) | 데이터를 변환·처리하는 기능 |
| 데이터 흐름 | Data Flow | 화살표 (→) | 데이터가 이동하는 경로 |
| 데이터 저장소 | Data Store | 평행선 (=) | 데이터를 저장하는 공간 (파일, DB 등) |
| 단말 | Terminator / External Entity | 사각형 (□) | 시스템 외부의 입출력 주체 (사람, 조직 등) |
—
럼바우(Rumbaugh) 분석 기법 — OMT(Object Modeling Technique)
| 모델 | 핵심 질문 | 산출물 | 관점 |
|---|---|---|---|
| 객체 모델링 | 무엇이 있는가 | 객체 다이어그램 | 정적 구조 |
| 동적 모델링 | 어떻게 변하는가 | 상태 다이어그램 | 시간·상태 |
| 기능 모델링 | 무엇을 하는가 | DFD | 데이터 처리 |
—
정적 분석 도구
정적 분석이란 프로그램을 실제로 실행하지 않고 소스 코드 자체를 분석하여 오류, 보안 취약점, 코딩 규칙 위반 등을 찾아내는 기법입니다.
반대 개념인 동적 분석은 프로그램을 직접 실행하면서 분석합니다.
| 구분 | 정적 분석 | 동적 분석 |
|---|---|---|
| 실행 여부 | 실행 안 함 | 실행함 |
| 분석 시점 | 개발 중, 컴파일 전후 | 런타임 |
| 발견 대상 | 코드 결함, 보안 취약점, 규칙 위반 | 메모리 누수, 성능 병목, 런타임 오류 |
| 대표 도구 | pmd, cppcheck, SonarQube | Valgrind, JUnit |
| 도구 | 대상 언어 | 특징 |
|---|---|---|
| pmd | Java 등 | 코드 스타일, 중복 코드, 불필요한 코드 탐지 |
| cppcheck | C, C++ | 메모리 오류, 널 포인터, 버퍼 오버플로 탐지 |
| SonarQube | 다중 언어 | 코드 품질 종합 관리 플랫폼, 대시보드 제공 |
| FindBugs / SpotBugs | Java | 바이트코드 분석으로 버그 패턴 탐지 |
| Checkstyle | Java | 코딩 컨벤션 준수 여부 검사 |
시험에서는 pmd, cppcheck가 정적 분석 도구의 대표 예시로 자주 등장합니다.
"실행 없이 코드만 본다 = 정적" 으로 기억하세요.
정적 분석은 개발 초기에 결함을 발견할 수 있어 비용 효율이 높다는 점도 출제 포인트입니다.
전체 데이터에서 가장 작은(또는 큰) 값을 선택하여 앞에서부터 차례로 채워나가는 정렬 방식입니다.
배열: [5, 3, 8, 1, 4] 를 오름차순 정렬하는 예시
초기: [5, 3, 8, 1, 4]
1회전: 최솟값 1 선택 → 5와 교환
[1, 3, 8, 5, 4]
2회전: 나머지 중 최솟값 3 선택 → 제자리
[1, 3, 8, 5, 4]
3회전: 나머지 중 최솟값 4 선택 → 8과 교환
[1, 3, 4, 5, 8]
4회전: 나머지 중 최솟값 5 선택 → 제자리
[1, 3, 4, 5, 8] ← 정렬 완료
| 항목 | 내용 |
|---|---|
| 시간 복잡도 | 최선 / 평균 / 최악 모두 O(n²) |
| 공간 복잡도 | O(1) — 제자리 정렬 (추가 메모리 불필요) |
| 안정성 | 불안정(Unstable) 정렬 |
| 비교 횟수 | 항상 n(n-1)/2 번으로 고정 |
| 교환 횟수 | 최대 n-1번으로 버블 정렬보다 교환이 적음 |
| 정렬 | 방식 | 안정성 | 특징 |
|---|---|---|---|
| 선택 정렬 | 최솟값 선택 후 교환 | 불안정 | 교환 횟수 가장 적음 |
| 버블 정렬 | 인접 요소 비교·교환 | 안정 | 구현 가장 단순 |
| 삽입 정렬 | 적절한 위치에 삽입 | 안정 | 거의 정렬된 경우 빠름 |
| 유형 | 연결 방식 | 병목 | 확장성 | 특징 |
|---|---|---|---|---|
| Point-to-Point | 1:1 직접 연결 | 없음 | 낮음 | 미들웨어 없음 |
| Hub & Spoke | 중앙 허브 경유 | 있음 | 중간 | 단일 장애점 |
| Message Bus | 공유 버스 경유 | 적음 | 높음 | 분산 처리 |
| Hybrid | 혼합 | 최소화 | 높음 | 두 방식 결합 |
| 단계 | 대상 범위 | 주체 | 핵심 키워드 |
|---|---|---|---|
| 단위 테스트 | 개별 모듈 하나 | 개발자 | 모듈, 기능 정확성 |
| 통합 테스트 | 모듈 간 결합 | 개발자 | 인터페이스, 연동 |
| 시스템 테스트 | 전체 시스템 | 개발팀 | 요구사항 전체 검증 |
| 인수 테스트 | 전체 시스템 | 사용자/고객 | 요구사항 만족 여부 |
통합 테스트와 단위 테스트는 범위로 구분하세요. 모듈 하나면 단위, 여러 모듈 결합이면 통합입니다.
**스텁(Stub)과 드라이버(Driver)**는 통합 테스트에서 사용하는 도구로, 함께 출제되는 경우가 많습니다.
소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견된다는 법칙은?
Pareto
이 문제가 테스트하는 지식: 자료 구조의 종류와 특징
선형/비선형 구조의 분류, 그리고 스택·큐의 동작 방식과 활용처를 정확히 알고 있는지를 평가합니다.
핵심 개념: 자료 구조 분류
선형 구조 (Linear)
데이터가 일렬로 나열된 구조입니다.
| 자료 구조 | 특징 |
|---|---|
| 배열 (Array) | 인덱스로 접근, 크기 고정 |
| 연결 리스트 (Linked List) | 포인터로 연결, 크기 가변 |
| 스택 (Stack) | LIFO (Last In First Out) |
| 큐 (Queue) | FIFO (First In First Out) |
| 데크 (Deque) | 양쪽 끝에서 삽입/삭제 가능 |
비선형 구조 (Non-Linear)
데이터가 계층적 또는 망형으로 연결된 구조입니다.
| 자료 구조 | 특징 |
|---|---|
| 트리 (Tree) | 계층 구조, 부모-자식 관계 |
| 그래프 (Graph) | 노드와 간선, 순환 가능 |
스택과 큐 상세 비교
| 구분 | 스택 (Stack) | 큐 (Queue) |
|---|---|---|
| 처리 방식 | LIFO (후입선출) | FIFO (선입선출) |
| 삽입 | Push (top에 추가) | Enqueue (rear에 추가) |
| 삭제 | Pop (top에서 제거) | Dequeue (front에서 제거) |
| 구조 분류 | 선형 | 선형 |
| 활용 예 | 함수 호출, 인터럽트, 수식 계산, 되돌리기(Undo) | 프로세스 스케줄링, 프린터 대기열, BFS |
스택의 주요 활용처 (시험 자주 출제)
서브루틴(함수) 호출: 복귀 주소를 스택에 저장
인터럽트 처리: 현재 상태를 스택에 보관 후 복귀
수식 계산: 후위 표기법(Postfix) 계산에 활용
수식 표기법 변환: 중위 → 후위 변환 시 사용
되돌리기(Undo): 최근 작업을 역순으로 취소
학습 팁
"스택 = LIFO = 선형", "큐 = FIFO = 선형" 을 한 세트로 암기하세요.
트리와 그래프만 비선형입니다. 스택과 큐를 비선형으로 혼동하는 경우가 많으니 주의하세요.
스택의 활용처 4가지(서브루틴, 인터럽트, 수식 계산, 수식 표기법)는 통째로 암기해 두는 것이 좋습니다.
| 분류 | 명령어 |
|---|---|
| DDL | CREATE, ALTER, DROP, TRUNCATE |
| DML | SELECT, INSERT, UPDATE, DELETE |
| DCL | GRANT, REVOKE |
| TCL | COMMIT, ROLLBACK, SAVEPOINT |
DDL (Data Definition Language) — 데이터 정의어
구조(스키마)를 생성·변경·삭제합니다.
| 명령어 | 기능 |
|---|---|
| CREATE | 테이블, 뷰 등 객체 생성 |
| ALTER | 구조 변경 (컬럼 추가/수정) |
| DROP | 객체 완전 삭제 |
| TRUNCATE | 데이터만 전체 삭제 (구조 유지) |
AUTO COMMIT — 실행 즉시 반영, ROLLBACK 불가
DML (Data Manipulation Language) — 데이터 조작어
데이터를 조회·삽입·수정·삭제합니다.
| 명령어 | 기능 |
|---|---|
| SELECT | 데이터 조회 |
| INSERT | 데이터 삽입 |
| UPDATE | 데이터 수정 |
| DELETE | 행 단위 삭제 (구조 유지) |
COMMIT 전까지 ROLLBACK 가능
DCL (Data Control Language) — 데이터 제어어
권한을 부여하고 회수합니다.
| 명령어 | 기능 |
|---|---|
| GRANT | 권한 부여 (TO, WITH GRANT OPTION) |
| REVOKE | 권한 회수 (FROM, CASCADE) |
TCL (Transaction Control Language) — 트랜잭션 제어어
트랜잭션 상태를 제어합니다.
| 명령어 | 기능 |
|---|---|
| COMMIT | 변경사항 영구 확정 |
| ROLLBACK | 변경사항 취소·복귀 |
| SAVEPOINT | 중간 저장점 설정 |
핵심 암기 포인트
DDL → 구조 정의 → AUTO COMMIT (롤백 불가)
DML → 데이터 조작 → 트랜잭션 대상 (롤백 가능)
DCL → 권한 제어 → GRANT / REVOKE
TCL → 트랜잭션 제어 → COMMIT / ROLLBACK
E-R(Entity-Relationship) 다이어그램은 데이터베이스의 개념적 설계 단계에서 사용하며, 각 요소를 고유한 도형으로 표현합니다.
| 기호 | 도형 | 의미 |
|---|---|---|
| 사각형 (□) | 직사각형 | 개체 타입 (Entity Type) |
| 타원 (○) | 타원형 | 속성 (Attribute) |
| 마름모 (◇) | 다이아몬드 | 관계 타입 (Relationship Type) |
| 선 (—) | 실선 | 개체-속성 연결 / 개체-관계 연결 |
| 이중 타원 | 이중 타원형 | 다중값 속성 |
| 이중 사각형 | 이중 직사각형 | 약한 개체 타입 |
| 밑줄 타원 | 밑줄 있는 타원 | 기본키 속성 |
사각형 → 개체 (Entity)
타원 → 속성 (Attribute)
마름모 → 관계 (Relationship)
선 → 연결
이 문제의 핵심 혼동 포인트입니다.
| 구분 | 관계대수 | 관계해석 |
|---|---|---|
| 언어 유형 | 절차적 | 비절차적 |
| 표현 방식 | How (어떻게 구할 것인가) | What (무엇을 원하는가) |
| 기반 | 연산자 중심 | 논리식(술어 논리) 중심 |
| 종류 | - | 튜플 관계해석, 도메인 관계해석 |
| 연산 | 기호 | 설명 |
|---|---|---|
| 합집합 | ∪ | 두 릴레이션의 모든 튜플 |
| 교집합 | ∩ | 공통 튜플 |
| 차집합 | - | 한쪽에만 있는 튜플 |
| 카티션 프로덕트 | × | 두 릴레이션의 모든 조합 |
| 연산 | 기호 | 설명 |
|---|---|---|
| 셀렉트 | σ | 조건에 맞는 행 선택 |
| 프로젝트 | π | 원하는 열 선택 |
| 조인 | ⋈ | 공통 속성으로 두 릴레이션 결합 |
| 디비전 | ÷ | 특정 릴레이션을 포함하는 튜플 추출 |
| 구분 | IPv4 | IPv6 |
|---|---|---|
| 주소 길이 | 32비트 | 128비트 |
| 표현 방식 | 10진수, 점(.) 구분 | 16진수, 콜론(:) 구분 |
| 예시 | 192.168.0.1 | 2001:0db8:85a3::8a2e |
| 주소 개수 | 약 43억 개 | 사실상 무한 |
| 헤더 길이 | 가변 길이 | 40 octet 고정 |
| 주소 자동설정 | 지원 안 함 (DHCP 필요) | Auto Configuration 지원 |
| 보안 | IPSec 선택 적용 | IPSec 기본 내장 |
| QoS | 미흡 | 흐름 레이블로 향상 |
| 브로드캐스트 | 지원 | 미지원 |
| 멀티캐스트 | 선택적 지원 | 기본 지원 |
| 애니캐스트 | 미지원 | 기본 지원 |
| 체크섬 | 헤더에 포함 | 헤더에서 제거 |
| 방식 | IPv4 | IPv6 |
|---|---|---|
| 유니캐스트 (1:1) | ✔ | ✔ |
| 멀티캐스트 (1:다) | ✔ | ✔ |
| 브로드캐스트 (1:전체) | ✔ | ✘ |
| 애니캐스트 (1:가장 가까운 1) | ✘ | ✔ |
IPv6 헤더 = 40 octet 고정 (32 octet이 아님)
IPv6 = Auto Configuration 지원
IPv4 = 주소 자동설정 미지원, 수동 또는 DHCP 사용
IPv4 클래스(A/B/C/D/E) = 네트워크/호스트 비트 수가 클래스마다 다름
| 클래스 | 시작 주소 | 끝 주소 | 네트워크/호스트 비트 |
|---|---|---|---|
| A | 0.0.0.0 | 127.255.255.255 | 8 / 24 |
| B | 128.0.0.0 | 191.255.255.255 | 16 / 16 |
| C | 192.0.0.0 | 223.255.255.255 | 24 / 8 |
| D | 224.0.0.0 | 239.255.255.255 | 멀티캐스트용 |
| E | 240.0.0.0 | 255.255.255.255 | 연구/예약용 |
A클래스: 0 ~ 127
B클래스: 128 ~ 191
C클래스: 192 ~ 223
D클래스: 224 ~ 239
E클래스: 240 ~ 255
| 순위 | 연산자 종류 | 대표 연산자 |
|---|---|---|
| 1 | 단항 연산자 | ++ -- ! ~ (type) sizeof |
| 2 | 산술 연산자 | * / % → + - |
| 3 | 시프트 연산자 | << >> |
| 4 | 관계 연산자 | < > <= >= → == != |
| 5 | 비트 연산자 | & → ^ → ` |
| 6 | 논리 연산자 | && → ` |
| 7 | 조건 연산자 | ? : |
| 8 | 대입 연산자 | = += -= 등 |
| 9 | 쉼표 연산자 | , |
송신 측과 수신 측의 데이터 처리 속도 차이로 인한 데이터 손실을 방지하기 위해 송신량을 조절하는 기법입니다.
| 상황 | 윈도우 크기 변화 |
|---|---|
| ACK 수신 (정상) | 증가 → 더 많은 패킷 전송 가능 |
| NAK 수신 (오류 발생) | 감소 → 전송량 줄임 |
| 타임아웃 발생 | 감소 → 혼잡 제어와 연계 |
| 신호 | 의미 | 송신 측 반응 |
|---|---|---|
| ACK (Acknowledgement) | 정상 수신 확인 | 윈도우 크기 유지 또는 증가 |
| NAK (Negative Acknowledgement) | 오류 수신 | 윈도우 크기 감소, 재전송 |
프로세스가 실행될 때 일부 특정 페이지만 집중적으로 참조하는 경향을 말합니다. 캐시 메모리와 가상 메모리의 성능 이론적 근거가 됩니다.
| 구분 | 시간 구역성 (Temporal) | 공간 구역성 (Spatial) |
|---|---|---|
| 의미 | 최근에 참조한 데이터를 가까운 미래에 다시 참조 | 참조한 데이터 근처의 데이터를 참조 |
| 핵심 키워드 | 같은 위치를 반복 참조 | 인접한 위치를 참조 |
| 대표 예시 | 루프, 서브루틴, 스택, 카운터 변수 | 배열 순회, 순차적 코드 실행 |
*(p1 + 2)는 결국 str1[2] (0,1,2)
모듈 간의 상호 의존 정도를 나타내며, 낮을수록 좋은 설계입니다.
| 순위 | 종류 | 핵심 특징 |
|---|---|---|
| 1 (가장 나쁨) | 내용 결합도 (Content) | 한 모듈이 다른 모듈의 내부 기능·내부 자료를 직접 참조 |
| 2 | 공통 결합도 (Common) | **두 모듈이 *전역 변수(공유 데이터)*를 함께 사용 |
| 3 | 외부 결합도 (External) | 외부에서 선언된 변수를 공유 |
| 4 | 제어 결합도 (Control) | ***제어 신호(플래그, 스위치)*를 파라미터로 전달하여 상대 모듈의 흐름을 제어 |
| 5 | 스탬프 결합도 (Stamp) | ***자료 구조(레코드, 구조체 전체)*를 파라미터로 전달 |
| 6 (가장 좋음) | 자료 결합도 (Data) | 필요한 데이터만 단순 파라미터로 전달 |
모듈 A가 모듈 B의 내부 변수나 코드를 직접 수정·참조
→ "남의 집 내부를 마음대로 들어가 건드리는 것"
모듈 A와 B가 같은 전역변수(global variable)를 공유
→ "공용 창고를 함께 쓰는 것"
모듈 A가 모듈 B에게 flag 값을 넘겨 B의 실행 흐름을 결정
→ "리모컨으로 상대방을 조종하는 것"
구조체나 배열 전체를 넘기지만 일부만 사용
→ "필요한 것 하나 때문에 서류 뭉치 전체를 건네는 것"
꼭 필요한 단순 값만 파라미터로 전달
→ "필요한 것만 딱 건네는 것" (가장 이상적)
"내공외제스자" 로 순서를 외우세요.
내용 → 공통 → 외부 → 제어 → 스탬프 → 자료
(나쁨 ←————————————————→ 좋음)
Standard Input/Output
| 함수 | 기능 |
|---|---|
| printf() | 형식 지정 출력 |
| scanf() | 형식 지정 입력 |
| gets() / puts() | 문자열 입출력 |
| getchar() / putchar() | 문자 단위 입출력 |
| fopen() / fclose() | 파일 열기/닫기 |
| fread() / fwrite() | 파일 읽기/쓰기 |
Standard Library
| 함수 | 기능 |
|---|---|
| malloc() | 동적 메모리 할당 |
| calloc() | 동적 할당 + 0으로 초기화 |
| realloc() | 할당된 메모리 크기 변경 |
| free() | 동적 메모리 해제 |
| atoi() | 문자열 → 정수 변환 |
| atof() | 문자열 → 실수 변환 |
| rand() | 난수 생성 |
| srand() | 난수 시드 설정 |
| exit() | 프로그램 종료 |
| abs() | 정수 절댓값 |
| 함수 | 기능 |
|---|---|
| strlen() | 문자열 길이 반환 |
| strcpy() | 문자열 복사 |
| strcat() | 문자열 이어붙이기 |
| strcmp() | 문자열 비교 |
| strchr() | 문자 탐색 |
| strstr() | 부분 문자열 탐색 |
| memset() | 메모리 블록 초기화 |
| memcpy() | 메모리 블록 복사 |
| 함수 | 기능 |
|---|---|
| sqrt() | 제곱근 |
| pow() | 거듭제곱 |
| abs() / fabs() | 절댓값 (정수/실수) |
| ceil() | 올림 |
| floor() | 내림 |
| sin() / cos() / tan() | 삼각함수 |
| log() / log10() | 자연로그 / 상용로그 |
| 함수 | 기능 |
|---|---|
| isalpha() | 알파벳 여부 |
| isdigit() | 숫자 문자 여부 |
| isspace() | 공백 여부 |
| isupper() / islower() | 대/소문자 여부 |
| toupper() / tolower() | 대/소문자 변환 |
| 함수 | 기능 |
|---|---|
| time() | 현재 시간 반환 |
| clock() | CPU 실행 시간 측정 |
| difftime() | 두 시간의 차이 |
★★★ stdio.h, stdlib.h, string.h
★★ math.h, ctype.h
★ time.h
파일 디스크립터는 운영체제가 파일을 관리하기 위해 필요한 파일에 대한 정보를 담고 있는 제어 구조입니다.
주요 특징:
파일 디스크립터의 저장 위치는 시험에서 자주 출제되는 핵심 사항입니다.
| 상태 | 저장 위치 |
|---|---|
| 파일이 열리지 않은 상태 (평상시) | 보조기억장치 (디스크) |
| 파일이 열린(open) 상태 | 주기억장치 (메모리)로 이동 |
즉, 파일이 개방(open)되면 보조기억장치에 있던 파일 디스크립터가 주기억장치로 이동하여 운영체제가 빠르게 참조할 수 있게 됩니다.
선택지 ④의 방향성에 주목하세요.
이동 방향이 실제와 일치하는지, 반대인지를 정확히 확인하는 것이 이 문제의 핵심입니다.
개인키 암호화 = 대칭키 암호화
암호화와 복호화에 동일한 하나의 키를 사용하는 방식입니다.
| 항목 | 대칭키(개인키) 암호화 | 비대칭키(공개키) 암호화 |
|---|---|---|
| 키 구성 | 암호화 = 복호화 (같은 키) | 공개키(암호화) + 개인키(복호화) |
| 속도 | 빠름 | 느림 |
| 키 관리 | 어려움 (키 배송 문제) | 상대적으로 용이 |
| 대표 알고리즘 | DES, AES, ARIA, SEED, 3DES | RSA, ECC, Diffie-Hellman |
DES (Data Encryption Standard)
ARIA
SEED
RSA (Rivest–Shamir–Adleman)
이 문제는 선택지 4개 중 3개는 같은 범주, 1개는 다른 범주에 속하는 것을 찾는 유형입니다. 따라서 각 알고리즘이 어떤 종류인지 분류하는 것이 핵심입니다.
**임의의 길이 데이터를 *고정된 길이의 값(해시값)*으로 변환하는 단방향 함수입니다.
| 알고리즘 | 출력 비트 | 특징 |
|---|---|---|
| MD4 | 128비트 | Ron Rivest 개발, 보안 취약 |
| MD5 | 128비트 | MD4 개선판, 현재 충돌 취약점 발견됨 |
| SHA-1 | 160비트 | 미국 NIST 표준, 현재는 SHA-256 권장 |
데이터를 암호화하고 복호화할 수 있는 양방향 암호화 알고리즘입니다.
| 알고리즘 | 키 길이 | 특징 |
|---|---|---|
| AES | 128/192/256비트 | 미국 NIST 표준 대칭키 암호화, DES 대체 |
| 구분 | MD4 | MD5 | SHA-1 | AES |
|---|---|---|---|---|
| 종류 | 해시 | 해시 | 해시 | 대칭키 암호화 |
| 방향성 | 단방향 | 단방향 | 단방향 | 양방향 |
| 복호화 가능 여부 | 불가 | 불가 | 불가 | 가능 |
DoS는 서비스 거부 공격으로, 시스템/네트워크 자원을 고갈시켜 정상 사용자가 서비스를 이용하지 못하게 만드는 공격입니다. 직접 데이터를 훔치는 게 아니라 "서비스 불능 상태"를 만드는 것이 목적입니다.
브로드캐스트 vs 멀티캐스트
| 공격명 | 핵심 메커니즘 |
|---|---|
| DDoS | 여러 좀비 PC(봇넷)를 동원한 분산 DoS 공격 |
| Teardrop | 조각(Fragment) 패킷의 offset 값을 조작해 재조합 오류 유발 |
| UDP Flood | 대량의 UDP 패킷으로 대역폭 소진 |
| HTTP GET Flood | 정상처럼 보이는 HTTP 요청을 대량 전송 (애플리케이션 계층 공격) |
| Slowloris | HTTP 연결을 아주 느리게 유지해 서버 연결 자원 고갈 |