정보처리기사 개념정리 목차

2과목 소프트웨어개발

기출 160문항(과목2)을 세어 보면 무게가 한쪽으로 심하게 쏠려 있다 — 테스트(65) · 형상관리(31) · 검사(29) · 정렬(19) · 트리(13) · 탐색(11) · 해시(6).

테스트와 형상관리 둘이 절반이다. 나머지 절반은 자료구조·정렬·해싱처럼 직접 손으로 굴려야 답이 나오는 문항이라, 이 편은 계산 절차를 함께 적었다.


0. 이 과목의 지형

애플리케이션 테스트 관리   테스트 기법 · 레벨 · 통합 · 오라클 · 자동화 도구   ← 최다
제품 소프트웨어 패키징     패키징 · 매뉴얼 · 릴리즈 노트 · DRM
애플리케이션 통합·인터페이스 EAI · 데이터 형식 · 검증
소프트웨어 개발 보안·품질   정적 분석 · 클린코드 · 국제 표준
자료구조·알고리즘           정렬 · 탐색 · 트리 · 그래프 · 해싱            ← 계산

2025년 1회 경고 — 자료구조 문항이 대거 나와 합격률이 크게 떨어진 회차가 있었다. "테스트만 보면 된다"는 전략이 통하지 않는 회차가 존재한다는 뜻이다.


1. 테스트의 기본 — 원칙과 두 단어

검증(Verification)과 확인(Validation) — 검증 18회 · 확인 14회

검증(Verification)  제품이 명세대로 만들어졌는가   "제대로 만들고 있는가"  개발자 관점
확인(Validation)    제품이 사용자 요구를 만족하는가 "제대로 된 것을 만들었나" 사용자 관점

함정 — 두 단어를 바꿔 낸 보기가 가장 흔하다. 검증은 명세 기준, 확인은 사용자 기준이다. V 모델에서 이 둘이 짝을 이룬다는 점도 함께 나온다.

테스트의 기본 원칙

원칙
결함 존재를 밝히는 활동테스트는 결함이 없음을 증명하지 못한다
완벽한 테스트는 불가능모든 입력 조합을 다 볼 수 없다
파레토 법칙(80:20)결함의 80%는 20%의 모듈에 몰려 있다
살충제 패러독스같은 테스트를 반복하면 더 이상 결함을 못 찾는다 → 케이스를 개선해야
오류-부재의 궤변결함을 다 고쳐도 요구와 다르면 쓸 수 없다
정황(Context) 의존소프트웨어 성격에 따라 테스트가 달라진다
초기에 시작빨리 시작할수록 비용이 싸다

함정 — "테스트로 결함이 없음을 증명할 수 있다"는 항상 틀린 보기다.


2. 테스트 기법 — 화이트박스와 블랙박스

화이트박스 테스트 — 내부 구조를 보고 짠다

기법무엇을 본다
문장(구문) 검증모든 문장을 최소 한 번 실행
분기(결정) 검증모든 조건문의 참·거짓을 각각 실행
조건 검증개별 조건식의 참·거짓을 각각
분기/조건 결합위 둘을 함께
변경 조건/결정(MC/DC)각 조건이 독립적으로 결과에 영향을 주도록
다중 조건모든 조건 조합 — 가장 강력하고 비싸다
기초 경로(Base Path)순환 복잡도만큼의 독립 경로를 모두
데이터 흐름 / 루프 검사변수 정의-사용, 반복문 경계

커버리지 강도 순서

문장 < 분기(결정) < 조건 < 분기/조건 결합 < 변경 조건/결정 < 다중 조건

순환 복잡도(Cyclomatic Complexity) — 계산이 나온다

세 가지 방법 중 아무거나 쓰면 값이 같다.

① V(G) = E - N + 2        (E = 간선 수, N = 노드 수)
② V(G) = 폐구역(영역) 수 + 1
③ V(G) = 판단 노드(조건문) 수 + 1

— 노드 8개, 간선 10개인 제어 흐름 그래프 → 10 - 8 + 2 = 4. 독립 경로가 4개이므로 기초 경로 테스트 케이스도 최소 4개다. 조건문이 3개면 3 + 1 = 4 로 같은 답이 나오는지 교차 확인할 수 있다.

블랙박스 테스트 — 명세만 보고 짠다

기법무엇을
동등 분할(Equivalence Partitioning)입력을 유효/무효 그룹으로 나눠 대표값 하나씩 (8회 출제)
경계값 분석(Boundary Value)경계와 그 바로 앞뒤 값 — 결함이 경계에 몰린다
원인-결과 그래프입력과 출력의 인과를 그래프로 → 케이스 도출
오류 예측(Error Guessing)경험과 감으로 결함을 추정
비교(Comparison) 검사여러 버전에 같은 입력을 주고 결과 비교
결정 테이블조건 조합을 표로
상태 전이상태 변화 경로를 따라
분류 트리입력을 트리로 분해해 조합

경계값 예 — 1~100 을 입력받으면 0, 1, 2, 99, 100, 101 을 본다. "유효한 값 하나만 고른다"는 동등 분할, "경계 주변을 본다"는 경계값이다.


3. 테스트 레벨과 통합 방식

단위(Unit) → 통합(Integration) → 시스템(System) → 인수(Acceptance)
레벨대상특징
단위모듈·함수 하나화이트박스 중심, 스텁·드라이버 필요
통합모듈 간 인터페이스아래 방식 4가지
시스템전체 시스템기능·비기능 전부, 실제 환경에 가깝게
인수사용자 요구 충족사용자·운영·계약·규정·알파·베타

알파와 베타

알파 테스트   개발자 사이트에서 · 개발자가 지켜보는 통제된 환경 · 사용자가 수행
베타 테스트   실 사용자 환경에서 · 개발자 없이 · 실제 사용 중 피드백

통합 테스트 방식 — 스텁과 드라이버가 갈리는 지점

방식순서필요한 가짜 모듈
하향식(Top-Down)상위 → 하위스텁(Stub) — 아직 없는 하위 모듈 대역
상향식(Bottom-Up)하위 → 상위드라이버(Driver) — 아직 없는 상위 모듈 대역
빅뱅(Big-Bang)한꺼번에없음 — 오류 위치 찾기가 어렵다
샌드위치(혼합)위아래 동시둘 다

함정하향식 = 스텁, 상향식 = 드라이버. 이 짝을 바꿔 낸 문항이 반복 출제된다. 상향식에서는 하위 모듈을 묶은 클러스터(cluster) 를 만들고 드라이버로 호출한다.

그 밖의 이름

회귀(Regression) 테스트   수정 후 다른 곳이 깨지지 않았는지
스모크(Smoke) 테스트      본 테스트 전에 최소 동작 확인
성능 · 부하 · 스트레스     처리량·한계·과부하 상황
정적 테스트               실행하지 않고 — 리뷰·워크스루·인스펙션·정적 분석
동적 테스트               실행하며 — 화이트박스·블랙박스

4. 테스트 오라클과 테스트 하네스

테스트 오라클 4종

오라클
참(True)모든 입력에 대해 기대 결과를 알고 있다 — 가장 이상적, 비용 큼
샘플링(Sampling)일부 입력에만 기대 결과를 제공
추정(Heuristic)샘플링을 개선 — 나머지는 추정으로 처리
일관성 검사(Consistent)변경 전후 실행 결과가 같은지만 확인

휴리스틱(2회)·일관성이 보기에 그대로 등장한다. 참 오라클만 전수라는 점이 갈리는 지점.

테스트 하네스 구성 요소

테스트 드라이버 · 테스트 스텁 · 테스트 슈트 · 테스트 케이스 · 테스트 스크립트 · 목 오브젝트

테스트 자동화 도구 — 이름이 그대로 답이다

도구용도
xUnit (JUnit·NUnit·CppUnit·HttpUnit)단위 테스트 프레임워크 (6회 출제)
STAF분산 환경 테스트 자동화 프레임워크 (6회)
FitNesse웹 기반 인수 테스트 프레임워크
NTAFSTAF + FitNesse 를 결합한 NHN 도구
Selenium웹 애플리케이션 테스트 (브라우저 자동화)
watirRuby 기반 웹 테스트
Cobertura코드 커버리지 측정

함정 — 이 목록에 정적 분석 도구(pmd·cppcheck) 를 섞어 "테스트 자동화 도구가 아닌 것"으로 낸다.


5. 형상관리 (형상 31회 · 버전 13회)

형상관리란 — 소프트웨어 변경 사항을 관리·추적·통제하는 활동. 산출물의 버전과 변경 이력을 다룬다.

활동 4단계 — 순서가 그대로 문제다

형상 식별  →  형상 통제(변경 통제)  →  형상 감사  →  형상 기록(상태 보고)
활동하는 일
형상 식별관리 대상을 정하고 이름·번호를 부여
형상 통제변경 요청을 검토·승인하고 기준선에 반영 (변경 통제 위원회)
형상 감사변경이 제대로 반영됐는지 검증
형상 기록변경 상태를 문서로 기록·보고

베이스라인(기준선) — 정식 검토와 합의를 거쳐 확정된 산출물. 이후 변경은 통제 절차를 통해서만 가능하다.

용어

체크아웃(Check-Out)  저장소에서 받아온다
체크인(Check-In)     수정한 것을 저장소에 반영
커밋(Commit)         변경을 확정 기록
저장소(Repository)   형상 항목이 모여 있는 곳
트렁크·브랜치·태그    주 개발선 · 분기 · 특정 시점 표시

도구 세 개의 차이

도구방식특징
CVS중앙 집중가장 오래됨, 파일 단위 커밋, 원자성 없음
Subversion(SVN)중앙 집중커밋이 원자적, 디렉터리도 버전 관리
Git분산로컬 저장소 + 원격 저장소, 브랜치가 가볍다

함정 — Git 의 특징으로 "분산" 을, SVN 의 특징으로 "중앙 집중" 을 짝지어 둔다. 그리고 Git 은 로컬에서 커밋이 가능하다는 점이 SVN 과 갈린다.


6. 자료구조 — 계산으로 답을 내는 곳

분류

선형   배열 · 연결 리스트 · 스택 · 큐 · 데크
비선형 트리 · 그래프

스택 — LIFO

연산   push(넣기) · pop(꺼내기)
응용   함수 호출(재귀) · 수식 계산 · 후위 표기 변환 · 되돌리기 · DFS
오류   공백 상태에서 pop → 언더플로 / 꽉 찬 상태에서 push → 오버플로

기출은 push(4회)·pop(4회) 를 코드나 그림으로 주고 최종 스택 상태를 묻는다. 순서를 종이에 적어 하나씩 굴리는 것이 가장 빠르다.

큐와 데크

큐(Queue)   FIFO — front 에서 삭제, rear 에 삽입. 작업 대기열 · BFS
데크(Deque) 양쪽에서 삽입·삭제 모두 가능
원형 큐     배열의 앞부분 재사용

트리 용어 — 차수(11회)가 특히 자주 나온다

용어
노드의 차수(Degree)그 노드의 자식 수
트리의 차수노드 차수 중 최대값
단말(Leaf) 노드차수가 0 인 노드
레벨루트를 1(또는 0)로 두고 내려가며 세는 깊이
높이(Depth)가장 큰 레벨
형제(Sibling)부모가 같은 노드
조상·자손위·아래로 이어진 모든 노드

이진 트리

포화 이진 트리(Full)     모든 레벨이 꽉 찬 트리. 레벨 k 까지 노드 수 = 2^k - 1
완전 이진 트리(Complete) 왼쪽부터 빈틈없이 채운 트리
편향 이진 트리(Skewed)   한쪽으로만 자란 트리 — 탐색이 O(n)

노드가 n 개인 이진 트리의 최대 높이 = n(편향), 최소 높이 ≈ log₂(n+1)

순회(Traversal) — 손으로 굴리는 문항

전위(Preorder)   뿌리 → 왼쪽 → 오른쪽   (Root-L-R)
중위(Inorder)    왼쪽 → 뿌리 → 오른쪽   (L-Root-R)
후위(Postorder)  왼쪽 → 오른쪽 → 뿌리   (L-R-Root)

수식 표기와의 연결 — 수식 트리를 중위 순회하면 중위 표기(A+B), 후위 순회하면 후위 표기(AB+), 전위 순회하면 전위 표기(+AB) 가 나온다. "다음 트리를 후위 순회한 결과"는 전부 이 규칙 하나로 풀린다.

그래프

무방향 그래프의 최대 간선 수 = n(n-1)/2
방향 그래프의 최대 간선 수   = n(n-1)
표현            인접 행렬(밀집 그래프) · 인접 리스트(희소 그래프)
탐색            DFS(스택·재귀) · BFS(큐)

계산 예 — 정점이 5개인 무방향 완전 그래프의 간선 수 = 5×4/2 = 10.


7. 정렬 — 시간 복잡도 표가 곧 점수 (정렬 19회)

정렬평균최악특징
선택(Selection)O(n²)O(n²)최소값을 골라 앞으로
버블(Bubble)O(n²)O(n²)인접한 둘을 비교·교환
삽입(Insertion)O(n²)O(n²)정렬된 부분에 끼워 넣음, 거의 정렬됐으면 O(n)
쉘(Shell)O(n^1.5)O(n²)삽입 정렬 개선, 간격(gap)을 줄여 가며
퀵(Quick)O(n log n)O(n²)피벗 기준 분할, 평균 최고속
힙(Heap)O(n log n)O(n log n)힙을 만들어 최대·최소를 꺼낸다
병합(Merge)O(n log n)O(n log n)분할 후 합병, 추가 메모리 필요
기수(Radix)O(dn)O(dn)자릿수별 분배, 비교하지 않는다

함정 셋 — ① 퀵 정렬의 최악은 O(n²) 다(이미 정렬된 입력에 피벗을 끝값으로 잡을 때). ② 병합 정렬은 최악에도 O(n log n) 이지만 추가 공간을 쓴다. ③ 기수 정렬은 비교 기반이 아니다.

"1회전 후 결과"를 묻는 문항 대처법

선택 정렬  전체에서 최소값을 찾아 맨 앞과 교환 → 1회전엔 최소값 하나만 확정
버블 정렬  왼쪽부터 인접 비교·교환을 끝까지 → 1회전엔 최대값이 맨 뒤로
삽입 정렬  두 번째 원소를 앞의 정렬 구간에 삽입

문제에서 오름차순인지 내림차순인지, 회전(pass)의 정의가 무엇인지 먼저 표시한다.


8. 탐색과 해싱

탐색 기법

기법조건복잡도
순차(선형) 탐색정렬 불필요O(n)
이분(이진) 탐색정렬 필수O(log n)
피보나치 탐색정렬 필수, 피보나치 수열로 분할O(log n)
보간(Interpolation) 탐색정렬 + 균등 분포 가정평균 O(log log n)
블록(색인 순차) 탐색인덱스 테이블 + 블록 내 순차

이진 탐색의 중간값 mid = (low + high) / 2 (소수점 버림). 비교 후 한쪽 절반을 버린다.

이진 탐색 트리와 AVL

이진 탐색 트리(BST)  왼쪽 < 뿌리 < 오른쪽. 편향되면 O(n) 으로 나빠진다
AVL 트리             좌우 서브트리 높이 차가 1 이하로 유지되는 균형 트리 → O(log n) 보장

해싱 — 해시 함수 이름이 그대로 답

함수방법
제산법(Division)키를 소수로 나눈 나머지를 주소로
제곱법(Mid-square)키를 제곱한 뒤 중간 자리를 사용
폴딩법(Folding)키를 여러 부분으로 나눠 더하거나 XOR
기수 변환법키의 진법을 바꿔 주소로
숫자 분석법키의 각 자리 분포를 분석해 고른 자리를 사용
무작위법난수를 사용

충돌(Collision)과 오버플로(Overflow)

충돌     서로 다른 키가 같은 홈 주소를 갖는 것
동거자   같은 주소를 갖게 된 서로 다른 키들(synonym)
오버플로 버킷에 더 넣을 슬롯이 없는 상태

해결 방법

방법내용
선형 조사(Linear Probing)다음 빈 자리를 순차로 찾는다 — 군집(clustering) 발생
이차 조사(Quadratic)+1², +2², +3² 로 건너뛴다
이중 해싱(Double Hashing)두 번째 해시 함수로 간격을 정한다
체이닝(Chaining)같은 주소를 연결 리스트로 잇는다

함정 — 제산법은 소수로 나눈다는 점이 강조된다(3회 출제). 폴딩은 접어서 더한다, 제곱법은 중간 자리를 쓴다.


9. 알고리즘 설계 기법

기법
분할 정복(Divide & Conquer)쪼개서 풀고 합친다퀵·병합 정렬, 이진 탐색
동적 계획법(DP)작은 문제의 답을 저장해 재사용피보나치, 최단 경로(플로이드)
탐욕법(Greedy)매 순간 최선을 선택거스름돈, 최소 신장 트리(크루스칼·프림)
백트래킹(Backtracking)가능성 없는 경로는 되돌아간다N-Queen, 미로
분기 한정한계값으로 가지를 잘라낸다배낭 문제

복잡도 표기

O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!)

10. 코드 품질과 정적 분석

클린 코드와 코드 스멜

클린 코드 원칙  가독성 · 단순성 · 의존성 최소 · 중복 제거 · 추상화
코드 스멜       중복 코드 · 긴 메서드 · 큰 클래스 · 과도한 매개변수 · 죽은 코드
리팩터링        기능(외부 동작)을 바꾸지 않고 내부 구조를 개선

정적 분석 도구 — 실행하지 않고 소스를 본다

도구용도
pmd미사용 변수·최적화되지 않은 코드 검출 (Java 등)
cppcheckC/C++ 의 오버플로 등 결함 검출
checkstyleJava 코딩 표준 검사
SonarQube중복·복잡도·품질을 통합 관리
ccm순환 복잡도 측정
cobertura테스트 커버리지 측정

함정 — cobertura·ccm 은 측정 도구, checkstyle 은 표준 검사, pmd·cppcheck 은 결함 검출이다. 이 목록에 Selenium(동적 테스트)을 섞어 "정적 분석 도구가 아닌 것"으로 낸다.


11. 빌드·패키징·매뉴얼 (매뉴얼 16회 · 빌드 7회)

빌드 자동화 도구

도구특징
AntXML 기반, 절차적 스크립트, 의존성 관리 없음
MavenXML(pom.xml), 의존성 자동 관리, 정해진 라이프사이클
GradleGroovy/Kotlin DSL, 증분 빌드로 빠름, 안드로이드 표준 (5회)
JenkinsCI 서버 — 빌드·테스트·배포 자동 실행 (3회)

함정 — Jenkins 는 빌드 도구가 아니라 CI 서버(자동화 서버) 다. Gradle 은 XML 이 아니라 스크립트(DSL)를 쓴다.

제품 소프트웨어 패키징

사용자 중심으로 패키징 → 설치·사용 매뉴얼 작성 → 버전 관리·릴리즈 노트

릴리즈 노트 항목

머리말(문서 이름·제품명·버전·날짜) · 개요 · 목적 · 문제 요약 ·
재현 항목 · 수정·개선 내용 · 사용자 영향도 · 지원 연락처 · 면책 조항 · 참고

매뉴얼 두 종류

매뉴얼담는 것
설치 매뉴얼설치 환경·절차·오류 메시지·설치 검증·삭제 방법 — 개발자 관점
사용자 매뉴얼기능별 사용법·화면·FAQ — 사용자 관점

DRM (11회 출제)

구성 요소

요소역할
콘텐츠 제공자저작권자
콘텐츠 분배자유통을 담당
패키저(Packager)콘텐츠를 메타데이터와 함께 암호화해 묶는다
클리어링 하우스저작권 사용 승인·정산을 중개
DRM 컨트롤러사용 권한을 통제하며 재생
보안 컨테이너콘텐츠의 안전한 유통 상자

기술 요소

암호화 · 키 관리 · 식별 기술(DOI) · 저작권 표현(XrML) · 암호화 파일 생성(패키저) ·
정책 관리 · 크랙 방지 · 인증 · 워터마킹 · 핑거프린팅

함정클리어링 하우스 = 정산·승인이 짝이다. 패키저와 헷갈리게 낸다. 워터마킹(저작권 정보 삽입)과 핑거프린팅(구매자 정보 삽입)의 차이도 나온다.


12. 인터페이스 구현과 성능 지표

데이터 형식   JSON · XML · YAML · CSV
통신          REST · SOAP(WSDL·UDDI) · AJAX(비동기 요청)
보안          IPSec · SSL/TLS · S-HTTP

AJAX — 페이지 전체를 새로 고치지 않고 필요한 부분만 비동기로 갱신하는 방식(2회 출제).

애플리케이션 성능 지표 네 개

지표
처리량(Throughput)단위 시간당 처리한 트랜잭션 수
응답 시간(Response Time)요청 후 첫 응답까지
반환 시간(Turnaround Time)요청 후 완료 결과 전부를 받기까지
자원 사용률CPU·메모리·네트워크 사용량

함정 — 응답 시간과 반환 시간을 바꿔 낸다. 응답은 첫 반응, 반환은 완료.


13. 품질·프로세스 국제 표준 (ISO 8회 · IEC 8회)

표준무엇
ISO/IEC 9126 → 25010소프트웨어 품질 특성 (기능성·신뢰성·사용성·효율성·유지보수성·이식성)
ISO/IEC 12207소프트웨어 생명주기 프로세스 (기본·지원·조직)
ISO/IEC 15504 (SPICE)프로세스 평가 — 수행 능력 6단계(0 불완전 ~ 5 최적화)
CMMI성숙도 5단계 — 초기 · 관리 · 정의 · 정량적 관리 · 최적화
ISO/IEC 14598품질 평가 절차·요건

함정 — 9126 은 품질 특성, 12207 은 생명주기, 15504 는 평가다. CMMI 5단계 이름 순서를 뒤집은 보기가 나온다(성숙도 2회 출제).


14. 함정 정리

검증 vs 확인 — 검증은 명세 기준(개발자), 확인은 요구 기준(사용자).

하향식 = 스텁 / 상향식 = 드라이버. 절대 바꿔 읽지 않는다.

퀵 정렬 최악 O(n²), 병합·힙은 최악도 O(n log n).

기수 정렬은 비교 기반이 아니다.

트리의 차수 = 자식 수의 최대값, 단말 노드는 차수 0.

후위 순회 = L-R-Root → 후위 표기와 짝.

순환 복잡도 = E - N + 2 = 판단 노드 + 1.

참 오라클만 전수, 나머지는 일부·추정·비교.

Jenkins 는 CI 서버, Ant/Maven/Gradle 이 빌드 도구.

클리어링 하우스 = 저작권 정산, 패키저 = 암호화 묶음.

응답 시간 ≠ 반환 시간.

테스트는 결함이 없음을 증명하지 못한다.


한눈에 정리

  • 테스트와 형상관리가 이 과목의 절반이다. 기법 이름 → 무엇을 보는지 짝만 맞추면 된다
  • 화이트박스는 커버리지 강도 순서순환 복잡도 계산이 전부
  • 블랙박스는 동등 분할(대표값)경계값(경계 앞뒤) 의 구분
  • 통합 테스트는 하향식-스텁 / 상향식-드라이버 한 줄
  • 형상관리 4단계 식별 → 통제 → 감사 → 기록, 베이스라인은 합의된 기준선
  • 자료구조는 차수·순회·간선 수 계산 세 가지가 반복된다
  • 정렬은 평균/최악 복잡도 표1회전 결과 굴리기
  • 해싱은 제산=나머지, 폴딩=접어 더하기, 제곱=중간 자리
  • 도구 이름은 테스트(xUnit·STAF·FitNesse) / 정적 분석(pmd·checkstyle) / 빌드(Ant·Maven·Gradle) / CI(Jenkins) 로 칸을 나눠 외운다
  • 자료구조 문항이 대거 나온 회차가 실제로 있었다 — 테스트만 보고 가면 위험하다
1과목 소프트웨어설계3과목 데이터베이스구축