2과목 | 소프트웨어 개발
자료 구조의 분류
- 선형 구조 :
배열 선형 리스트 스택 큐 데크
- 비선형 구조 :
트리 그래프
스택의 응용 분야
- 함수 호출의 순서 제어
- 인터럽트의 처리
- 수식 계산 및 수식 표기법
- 컴파일러를 이용한 언어 번역
- 부 프로그램 호출 시 복귀 주소 저장
- 서브루틴 호출 및 복귀 주소 저장
방향/ 무방향 그래프의 최대 간선 수
- n개의 정점으로 구성
무방향 그래프에서 최대 간선 수 : n(n-1)/2
방향 그래프에서 최대 간선 수 : n(n-1)
트리
Degree, 차수 : 각 노드에서 뻗어나오는 가지의 수
단말 노드 Terminal Node : 자식이 하나도 없는 노드(디그리가 0인 노드)
이진 트리 운행법
Preorder : Root > Left > Right
Inorder : Left > Root > Right
Postorder : Left > Right > Root
퀵 정렬
- 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬하는 방법
삽입 정렬
- 예를 들어 설명
8,5,6,2,4를 삽입 정렬로 정렬
1회전 | 5, 8, 6, 2, 4
2회전 | 5, 6, 8, 2, 4
3회전 | 2, 5, 6, 8, 4
4회전 | 2, 4, 5, 6, 8
선택 정렬
n개의 레코드 중 최소값을 찾아 첫 번째 레코드 위치에 놓는다.
나머지 n-1개의 레코드 중에서 다시 최소값을 찾아 두 번째 레코드 위치에 놓는다.
버블 정렬
주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 위치를 서로 교환
힙 정렬
- 전이진 트리 이용
- 평균과 최악 모두 시간복잡도는
O(nlog2n)
2-Way 합병 정렬(Merge Sort)
- 이미 정렬되어 있는 두 개의 파일을 한 개의 파일로 합병하는 정렬
- 평균과 최악 모두 시간복잡도는
O(nlog2n)
이분 검색(이진 검색)
- 반드시 정렬된 파일이어야 검색 가능
- 비교할수록 검색 대상의 데이터의 수는 절반으로 줄어든다.
주요 해싱 함수
제산법(Division) 레코드 키를 해시표의 크기보다 큰 수 중에서 가장 작은 소수(Prime, Q)로 나눈 나머지를 홈 주소로 삼는 방식
제곱법(Mid-Square)레코드 키 값을 제곱한 후 그 중간 부분의 값을 홈 주소로 삼는 방식
폴딩법 레코드 키 값을 여러 부분으로 나눈 후 각 부분의 값을 더하거나 XOR한 값을 홈 주소로 삼는 방식
숫자 분석법(Digit Analysis) 키 값을 이루는 숫자의 분포를 분석하여 비교적 고른 자리를 필요한 만큼 택하여 홈 주소로 삼는 방식
스키마 3계층
외부 스키마 : 사용자나 응용 프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의
개념 스키마 : 데이터베이스의 전체적이고 논리적 구조, 개체 간의 관계와 제약 조건을 나타내고, 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세 정의
내부 스키마 : 물리적 저장장치의 입장에서 본 데이터베이스 구조로서, 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타냄
빌드 자동화 도구
Ant
아파치 소프트웨어 재단에서 개발한 소프트웨어, 자바 프로젝트의 공식적인 빌드 도구로 사용
Maven
Ant의 대안으로 개발한 소프트웨어
Jenkins
Java 기반의 오픈 소스 형태, 가장 많이 사용되는 빌드 자동화 도구
Gradle
Groovy를 기반으로 한 오픈 소스 형태의 자동화 도구, 안드로이드 앱 개발 환경에서 사용
소프트웨어 패키징
- 모듈별로 생성한 실행 파일들을 묶어 배포용 설치 파일을 만드는 것을 말함
- 개발자가 아닌 사용자 중심으로 진행
소프트웨어 패키징 시 고려사항
- 사용자에게 배포되는 소프트웨어이므로, 내부 콘텐츠에 대한 암호화 및 보안 고려
- 다른 콘텐츠 및 단말기 간 DRM(디지털 저작권 관리) 연동을 한다.
DRM의 구성요소
클리어링 하우스
저작권에 대한 사용 권한, 라이선스 발급, 사용량에 따른 결제 관리 등을 수행하는 곳
콘텐츠 제공자
콘텐츠를 제공하는 저작권자
패키저
콘텐츠를 메타 데이터와 함께 배포 가능한 형태로 묶어 암호화 하는 프로그램
콘텐츠 분배자
암호화된 콘텐츠를 유통하는 곳이나 사람
DRM 컨트롤러
배포된 콘텐츠의 이용 권한을 통제하는 프로그램
보안 컨테이너
콘텐츠의 원본을 안전하게 유통하기 위한 전자적 보안 장치
DRM의 기술 요소
- 암호화 : 콘텐츠 및 라이선스 암호화 기술
- 키관리 : 콘텐츠를 암호화한 키에 대한 저장 및 분배 기술
- 식별 기술 : 콘텐츠에 대한 식별 체계 표현 기술
- 정책 관리 : 라이선스 발급 및 사용자에 대한 정책 표현 및 관리 기술
- 크랙 방지 : 크랙에 의한 콘텐츠 사용 방지 기술
형상 관리 SCM
- 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발된 일련의 활동
형상 관리 기능
형상 식별 : 형상 관리 대상에 이름과 관리 번호를 부여 하고, 계층 구조로 구분하여 수정 및 추적이 용이 하도록 하는 작업
버전 제어 : 소프트웨어 업그레이드나 유지 보수 과정에서 생성된 다른 버전의 형상 항목을 관리, 이를 위해 특정 절차와 도구를 결합시키는 작업
형상 통제 : 식별된 형상 항목에 대한 변경 요구를 검토하여 현재의 기준선이 잘 반영될 수 있도록 조정하는 작업
형상 검사 : 기준선의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업
형상 기록 : 형상의 식별, 통제, 감사 작업의 결과를 기록/관리하고 보고서 작성하는 작업
⭐️ RCS | Revision Control System
- 여러 개발자가 프로젝트를 수행할 때 시간에 따른 파일 변화 과정을 관리하는 소프트웨어 버전 관리 도구
- 소스 파일을 동시에
수정하는 것을 방지
- 다른 방향으로 진행된
개발 결과를 합치거나, 변경 내용 추적할 수 있음
확인(Validation) vs 검증(Verification)
확인 : 사용자의 입장에서 요구사항에 맞게 구현되었는지 확인
검증 : 개발자의 입장에서 명세서에 맞게 만들어졌는지 점검
파레토 법칙
소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견된다는 법칙
⭐️ 화이트 박스 테스트
- 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의
논리적인 모든 경로를 테스트하여 테스트 게이스를 설계하는 방법
- 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행
- 프로그램의 제어 구조에 따라 선택, 반복 등의 분기점 부분들을 수행함으로써 논리적 경로를 제어
⭐️ 화이트박스 vs 블랙박스 테스트 종류
- 화이트 박스 테스트 종류
기초 경로 검사, 제어 구조 검사(조건 검사(Condition Testing), 루프 검사(Loop Testing), 데이터 흐름 검사(Data Flow Testing))
🖐🏻 기초 경로 검사 Base Path : 수행 가능한 모든 경로를 의미함
- 블랙박스 테스트 종류
동치 분할 검사, 경계값 분석, 원인-효과 그래프 검사, 오류 예측 검사, 비교 검사
단위 테스트
- 코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트하는 것
- 발견 가능 오류
알고리즘 오류에 따른 원치 않는 결과, 탈출구가 없는 반복문 사용, 틀린 계산 수식에 의한 잘못된 결과
통합 테스트
하향식 통합 테스트
프로그램 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법
깊이 우선 통합, 넓이 우선 통합 사용
테스트 스텁 사용
상향식 통합 테스트
프로그램 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법
테스트 드라이버 사용
테스트 드라이버
- 테스트 대상의 하위 모듈을 호출하는 도구
- 매개변수를 전달, 모듈 테스트 수행 후의 결과를 도출함
- 상위 모듈 없이 하위 모듈이 있는 경우 하위 모듈을 구동한다.
- 상향식 통합 테스트에 사용
테스트 스텁
- 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구
- 일시적으로 필요한 조건만을 가지고 있는 시험용 모듈
- 상위 모듈은 있지만 하위 모듈이 없는 경우 하위 모듈을 대체
- 하향식 통합 테스트에 사용
테스트 케이스
- 구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값
- 목표와 방법을 설정한 후 작성해야 함
테스트 오라클
참 오라클
모든 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하는 오라클로, 발생된 모든 오류를 검출할 수 있음
샘플링 오라클
특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
추정(Heuristic) 오라클
특정 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하고, 나머지 입력 값들에 대해서는 추정으로 하는 오라클
일관성(Consistent) 오라클
애플리케이션의 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지 확인
주요 최악의 시간 복잡도
O(1)
입력값에 관계 없이 일정하게 문제 해결에 하나의 단계만을 거침
스택의 삽입 삭제
O(nlog2n)
문제 해결에 필요한 단계가 n(log2n)번 만큼 수행
힙 정렬, 2-Way합병 정렬
순환 복잡도 계산
- 화살표 - 노드 수 + 2
- 내부 영역 + 외부 영역
클린 코드 작성 원칙
가독성
누구든지 코드를 쉽게 읽을 수 있도록 작성
단순성
코드를 간단하게 작성
의존성 배제
코드가 다른 모듈에 미치는 영향을 최소화
중복성 최소화
코드의 중복을 최소화
추상화
상위 클래스/메소드/함수 에서는 간략하게 애플리케이션의 특성
하위 클래스/메소드/함수 에서는 상세내용 구현
Alien Code
아주 오래되거나 참고문서 또는 개발자가 없어 유지 보수 작업이 어려운 코드
⭐️ 소스코드 품질 분석 도구 _ 정적 분석 도구
종류 : pmd, checkstyle, cppcheck
- 자료의 흐름이나 논리 흐름을 분석하여 비정상적인 패턴을 찾을 수 있음
- 실행 시키지 않고 표준이나 코딩 스타일, 결함 등을 확인
⭐️ EAI 구축 유형
Point-to-Point
애플리케이션을 1:1로 연결
Hub & Spoke
단일 접점인 허브 시스템을 통해 데이터를 전송하는 중앙 집중형 방식
Messages Bus(ESB 방식)
애플리케이션 사이에 미들웨어를 두어 처리하는 방식
Hybrid
Hub & Spoke 와 Messages Bus 의 혼합 방식
IPSec(IP Security)
- 네트워크 계층에서 IP 패킷 단위의 데이터 변조 방지 및 은닉 기능을 제공하는 프로토콜
- 암호화와 복호화가 모두 가능한
양방향 암호 방식