munjji 님의 블로그
[정보처리기사] 2과목. 소프트웨어 개발 본문
자료 구조의 분리
- 선형 구조 : 배열, 선형 리스트, 스택, 큐, 데크
- 비선형 구조 : 트리, 그래프
스택(Stack)
- 리스트의 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료 구조이다.
- 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO) 방식으로 자료를 처리한다.
스택의 응용 분야
- 인터럽트의 처리
- 수식 계산 및 수식 표기법
- 서브루틴 호출 및 복귀 주소 저장
스택의 삽입(Push)과 삭제(Pop)
- PUSH : 스택에 자료를 입력하는 명령
- POP : 스택에서 자료를 출력하는 명령

방향/무방향 그래프의 최대 간선 수
- 무방향 그래프의 최대 간선 수 : n(n-1)/2
- 방향 그래프의 최대 간선 수 : n(n-1)
트리(Tree)
정점(Node, 노드)과 선분(Branch, 가지)을 이용해 사이클을 이루지 않도록 구성한 그래프(Graph)의 특수한 형태이다.

- 디그리(Degree, 차수) : 각 노드에서 뻗어 나온 가지의 수
- A = 3, B = 2, C = 1, D = 3
- 단말 노드(Terminal Node) = 잎 노드(Leaf Node) : 자식이 하나도 없는 노드, 즉 디그리가 0인 노드
- K, L, F, G, M, I, J
이진 트리의 운행법

Preorder 운행법의 방문 순서
① Preorder는 Root → Left → Right이므로 A13이 된다.
② 1은 B2E이므로 AB2E3이 된다.
③ 2는 DHI이므로 ABDHIE3이 된다.
④ 3은 CFG이므로 ABDHIECFG가 된다.
∴ 방문 순서 : ABDHIECFG
Inorder 운행법의 방문 순서
① Inorder는 Left → Root → Right이므로 1A3이 된다.
② 1은 2BE이므로 2BEA3이 된다.
③ 2는 HDI이므로 HDIBEA3이 된다.
④ 3은 FCG이므로 HDIBEAFCG가 된다.
∴ 방문 순서 : HDIBEAFCG
Postorder의 방문 순서
① Postorder는 Left → Right → Root이므로 13A가 된다.
② 1은 2EB이므로 2EB3A가 된다.
③ 2는 HID이므로 HIDEB3A가 된다.
④ 3은 FGC이므로 HIDEBFGCA가 된다.
∴ 방문 순서 : HIDEBFGCA
수식의 표기법(Infix -> Postfix)
Infix로 표기된 수식에서 연산자를 해당 피연산자 두 개의 뒤(오른쪽)에 오도록 이동하면 Postfix가 된다.

수식의 표기법(Infix -> Prefix)
Infix로 표기된 수식에서 연산자를 해당 피연산자 두 개의 뒤(왼쪽)에 오도록 이동하면 Prefix가 된다.

수식의 표기법(Postfix -> Infix)
Postfix는 Infix 표기법에서 연산자를 해당 피연산자 2개의 뒤(오른쪽)로 이동한 것이므로 연산자를 다시 해당 피연산자 2개의 가운데로 옮기면 된다.

삽입 정렬(Insertion sort)

선택 정렬(Selection Sort)

버블 정렬(Bubble Sort)

이분 검색 (이진 검색)
- 검색할 데이터가 정렬되어 있어야 한다.
- 비교 횟수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어든다.
- 탐색 효율이 좋다.
- 탐색 시간이 적게 소요된다.
- 중간 레코드 번호(M) : (F + L) / 2
(단, F는 첫 번째 레코드 번호, L는 마지막 레코드 번호)
주요 해싱 함수
- 제산법(Division) : 레코드 키 값(K)을 해시표(Hash Table)의 크기보다 큰 수 중에서 가장 작은 소수(Prime, Q)로 나눈 나머지를 홈 주소로 삼는 방식
- 제곱법(Mid-Square) : 레코드 키 값(K)을 제곱한 후 그 중간 부분의 값을 홈 주소로 삼는 방식
- 폴딩법(Folding) : 레코드 키 값(K)을 여러 부분으로 나눈 후 각 부분의 값을 더하거나 XOR한 값을 홈 주소로 삼는 방식
- 숫자 분석법(Digit Analysis) : 키 값을 이루는 숫자의 분포를 분석하여 비교적 고른 자리를 필요한 만큼 선택해서 홈 주소로 삼는 방식
스키마 3계층
- 외부 스키마 : 사용자나 응용 프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것
- 개념 스키마 : 데이터베이스의 전체적인 논리적 구조로서, 개체 간의 관계와 제약 조건을 나타내고 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의함
- 내부 스키마 : 물리적 저장장치의 입장에서 본 데이터베이스 구조로서, 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타냄
빌드 자동화 도구
- Ant : 아파치 소프트웨어 재단에서 개발한 소프트웨어
- Maven : Ant의 대안으로 개발한 소프트웨어
- Jenkins : Java 기반의 오픈 소스 형태의 빌드 자동화 도구
- Gradle : Groovy를 기반으로 한 오픈 소스 형태의 빌드 자동화 도구
소프트웨어 패키징
- 모듈별로 생성한 실행 파일들을 묶어 배포용 설치 파일을 만드는 것이다.
- 개발자가 아니라 사용자를 중심으로 진행한다.
소프트웨어 패키징 시 고려사항
- 내부 콘텐츠에 대한 암호화 및 보안을 고려한다.
- 다른 여러 콘텐츠 및 단말기 간 DRM(디지털 저작권 관리) 연동을 고려한다.
DRM(디지털 저작권 관리)의 구성 요소
- 클리어링 하우스: 저작권에 대한 사용 권한, 라이선스 발급, 사용량에 따른 결제 관리 등을 수행하는 곳
- 콘텐츠 제공자: 콘텐츠를 제공하는 저작권자
- 패키저: 콘텐츠를 메타 데이터와 함께 배포 가능한 형태로 묶어 암호화하는 프로그램
- 콘텐츠 분배자: 암호화된 콘텐츠를 유통하는 곳이나 사람
- DRM 컨트롤러: 배포된 콘텐츠의 이용 권한을 통제하는 프로그램
DRM(디지털 저작권 관리)의 기술 요소
- 콘텐츠 암호화 및 키 관리
- 콘텐츠 식별체계 표현
- 라이선스 발급 및 관리
- 정책 관리 기술
- 크랙 방지 기술
소프트웨어 설치 매뉴얼
- 설치 매뉴얼은 사용자를 기준으로 작성한다.
- 기본 사항
- 소프트웨어 개요
- 설치 관련 파일
- 프로그램 삭제 등
형상 관리(SCM)
- 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발된 일련의 활동이다.
- 목적: 개발 비용 감소, 방해 요인 최소화
- 관리 항목: 소스 코드, 프로젝트 분석서, 운영 및 설치 지침서 등
- 형상 관리 도구: Git, CVS, Subversion 등
소프트웨어의 버전 등록 관련 주요 기능
- 체크아웃: 프로그램을 수정하기 위해 저장소에서 파일을 받아옴
- 체크인: 체크아웃 한 파일의 수정을 완료한 후 저장소의 파일을 새로운 버전으로 갱신함
- 커밋: 체크인을 수행할 때 이전에 갱신된 내용이 있는 경우에는 충돌을 알리고 diff 도구를 이용해 수정한 후 갱신을 완료함
파레토 법칙(Pareto Principle)
소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견된다는 법칙이다.
화이트박스 테스트
- 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법이다.
- 프로그램의 제어 구조에 따라 선택, 반복 등의 분기점 부분들을 수행함으로써 논리적 경로를 제어한다.
화이트박스 테스트의 종류
- 기초 경로 검사
- 제어 구조 검사
- 조건 검사
- 루프 검사
- 데이터 흐름 검사
- 기초 경로(Base Pth = Basis Path): 수행 가능한 모든 경로를 의미함
블랙박스 테스트 종류
- 동치 분할 검사
- 경계값 분석
- 원인-효과 그래프 검사
- 오류 예측 검사
- 비교 검사
단위 테스트(Unit Test)
코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트하는 것이다.
단위 테스트로 발견 가능한 오류
- 알고리즘 오류에 따른 원치 않는 결과
- 탈출구가 없는 반복문의 사용
- 틀린 계산 수식에 의한 잘못된 결과
인수 테스트의 종류
- 알파 테스트: 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트 기법
- 베타 테스트: 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법으로, 필드 테스팅이라고도 불림
통합 테스트
- 하향식 통합 테스트: 프로그램의 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법으로, 깊이 우선 통합법이나 넓이 우선 통합법을 사용함
- 상향식 통합 테스트: 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법
테스트 드라이버(Test Driver)
- 테스트 대상의 하위 모듈을 호출하는 도구이다.
- 매개 변수를 전달하고, 모듈 테스트 수행 후의 결과를 도출한다.
- 상향식 통합 테스트에 사용된다.
테스트 스텁(Test Stub)
- 일시적으로 필요한 조건만을 가지고 있는 시험용 모듈이다.
- 하향식 통합 테스트에 사용된다.
테스트 오라클(Test Oracle)
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교하는 기법 및 활동이다.
- 종류: 참 오라클, 샘플링 오라클, 추정 오라클, 일관성 검사 오라클
주요 최악의 시간 복잡도
- O(1)
- 입력값(n)에 관계 없이 일정하게 문제 해결에 하나의 단계만을 거침
- 스택의 삽입(Push), 삭제(Pop)
- O(nlogn)
- 문제 해결에 필요한 단계가 nlogn번만큼 수행됨
- 힙 정렬, 2-Way 합병 정렬
클린 코드 작성 원칙
- 가독성 : 누구든지 코드를 쉽게 읽을 수 있도록 작성함
- 단순성 : 코드를 간단하게 작성함
- 의존성 배제 : 코드가 다른 모듈에 미치는 영향을 최소화함
- 중복성 최소화 : 코드의 중복음 최소화함
- 추상화 : 상위 클래스/메소드/함수에서는 간략하게 애플리케이션의 특성을 나타내고, 상세 내용은 하위 클래스/메소드/함수에서 구현함
외계인 코드
아주 오래되거나 참고문서 또는 개발자가 없어 유지 보수 작업이 어려운 코드를 의미한다.
소스 코드 품질 분석 도구 - 정적 분석 도구
- 하드웨어 또는 소프트웨어적인 방법으로 코드 분석이 가능하다.
- 종류 : pmd, checkstyle, cppcheck 등
EAI의 구축 유형
- Ponit-to-Point: 애플리케이션을 1:1로 연결함
- Hub & Spoke: 단일 접점인 허브 시스템을 통해 데이터를 전송하는 중앙 집중형 방식
- Message Bus(ESB 방식): 애플리케이션 사이에 미들웨어를 두어 처리하는 방식
- Hybrid: Hub & Spoke와 Message Bus의 혼합 방식
JSON(Javascript Object Notation)
- 속성-값 쌍으로 이루어진 데이터 객체를 전달하기 위해 사람이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.
AJAX(Asynchronous Javascript and XML)
- 자바스크립트 등을 이용한 비동기 통신 기술이다.
- 클라이언트와 서버 간에 XML 데이터를 교환 및 제어한다.
인터페이스 보안 기능 적용 - 네트워크 영역
- 네트워크 트래픽에 대한 암호화를 설정한다.
- 암호화는 IPSec, SSL, S-HTTPS 등의 다양한 방식으로 적용한다.
tripwire
크래커가 침입하여 백도어를 만들어 놓거나, 설정 파일을 변경했을 때 분석하는 데이터 무결성 검사 도구 중 하나이다.
인터페이스 구현 검증 도구
- XUnit : JUnit, CppUnit, NUnit, HttpUnit 등 다양한 언어에 적용되는 단위 테스트 프레임워크
- STAF : 서비스 호출 및 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크
- FitNesse : 웹 기반 테스트 케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크
- NTAF : FitNesse와 STAF의 장점을 통합한 NHN의 테스트 자동화 프레임워크
- watir : Ruby를 사용하는 애플리케이션 테스트 프레임워크
'CS' 카테고리의 다른 글
| [정보처리기사] 5과목. 정보시스템 구축 관리 (0) | 2026.03.13 |
|---|---|
| [정보처리기사] 3과목. 데이터베이스 구축 (0) | 2026.03.13 |
| [정보처리기사] 1과목. 소프트웨어 설계 (0) | 2026.03.11 |
| [CS] 메시지 큐 (0) | 2026.03.06 |
| [CS] 비동기 처리 (0) | 2026.03.05 |