개발새발
2단원 소프트웨어 개발 개념 요약 본문
1. 선형 구조 (Linear Structure)
데이터가 일직선으로 연결된 형태
| 구분 | 주요 특징 및 내용 | 비고 (추가 설명) |
| 배열 (Array) | • 정적 구조 / 기억장소 추가 어려움 / 첨자 사용 • 반복적 데이터 처리 작업에 적합 • 데이터마다 동일 이름 변수 사용해 처리 간편 |
인덱스를 통한 직접 접근이 가능해 속도가 매우 빠름 |
| 스택 (Stack) | • 리스트 한쪽 끝으로만 자료의 삽입/삭제 • 후입선출 (Last-in-First-out, LIFO) • 인터럽트 처리 / 서브루틴 호출 작업에 활용 • Underflow: 삭제할 데이터가 없을 때 발생 • Overflow: 삽입할 공간이 없을 때 발생 |
복귀 주소(Return Address) 저장 시 주로 사용 |
| 큐 (Queue) | • 리스트 한쪽은 노드 삽입 / 반대쪽은 노드 삭제 • 선입선출 (First-in-First-out, FIFO) |
운영체제의 작업 스케줄링 등에 활용 |
| 데크 (Deque) | • 리스트 양쪽 끝에서 삽입/삭제 가능 | 스택과 큐의 장점을 모두 가짐 |
| 선형 리스트 (Linear List) |
[연속 리스트] • 자료구조가 연속되는 기억장소에 저장 • 데이터 중간 삽입 시 연속된 빈 공간 필요 • 삽입/삭제 시 자료의 이동 필요 [연결 리스트] • 노드의 포인터 부분을 이용해 서로 연결 • 노드의 삽입/삭제 작업 용이 • 포인터가 필요해 기억 공간 효율 낮음 • 포인터 찾는 시간 필요 → 접근 속도 느림 |
연속 리스트는 밀집 리스트라고도 하며, 연결 리스트는 노드(Data+Link)로 구성됨 |
2. 비선형 구조 (Non-Linear Structure)
데이터가 계층적이거나 망 형태로 구성된 형태
| 구분 | 주요 특징 및 내용 | 비고 (추가 설명) |
| 트리 (Tree) | • 노드(Node)와 가지(Branch)로 구성된 그래프 (사이클 X) • 차수(Degree): 각 노드에서 뻗어 나온 가지 수 • 트리의 차수: 각 노드의 차수 중 최대 차수 • 단말(Terminal): 자식/Degree가 없는 노드 |
족보나 조직도와 같은 계층 구조를 표현 |
| 그래프 (Graph) | • 방향 그래프: 정점 연결 선 방향 존재 / 최대 간선 수 • 무방향 그래프: 방향 X / 최대 간선 수 |
정점(Vertex)과 간선(Edge)의 집합 |
- Ant: XML 기반의 자원 빌드 도구
- Maven: 의존성 관리를 제공하는 빌드 도구
- Gradle: 안드로이드 공식 빌드 도구로, Groovy나 Kotlin을 사용하여 유연한 스크립트 작성 가능
- Jenkins: 지속적 통합(CI)을 위한 대표적인 오픈소스 도구
3. 디지털 저작권 관리 (DRM)
콘텐츠의 무단 사용을 막고 저작권자의 권리를 보호하는 기술
| 구성 요소 | 설명 |
| 패키저 (Packager) | 콘텐츠를 배포 가능한 형태로 암호화하는 프로그램 |
| 클리어링 하우스 | 사용 권한, 라이선스 발급, 결제 관리 수행 |
| DRM 컨트롤러 | 배포된 콘텐츠의 이용 권한을 통제하는 프로그램 |
| 보안 컨테이너 | 콘텐츠 원본을 안전하게 유통하기 위한 전자적 보안 장치 |
- DRM 기술 요소: 암호화, 키 관리, 식별 기술, 저작권 표현, 암호화 파일 생성, 정책 관리, 크랙 방지, 인증
4. 소프트웨어 형상 관리 (SCM)
개발 과정에서 SW 변경사항을 관리하기 위한 활동으로, 개발 전체 단계에 적용된다.
| 주요 역할 | 특징 |
| 중요성 | 변경사항 추적/통제, 무절제한 변경 방지, 개발 진행 이력 확인 |
| 관리 역할 | 배포본 관리 용이, 불필요한 소스 수정 제한, 여러 개발자 동시 개발 가능 |
형상 관리의 4가지 활동
| 항목 | 내용 |
| 형상 식별 | 관리 대상에 이름/번호 부여 후 계층 구조로 구분 → 수정/추적 용이 |
| 형상 통제 | 식별된 형상 항목에 대한 변경 요구 검토 (기준선 반영될 수 있게 함) |
| 형상 감사 | **기준선(Baseline)**의 무결성 평가를 위해 확인/검증/검열 과정 진행 |
| 형상 기록 | 형상 식별/통제/감사 작업 결과를 기록·관리하고 보고서 작성 |
- 형상 관리 도구: CVS, SVN, Git
소프트웨어 버전 등록 용어
| 용어 | 설명 |
| 저장소 (Repository) | 최신 버전 및 변경 내역 관련 정보가 저장되는 곳 |
| 가져오기 (Import) | 버전 관리가 미진행된 초기 저장소에 처음으로 파일을 복사 |
| 체크아웃 (Check-out) | 프로그램 수정을 위해 저장소에서 파일을 받아옴 |
| 체크인 (Check-in) | 수정한 파일을 저장소에 새로운 버전으로 갱신 |
| 커밋 (Commit) | 체크인 시 충돌(Conflict)이 발생하면 Diff 도구로 수정 후 갱신 완료 |
| 동기화 (Update) | 자신의 작업 공간을 저장소의 최신 버전 상태로 동기화 |
| 등록 과정 | 가져오기 → 인출(Check-out) → 커밋 → 동기화 → 차이 |
소프트웨어 버전 관리 도구 분류
| 방식 | 특징 | 대표 예시 |
| 공유 폴더 | 로컬 컴퓨터 내 공유 폴더에 저장/관리. 개발 완료 파일을 매일 복사 | SCCS, RCS, PVCS, QVCS |
| 클라이언트/서버 | 중앙 시스템(서버)에서 관리. 서버 문제 시 협업 중단 위험 | CVS, SVN |
| 분산 저장소 | 원격과 로컬 저장소에 함께 저장. 로컬 반영(Commit) 후 원격 반영(Push) | Git, Bitkeeper |
기업 애플리케이션 통합 (EAI) 방식
| 방식 | 특징 |
| Point to Point | 데이터 간 1:1 개별 연결. 변경 및 재사용 어려움 |
| Hub & Spoke | 중앙 허브를 통한 전송. 확장성 좋으나 허브 장애 시 전체 영향 |
| Message Bus | 미들웨어를 두고 처리. 확장성 및 대용량 처리에 유리 |
| Hybrid | Hub & Spoke와 Message Bus 혼합. 병목 현상 최소화 |
코드 품질 분석 도구
- 정적 분석 (실행 X): pmd, cppcheck, checkstyle, SonarQube, Find Bug, cobertura
- 동적 분석 (실행 O): Valance, Valgrind, Avalanche
5. 애플리케이션 테스트의 분류 및 원리
| 구분 | 분류 | 세부 내용 및 예시 |
| ① 실행 여부 | 정적 테스트 | 프로그램 실행 X / 명세서, 소스 코드 분석 (워크스루, 인스펙션 등) |
| 동적 테스트 | 프로그램 실행 후 오류 검사 (화이트박스, 블랙박스 테스트) | |
| ② 테스트 기반 | 명세 기반 | 요구사항 명세 확인 (동등 분할, 경계값 분석 등 블랙박스 기법) |
| 구조 기반 | 내부 논리 흐름 확인 (구문, 결정, 조건 기반 등 화이트박스 기법) | |
| 경험 기반 | 테스터의 경험 활용 (에러 추정, 체크리스트, 탐색적 테스팅) | |
| ③ 시각 기반 | 검증(Verification) | 개발자 시각: 제품 생산 과정 테스트 (단위, 통합, 시스템 테스트) |
| 확인(Validation) | 사용자 시각: 생산된 제품 결과 테스트 (인수 테스트 - 알파/베타) | |
| ④ 목적 기반 | 회복/안전/강도/성능/구조/회귀/병행 | 회복(정상 회복), 강도(과부하), 성능(응답 시간), 회귀(수정 후 결함 유무) 등 |
테스트 기본 원리
- 결함 존재 증명: 테스트는 결함이 있음을 밝히는 것이지, 없음을 증명할 수는 없음.
- 완벽한 테스트 불가능: 무한한 경로와 입력은 테스트할 수 없음.
- 결함 집중 (Pareto 법칙): 20%의 모듈에서 전체 결함의 80%가 발생함.
- 살충제 패러독스: 동일한 테스트 케이스를 반복하면 새로운 버그를 발견할 수 없음.
- 오류-부재의 궤변: 결함이 없더라도 요구사항을 충족하지 못하면 품질이 낮은 것임.
- Brooks의 법칙: 지연되는 프로젝트에 인력을 추가 투입하면 더 지연됨.
6. 화이트박스 vs 블랙박스 테스트
| 구분 | 화이트박스 테스트 (White Box) | 블랙박스 테스트 (Black Box) |
| 특징 | 모듈 내부 구조/논리 경로 직접 점검 | 내부 구조 모름 / 인터페이스 기능 점검 |
| 별칭 | 구조 테스트 | 기능 테스트 |
| 기법 | 기초 경로 검사, 제어 구조 검사(조건, 루프, 자료 흐름) | 동치 분할, 경계값 분석, 원인-효과 그래프, 오류 예측 등 |
7. 개발 단계에 따른 테스트 (V-모델 연계)

- 단위 테스트 (Unit): 최소 단위(모듈) 기반. 구조 기반(화이트박스) 및 기능성 우선.
- 통합 테스트 (Integration): 모듈 통합 과정의 오류 탐지.
- 하향식 (Top-down): 상위 → 하위. 스텁(Stub) 사용.
- 상향식 (Bottom-up): 하위 → 상위. 클러스터 및 드라이버(Driver) 사용.
- 시스템 테스트 (System): 실제 사용 환경과 유사한 환경에서 기능/비기능 점검.
- 인수 테스트 (Acceptance): 요구사항 충족 확인.
- 알파: 통제된 환경(개발자+사용자) / 베타: 통제되지 않은 환경(사용자)
7. 테스트 산출물 및 도구
- 테스트 케이스: 입력값, 실행 조건, 기대 결과 등으로 구성된 명세서.
- 테스트 시나리오: 테스트 케이스를 적용하는 구체적인 절차 문서.
- 테스트 오라클: 결과가 올바른지 판단하는 기준. (참, 샘플링, 휴리스틱, 일관성 오라클)
테스트 하네스 (Test Harness)
- 테스트 드라이버: 상향식 테스트에서 하위 모듈을 호출하는 도구.
- 테스트 스텁: 하향식 테스트에서 하위 모듈 역할을 대신하는 가짜 모듈.
- 기타: 테스트 슈트(케이스 집합), 테스트 스크립트, 목 오브젝트(계획된 행위 수행 객체).
8. 인터페이스 구현 및 데이터 전송
애플리케이션 간 데이터를 전송하고, 수신 측에서 이를 파싱(Parsing) 하여 해석하는 방식
- JSON (JavaScript Object Notation):
- 속성-값 쌍(Attribute-Value Pairs)으로 구성된 데이터 오브젝트 전달용 표준 포맷
- AJAX에서 주로 사용되며, XML을 대체하는 주요 포맷으로 자리 잡았다.
- XML (eXtensible Markup Language):
- HTML의 비호환성과 SGML의 복잡성을 해결하기 위해 개발된 특수 목적의 마크업 언어
- AJAX (Asynchronous JavaScript and XML):
- JavaScript를 사용한 비동기 통신 기술로, 페이지 전체를 새로고침 하지 않고도 데이터를 주고받을 수 있다.
- xUnit: Java, C++, .Net 등 다양한 언어를 지원하는 단위 테스트 프레임워크입니다.
- STAF: 서비스 호출, 컴포넌트 재사용 등 다양한 환경을 지원합니다.
- FitNesse: 웹 기반으로 테스트 케이스 설계, 실행, 결과 확인을 지원합니다.
- Selenium: 다양한 브라우저 및 개발 언어를 지원하는 웹 애플리케이션 테스트 도구입니다.
- watir: Ruby 언어 기반의 애플리케이션 테스트 프레임워크입니다.
9. 알고리즘 시간 복잡도 (Big-O)
| 복잡도 | 알고리즘 예시 | 설명 |
| 해시 함수 | 자료 크기와 무관한 일정 속도 | |
| 이진 탐색 | 로그형 복잡도 | |
| 순차 탐색 | 입력 자료 크기에 정비례하는 선형 복잡도 | |
| 힙/합병(병합) 정렬 | 선형 로그형 복잡도 | |
| 선택/버블/삽입/퀵 정렬 | 대부분 힙/합병보다 복잡도가 큼 ( |
10. 해싱 함수 종류 (Hash Function)
- 제산법
주소 = 키 mod M
→ 가장 많이 사용, M은 소수 권장 - 중첩법(폴딩법)
키를 여러 부분으로 나누어 더하거나 XOR
→ 긴 키에 사용 - 기수변환법
키의 진수를 다른 진수로 변환 후 주소 계산 - 숫자분석법
키의 숫자 분포를 분석해 균등한 자리 선택
→ 사전 분석 필요 - 기타
제곱법(Mid-square), 무작위법 등
11. 알고리즘 설계 기법
- 분할 정복 (Divide and Conquer)
문제를 분할 → 해결 → 결합
예) 병합정렬, 퀵정렬 - 동적 계획법 (Dynamic Programming)
부분 문제 결과를 저장·재사용
예) 피보나치, 배낭 문제 - 그리디 (Greedy)
매 단계에서 최적 선택
예) 크루스칼, 프림
⚠ 항상 최적해 보장 X - 백트래킹 (Backtracking)
모든 경우 탐색 + 가지치기
예) N-Queen, 스도쿠
- DP ↔ 분할정복: 중복 부분 문제 유무
- 그리디: 지역 최적 ≠ 전체 최적 가능
- 백트래킹: 상태공간트리 + 가지치기
- 해싱 핵심: 충돌 최소화
12. 통합 개발 환경 (IDE)
- 개발에 필요한 도구를 하나의 인터페이스로 제공
- 주요 기능
- Compile: 고급언어 → 기계어 변환
- Debugging: 오류 수정
- Deployment: 사용자에게 전달
- 예: 이클립스(IBM), 비주얼 스튜디오(MS), Xcode(Apple), 안드로이드 스튜디오(Google)
13. 인스펙션 (Inspection)
- 개발 산출물 정적 검토 기법
- 절차:
계획 → 사전교육 → 준비 → 인스펙션 회의 → 수정 → 후속조치
14. 리팩토링 (Refactoring)
- 기능 변경 없이 내부 구조 개선
- 목적: 유지보수성 향상, 설계 이해 용이, 수정 비용 감소
15. SW 구현 단계
- 코딩 계획 → 코딩 → 컴파일 → 테스트
16. 제품 SW 패키징 시 고려사항
- 보안
- 사용자 편의성
- 암호화 알고리즘 적용
- 다양한 기기 연동
17. 인터페이스 보안을 위한 네트워크 솔루션
- IPSec
- SSL
- S-HTTP

18. 정렬 방법
1. 선택 정렬 (Selection Sort)
- 최소값을 찾아 앞자리와 교환
- 교환 횟수 적음
- 시간복잡도: O(n²)

2. 삽입 정렬 (Insertion Sort)
- 앞부분은 정렬된 상태 유지
- 새 원소를 알맞은 위치에 삽입
- 거의 정렬된 경우 빠름
- 시간복잡도: O(n²)

3. 버블 정렬 (Bubble Sort)
- 인접한 두 값 비교 후 교환
- 큰 값이 오른쪽으로 이동
- 가장 비효율적
- 시간복잡도: O(n²)

'정보처리기사' 카테고리의 다른 글
| 정보처리기사 1과목 기출 문제 오답 노트 (0) | 2026.01.24 |
|---|---|
| 5단원 정보시스템 구축 관리 개념 요약 (0) | 2026.01.24 |
| 4단원 프로그래밍 언어 활용 개념 요약 (0) | 2026.01.24 |
| 3단원 데이터베이스 구축 개념 요약 (0) | 2026.01.24 |
| 1단원 소프트웨어 설계 개념 요약 (0) | 2026.01.24 |