⚙️ 소프트웨어 설계 ⚙️
응집도
하나의 모듈이 얼마나 하나의 책임에 집중하는가
높을수록 좋고, 낮을수록 유지보수 어렵고 오류 가능성 큼
응집 정도 | 응집도 수준 | 설명 |
---|
높음 | 기능적 응집 | 단 하나의 기능 수행 |
| 순차적 응집 | 앞의 결과가 다음 기능의 입력 |
| 교환(통신)적 응집 | 동일한 데이터 사용 |
| 절차적 응집 | 일정 순서대로 수행되는 기능 모여있음 |
| 시간적 응집 | 시간적으로 비슷한 시점에 수행되는 기능 모여있음 |
| 논리적 응집 | 비슷한 범주의 기능 모여있음 |
낮음 | 우연적 응집 | 관련 없는 기능들이 모여있음 |
결합도
어떤 모듈이 다른 모듈에 얼마나 기대고 있는가
낮을수록 좋음
결합 정도 | 결합도 수준 | 설명 |
---|
낮음 | 자료 결합 | 필요한 데이터만 파라미터로 전달 |
| 스탬프 결합 | 자료구조(예: 구조체)를 통째로 전달 |
| 제어 결합 | 제어 플래그를 전달해서 분기 지시 |
| 외부 결합 | OS, 하드웨어 등 외부 환경에 의존 |
| 공통 결합 | 공유 변수(Global 변수 등) 사용 |
높음 | 내용 결합 | 다른 모듈의 내부를 직접 참조 |
디자인 패턴
1) 생성 패턴
객체를 만드는 방식에 어떤 유연성과 통제를 줄지
패턴명 | 설명 |
---|
싱글톤(Singleton) | 단 하나의 유일 객체 생성 |
팩토리 메서드(Factory Method) | 생성 로직을 서브클래스에 위임 |
추상 팩토리(Abstract Factory) | 관련된 객체 집합 생성 |
빌더(Builder) | 복잡한 객체를 단계별로 생성 |
2) 구조 패턴
여러 클래스/객체를 어떻게 조립해 더 큰 구조를 만들지
패턴명 | 설명 |
---|
어댑터(Adaptor) | 기존 클래스의 인터페이스 맞춰서 변환 |
프록시(Proxy) | 접근 제어를 위한 대리 객체 |
데코레이터(Decorator) | 기능을 동적으로 추가 |
3) 행위 패턴
객체들이 어떤 방식으로 데이터를 주고 받고 반응할지
패턴명 | 설명 |
---|
옵저버(Observer) | 상태 변경 시 알림 |
템플릿 메서드(Template Method) | 상위 클래스에서 알고리즘 구조 정의하고, 하위 클래스가 구현 |
전략(Strategy) | 알고리즘을 캡슐화하여 교체 가능 |
🧪 테스트 🧪
테스트 기법
기법 | 설명 |
---|
동등 분할 | 입력값을 그룹화하여 그룹 내 대표값만 테스트 |
경계값 분석 | 경계값이 오류 발생 확률이 높기 때문에 경계값 집중 테스트 |
결정 테이블 | 조건별로 테스트 결과를 표로 작성 |
상태 전이 | 상태 변화를 기반으로 테스트 |
원인-결과 그래프 | 논리 관계를 시각화하여 복잡한 조건을 표현 |
에러 측정 | 경험을 기반으로 오류 예측해서 테스트 |
테스트 커버리지
소프트웨어 테스트에 빠진곳은 없는지 판단하는 기준
종류 | 설명 |
---|
구문 커버리지(Statement) | 모든 코드를 최소 한번 이상 실행 |
분기 커버리지(Branch) | 조건문의 참/거짓 상황을 각각 실행 |
조건 커버리지(Condition) | 복합 조건의 모든 조건이 참/거짓 상황을 각각 실행 |
경로 커버리지(Path) | 가능한 모든 실행 경로를 테스트 |
다중 조건 커버리지(Multiple) | 모든 조건들의 조합 상황도 다 테스트 |
조건/결정 커버리지(Condition/Decision) | 조건 + 분기 둘 다 만족 |
테스트 모듈
모듈 | 설명 |
---|
스텁 | 하양식 테스트에서 하위 모듈 대체 |
드라이버 | 상향식 테스트에서 상위 모듈 대체 |
오류 제어
기법 | 설명 |
---|
패리티 비트 | 1비트, 오류 있는지만 확인 |
해밍 코드 | 1비트, 오류 검출하고 정정 |
순환 중복 검사(CRC) | 수학 다항식으로 오류 검출 |
전방 오류 정정(FEC) | 수신자가 자체 정정 |
후방 오류 정정(BEC) | 수신자가 재전송을 요청하여 정정 |
📡 통신 및 네트워크 📡
통신 방식
방식 | 정의 | 특징 | 예시 |
---|
회선 교환 | 통신 전에 물리적 경로 고정 | 전용선, 실시간, 비효율 | 전화망(PSTN) |
패킷 교환 - 데이터그램 | 매 전송 시 경로 결정 | 유연하지만 지연 가능 | 인터넷(IP) |
패킷 교환 - 가상 회선 | 처음만 경로 설정, 이후 고정 | 효율적, 빠름 | ATM, MPLS |
주요 네트워크 프로토콜
프로토콜 | 설명 |
---|
TCP | 연결 지향, 신뢰성 보장 (3-way handshake) |
UDP | 비연결, 빠름, 신뢰성 낮음 |
IP | 주소 지정, 비연결형 |
ICMP | 오류 메시지 전달 (ping) |
ARP | IP를 MAC으로 변환 |
RARP | MAC을 IP로 변환 |
라우팅 프로토콜
프로토콜 | 분류 | 방식 | 특징 | 사용 용도 |
---|
RIP (Routing Information Protocol) | 내부망 | Distance Vector | 최대 홉 15개 제한, 최소한의 홉을 지나도록 | 소규모 네트워크 |
OSPF (Open Shortest Path First) | 내부망 | Link State | 홉 수 제한 없음, 빠름, 최소한의 경로 비용으로 지나도록 | 기업 내부망 |
BGP (Border Gateway Protocol) | 외부망 | Path Vector | 자율 시스템(AS) 간 라우팅, 인터넷 전용 | 인터넷 백본 |
VPN
공용망을 이용해 사설 네트워크처럼 안전하게 통신하는 기술
프로토콜 | 설명 |
---|
PPTP | 빠름, 보안낮음, 요즘 잘 안씀 |
L2TP | IPsec과 함께 사용해야만 보안성 확보 |
IPsec | 인증+암호화+무결성, L2TP와 결합하여 사용 |
SSL VPN | 웹 브라우저 기반 |
클라우드 종류
구분 | 설명 |
---|
IaaS | 인프라 제공 (서버) |
PaaS | 플랫폼 제공 (개발 환경 포함) |
SaaS | 소프트웨어 제공 (사용만 하면 됨) |
🔐 정보보안 🔐
주요 공격 기법
기법 | 설명 |
---|
스니핑 | 네트워크 도청 |
스푸핑 | IP/이메일 등 위조 |
피싱 | 가짜 사이트로 유도 |
파밍 | DNS 변조로 유도 |
SQL Injection | 쿼리 조작 |
XSS | 스크립트 삽입 |
디도스(DDoS) | 대량 트래픽 유발 |
루트킷 | 시스템에 몰래 침투해 존재를 숨기고, 관리자 권한을 탈취해 탐지를 회피 |
APT (Advanced Persistent Threat) | 특정 대상을 장기간 은밀히 공격하여 정보를 수집·탈취하는 지능형 지속 위협 |
스머프 | ICMP를 악용하여 많은 응답을 몰아버리는 DDoS 공격의 한 종류 |
보안 기술
용어 | 설명 |
---|
템퍼프루핑 | 변경 감지 후 실행 차단 |
코드 난독화 | 소스코드 해석 어렵게 |
워터마킹 | 불법 복제 방지용 식별 정보 |
무결성 검사 | 체크섬/해시로 데이터 변경 확인 |
시그니처 탐지 | 기존 공격패턴 비교 |
행위 기반 탐지 | 실행 행위 분석 |
암호화 및 인증
구분 | 설명 | 대표 알고리즘 |
---|
대칭키 | 같은 키로 암/복호화 | AES, DES, SEED |
비대칭키 | 공개키/개인키 | RSA, ECC |
해시 | 고정 길이 값으로 변환 | SHA-256 등 |
디지털 서명 | 송신자 인증 및 위조 방지 | 해시+비대칭 |
전자봉투 | 대칭+비대칭 혼합 방식 | - |
접근통제 방식
방식 | 설명 |
---|
MAC | 강제 접근 통제 – 규칙 기반 |
DAC | 임의 접근 통제 – 소유자 권한 부여 가능 |
RBAC | 역할 기반 – 직무 중심 접근제어 |
💽 데이터베이스 💽
데이터베이스 기본 용어
용어 | 정의 |
---|
릴레이션 | 테이블 전체 |
튜플 | 행 (Row) |
애트리뷰트 | 열 (Column) |
도메인 | 속성 값의 범위 |
카디널리티 | 고유값 수 |
차수 | 속성 개수 |

스키마 계층
구분 | 정의 |
---|
외부 스키마 | 사용자 관점 |
개념 스키마 | 조직 전체 논리 구조 |
내부 스키마 | 물리적 저장 구조 |
무결성 제약조건
이름 | 정의 | 예시 |
---|
개체 무결성 | PK는 NULL/중복 불가 | 학번 |
참조 무결성 | FK는 부모 테이블의 PK | 학생-성적 테이블 |
도메인 무결성 | 값은 도메인 내 존재 | 성별 ‘남/여’ |
고유 무결성 | 중복 불가 속성 | 주민번호 |
NULL 무결성 | NULL 금지 | 필수값 |
키 무결성 | 유일 식별 키 존재 필요 | 기본키 설정 |
사용자 정의 | 논리적 제약조건 | 나이 > 0 등 |
🗂️ 운영체제 🗂️
CPU 스케쥴링 알고리즘
0) 공통으로 사용할 프로세스 예시
프로세스 | 도착시간 | 실행시간 |
---|
P1 | 0 | 8 |
P2 | 1 | 4 |
P3 | 2 | 9 |
P4 | 3 | 5 |
1) FCFS
먼저 도착한 순서대로 작업
(P1→P2→P3→P4)

평균 대기시간: 8.75
2) SJF
대기중인 작업 중 가장 실행시간이 작은거 먼저 작업
(P1→P2→P4→P3)

평균 대기시간: 7.75
3) SRTF
작업이 실행중이어도 더 짧은 작업이 오면 바로 선점하여 작업
(P1{1}→P2→P4→P1{7}→P3)

평균 대기시간: 6.5
4) HRN
대기시간과 실행시간을 통해 점수를 내 우선순위 설정
(점수 = 대기시간 / 실행시간)
예) P1이 실행된 후 P2, P3, P4 중 어떤 프로세스를 실행할지 고르는 상황
P1이 실행되었으니 현재 시간은 8
프로세스 | 실행시간 | 대기시간←현재시간 - 도착시간 | 점수 |
---|
P2 | 4 | 8-1 = 7 | 7%4 = 1.75 |
P3 | 9 | 8-2 = 6 | 6%9 = 0.67 |
P4 | 5 | 8-3 = 5 | 5 % 5 = 1 |
점수가 1.75
로 가장 높은 P2가 실행
페이지 교체 알고리즘
0) 공통으로 사용할 페이지 요청 예시
프레임 수 : 3
페이지 요청 : 7 0 1 2 0 3 0 4 2 3 0 3 2
1) FIFO
제일 오래전에 들어온 페이지 제거
| 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 |
---|
옛날 | | | 7 | 0 | 0 | 1 | 2 | 3 | 0 | 4 | 2 | 2 | 2 |
| | 7 | 0 | 1 | 1 | 2 | 3 | 0 | 4 | 2 | 3 | 3 | 3 |
최근 | 7 | 0 | 1 | 2 | 2 | 3 | 0 | 4 | 2 | 3 | 0 | 0 | 0 |
Fault | ✅ | ✅ | ✅ | ✅ | | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | |
Page Fault: 10회
2) LRU
제일 오래전에 사용된 페이지 제거
| 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 |
---|
옛날 | | | 7 | 0 | 1 | 2 | 2 | 3 | 0 | 4 | 2 | 2 | 0 |
| | 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 |
최근 | 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 |
Fault | ✅ | ✅ | ✅ | ✅ | | ✅ | | ✅ | ✅ | ✅ | ✅ | | |
Page Fault: 9회
3) LFU
가장 적게 사용된 페이지를 제거
동일한 횟수일 시 FIFO 방식에 따라 제거
| 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 |
---|
옛날 | | | 7:1 | 0:1 | 0:2 | 0:2 | 0:3 | 0:3 | 0:3 | 0:3 | 0:4 | 0:4 | 0:4 |
| | 7:1 | 0:1 | 1:1 | 1:1 | 2:1 | 2:1 | 3:1 | 4:1 | 2:1 | 2:1 | 2:1 | 2:2 |
최근 | 7:1 | 0:1 | 1:1 | 2:1 | 2:1 | 3:1 | 3:1 | 4:1 | 2:1 | 3:1 | 3:1 | 3:2 | 3:2 |
Fault | ✅ | ✅ | ✅ | ✅ | | ✅ | | ✅ | ✅ | ✅ | | | |
Page Fault: 8회