응집도 (Cohesion) — 7종 · 약함 → 강함
모듈 내부 요소들이 얼마나 밀접하게 연관되어 있는가. 높을수록 좋은 설계 (결합도와 반대).
| 순위 |
종류 |
핵심 특징 |
| 1 (가장 나쁨) |
우연적 (Coincidental) |
관련 없는 기능들이 우연히 한 모듈에 모임 |
| 2 |
논리적 (Logical) |
비슷한 성격의 작업을 묶음, 매개변수로 동작 선택 |
| 3 |
시간적 (Temporal) |
같은 시점에 실행되어야 하는 기능들 (예: 초기화 루틴) |
| 4 |
절차적 (Procedural) |
정해진 순서대로 수행되는 기능들 (제어 흐름 공유) |
| 5 |
통신적 (Communication) |
동일한 입출력 자료를 사용하는 기능들 |
| 6 |
순차적 (Sequential) |
한 기능의 출력이 다음 기능의 입력 |
| 7 (가장 좋음) |
기능적 (Functional) |
모든 요소가 단일 목적 수행 |
암기: "우논시절통순기" — 우(연) 논(리) 시(간) 절(차) 통(신) 순(차) 기(능). 결합도 "내공외제스자"와 짝.
디자인 패턴 (GoF) — 23개
생성 (Creational) · 5개
| 패턴 |
핵심 |
| Singleton |
인스턴스 하나만 보장, 전역 접근 |
| Factory Method |
객체 생성을 서브클래스에 위임 |
| Abstract Factory |
관련 객체군을 인터페이스로 생성 |
| Builder |
복잡한 객체를 단계적으로 조립 |
| Prototype |
기존 객체를 복제(clone) 해서 생성 |
구조 (Structural) · 7개
| 패턴 |
핵심 |
| Adapter |
호환되지 않는 인터페이스를 변환 |
| Bridge |
추상과 구현을 분리해 독립적 변경 |
| Composite |
객체를 트리 구조로 구성, 부분-전체 동일 처리 |
| Decorator |
객체에 기능을 동적 추가 (상속 대안) |
| Facade |
복잡한 서브시스템에 단순화된 창구 제공 |
| Flyweight |
공유를 통해 다수의 작은 객체 효율적 사용 |
| Proxy |
객체 접근을 대리(권한·지연·원격) |
행위 (Behavioral) · 11개
| 패턴 |
핵심 |
| Chain of Responsibility |
요청을 여러 객체가 순차 처리 |
| Command |
요청을 객체로 캡슐화 (Undo/Redo 가능) |
| Interpreter |
언어/문법의 해석기 정의 |
| Iterator |
컬렉션 내부 노출 없이 순차 접근 |
| Mediator |
객체 간 상호작용을 중재자가 캡슐화 |
| Memento |
객체 상태를 저장/복원 (Undo) |
| Observer |
상태 변화 시 구독자에게 통지 (Pub/Sub) |
| State |
상태 변화에 따라 행동 변경 |
| Strategy |
알고리즘을 교체 가능한 객체로 캡슐화 |
| Template Method |
알고리즘 골격을 정의, 단계는 서브클래스 |
| Visitor |
구조를 바꾸지 않고 새 연산 추가 |
시험 단골: Singleton·Factory·Adapter·Observer·Strategy·Template Method.
소프트웨어 개발 방법론
| 모델 |
특징 |
| 폭포수 (Waterfall) |
순차적 진행, 단계 완료 후 다음 진행. 변경 어려움 |
| 프로토타입 |
견본품 제작 → 사용자 평가 → 개선. 요구사항 불명확 시 |
| 나선형 (Spiral) |
위험 분석 중심, 점진적 개발. 계획→위험분석→개발→평가 반복 |
| 반복적 (Iterative) |
점증적·반복적으로 개발 (RUP) |
| 애자일 (Agile) |
짧은 주기 반복, 변화 수용. 개인·소통·동작·협력 중시 |
| V-모델 |
폭포수 + 검증/확인 강조 (각 개발단계에 대응되는 테스트단계) |
애자일 4가지 가치 (Agile Manifesto)
- 프로세스/도구보다 개인과 상호작용
- 포괄적 문서보다 작동하는 SW
- 계약 협상보다 고객과의 협력
- 계획 준수보다 변화에 대응
Scrum 핵심 용어
- Product Backlog → Sprint Backlog → Sprint (2~4주) → Increment
- 회의: 일일 스크럼, 스프린트 계획, 스프린트 리뷰, 회고
- 역할: PO(Product Owner), SM(Scrum Master), 개발팀
객체지향 4대 특징 + SOLID 5원칙
객체지향 4특징 (캡상다추)
| 특징 |
설명 |
| 캡슐화 |
데이터+메서드 묶고 외부 은닉(Hiding) |
| 상속 |
부모 클래스의 속성·메서드 재사용 |
| 다형성 |
같은 메시지에 객체마다 다르게 반응 (Overriding) |
| 추상화 |
공통 속성을 추출해 단순화 |
SOLID 5원칙
| 원칙 |
이름 |
핵심 |
| S |
단일 책임 (Single Responsibility) |
클래스는 하나의 책임만 |
| O |
개방-폐쇄 (Open-Closed) |
확장 개방, 수정 폐쇄 |
| L |
리스코프 치환 (Liskov Substitution) |
자식이 부모를 대체 가능 |
| I |
인터페이스 분리 (Interface Segregation) |
사용 안 하는 인터페이스에 의존 금지 |
| D |
의존 역전 (Dependency Inversion) |
구체가 아닌 추상에 의존 |
OSI 7계층 + TCP/IP 4계층
| 계층 |
OSI |
TCP/IP |
PDU |
대표 프로토콜·장비 |
| 7 |
응용 (Application) |
응용 |
Data |
HTTP, FTP, SMTP, DNS, Telnet |
| 6 |
표현 (Presentation) |
응용 |
Data |
SSL/TLS, JPEG, ASCII, MIME |
| 5 |
세션 (Session) |
응용 |
Data |
NetBIOS, RPC |
| 4 |
전송 (Transport) |
전송 |
Segment |
TCP, UDP / 게이트웨이 |
| 3 |
네트워크 (Network) |
인터넷 |
Packet |
IP, ICMP, ARP / 라우터 |
| 2 |
데이터 링크 |
네트워크 액세스 |
Frame |
Ethernet, PPP / 브리지·스위치 |
| 1 |
물리 (Physical) |
네트워크 액세스 |
Bit |
RS-232 / 리피터·허브 |
암기: "물데네전세표응" (1→7).
라우팅 프로토콜
| 분류 |
프로토콜 |
알고리즘 |
특징 |
| IGP (내부) |
RIP |
거리 벡터 (홉 수) |
최대 15홉, UDP 520, 소규모 |
| IGP (내부) |
OSPF |
링크 상태 (Dijkstra) |
대규모, 빠른 수렴, 영역(Area) 분할 |
| EGP (외부) |
BGP |
경로 벡터 |
AS 간 라우팅, 인터넷 백본 |
DB 정규화 (Normalization)
| 단계 |
조건 |
제거 대상 |
| 1NF |
모든 속성이 원자값(Atomic) |
다중값·반복 그룹 |
| 2NF |
1NF + 부분 함수 종속 제거 (기본키 일부에만 종속 X) |
부분 함수 종속 |
| 3NF |
2NF + 이행 함수 종속 제거 (A→B→C 형태 X) |
이행 종속 |
| BCNF |
3NF + 모든 결정자가 후보키 |
결정자가 후보키가 아닌 종속 |
| 4NF |
BCNF + 다치 종속 제거 |
다치 종속(MVD) |
| 5NF |
4NF + 조인 종속 제거 |
조인 종속 |
암기: "도부이결다조" — (원)도(부분)(이행)(결정자)(다치)(조인). 또는 "도(메인)·부·이·BC·다·조".
트랜잭션 ACID
| 특성 |
의미 |
| Atomicity (원자성) |
전부 반영되거나 전부 취소 (All or Nothing) |
| Consistency (일관성) |
트랜잭션 전후 DB 무결성 제약 유지 |
| Isolation (격리성) |
동시 실행 트랜잭션이 서로 영향 X |
| Durability (영속성) |
완료된 트랜잭션은 영구 반영 (장애에도 보존) |
DB 키 종류
| 키 |
설명 |
| 슈퍼키 |
유일성 만족, 최소성 X |
| 후보키 |
유일성 + 최소성 모두 만족 |
| 기본키 (PK) |
후보키 중 선택된 것, NULL 불가, 중복 불가 |
| 대체키 |
후보키 중 PK가 아닌 나머지 |
| 외래키 (FK) |
다른 릴레이션의 PK를 참조, NULL 가능 |
OS — 페이지 교체 알고리즘
| 알고리즘 |
풀어쓰기 |
교체 대상 |
| OPT |
Optimal |
앞으로 가장 오래 안 쓸 페이지 (이론) |
| FIFO |
First In First Out |
가장 먼저 들어온 페이지 |
| LRU |
Least Recently Used |
가장 오래전 사용된 페이지 |
| LFU |
Least Frequently Used |
사용 횟수가 가장 적은 페이지 |
| NUR |
Not Used Recently |
최근 미사용 (참조·변경 비트 사용) |
| SCR |
Second Chance |
FIFO + 참조비트 검사 |
Belady's Anomaly: 프레임 수 증가 시 페이지 부재가 오히려 증가하는 현상 — FIFO에서 발생.
프로세스 스케줄링
| 알고리즘 |
선점/비선점 |
기준 |
| FCFS |
비선점 |
도착 순서 |
| SJF |
비선점 |
실행시간 짧은 순 (기아 발생 가능) |
| SRT |
선점 |
SJF의 선점형, 남은 실행시간 짧은 순 |
| Priority |
선점/비선점 |
우선순위 (기아 → 에이징(Aging) 으로 해결) |
| RR |
선점 |
타임 퀀텀(Time Quantum)으로 순환 |
| HRN |
비선점 |
우선순위 = (대기시간 + 서비스시간) / 서비스시간 |
| MLQ/MLFQ |
선점 |
다단계 큐 / 피드백 큐 |
교착상태 (Deadlock)
4가지 발생 조건 (모두 충족 시 발생):
- 상호배제 (Mutual Exclusion) — 자원을 한 번에 한 프로세스만
- 점유와 대기 (Hold and Wait) — 자원 보유 + 다른 자원 대기
- 비선점 (Non-preemption) — 강제 회수 불가
- 환형 대기 (Circular Wait) — 순환적 대기 사슬
처리 방법 4가지: 예방(Prevention) · 회피(Avoidance, 은행원 알고리즘) · 탐지(Detection) · 회복(Recovery).
테스트 기법 (블랙박스 vs 화이트박스)
| 구분 |
블랙박스 (명세 기반) |
화이트박스 (구조 기반) |
| 관점 |
기능·요구사항 |
내부 코드 흐름 |
| 시점 |
주로 인수·시스템 단계 |
주로 단위 단계 |
| 대표 기법 |
동등 분할, 경계값 분석, 원인-결과 그래프, 오류 추측, 비교 검사 |
문장/분기/조건/경로 커버리지, 기초 경로, 루프 |
테스트 커버리지 (강도 약 → 강)
문장 → 분기(결정) → 조건 → 분기-조건 → 다중 조건 → 변형 조건/결정(MC/DC)
McCabe 순환 복잡도 = E − N + 2
(E: 간선 수, N: 노드 수). 10 이하 권장.
테스트 오라클 (Oracle)
- 참 오라클: 모든 입력에 대한 기대값 제공
- 샘플링 오라클: 일부 입력에만 기대값 제공
- 휴리스틱 오라클: 샘플링 + 나머지는 추정
- 일관성 검사 오라클: 변경 전후 결과 일치 확인
빈출 보너스 한 줄 정리
- CMMI 5단계: 초기 → 관리 → 정의 → 정량적 관리 → 최적화
- 요구공학 절차: 도출 → 분석 → 명세 → 확인(검증)
- COCOMO: 조직형(Organic) < 반분리형(Semi-detached) < 임베디드형(Embedded), LOC 기반
- CASE 도구 분류: 상위(분석·설계) / 하위(코드·테스트) / 통합 CASE
- 형상관리 절차: 형상식별 → 형상통제 → 형상감사 → 형상기록(상태보고)
- 빌드 도구: Ant(XML) → Maven(XML, 의존성 중앙) → Gradle(Groovy/Kotlin DSL)
- DB 회복 기법: 즉시 갱신, 지연 갱신, 검사점(Checkpoint), 그림자 페이징(Shadow Paging)