개발새발

2단원 소프트웨어 개발 개념 요약 본문

정보처리기사

2단원 소프트웨어 개발 개념 요약

비숑주인 2026. 1. 24. 01:38

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-모델 연계)

  1. 단위 테스트 (Unit): 최소 단위(모듈) 기반. 구조 기반(화이트박스) 및 기능성 우선.
  2. 통합 테스트 (Integration): 모듈 통합 과정의 오류 탐지.
    • 하향식 (Top-down): 상위 → 하위. 스텁(Stub) 사용.
    • 상향식 (Bottom-up): 하위 → 상위. 클러스터드라이버(Driver) 사용.
  3. 시스템 테스트 (System): 실제 사용 환경과 유사한 환경에서 기능/비기능 점검.
  4. 인수 테스트 (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²)