애플리케이션 성능 개선
애플리케이션 성능 개선
알고리즘
개념
수학과 컴퓨터 과학, 언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것. 어떤 작업을 수행하기 위해 입력을 받아 원하는 출력을 만들어 내는 과정.
사전적 의미 : 어떤 문제를 해결해 나가는 특별한 방법 또는 문제 해결을 위해 컴퓨터로 이용될 수 있는 명확한 방법.
알고리즘 표현 방법
알고리즘 기술 방법
- 순서도(흐름도 - flowchart)
- 자연어 (일상 언어)
- 의사 코드 (Pseudo code)
- 프로그래밍 언어
- 인터프리터가 작업하는 제어 테이블
- 유한 상태 기계의 상태도 등
알고리즘 성능 표현 방법
- 시간적 복잡도 (Time Complexity) : 시간 효율성 위해 알고리즘 수행에 필요한 시간의 양을 측정하고 단위 연산이 몇 번이나 수행되는지 입력 크기에 따라서 평가하는 방법
- 점근적인 복잡도 (Asymptotic Complexity) : 알고리즘 복잡도 평가 시 주요 항 이외의 항과 주요 항에 있는 계수도 무시하고 꼭 필요한 부분 (매개변수 N의 값)이 무한에 가까워 졌을 때 복잡도가 어떻게 되느냐에 중점하는 평가 방법
알고리즘 표기법 유형
- 알고리즘 표기법 유형
표기법 | 개념 |
Big-O(빅 오) | 입력 데이터가 최악일 때 기준으로 알고리즘 효율 평가를 위해 사용되는 수학적 기호 (알고리즘 수행시간 상한을 표시) |
Big-Ω(빅 오메가) | 입력 데이터가 최상일 때 기준으로 알고리즘 효율 평가를 위해 사용되는 수학적 기호 (알고리즘 수행시간 하한을 표시) |
Big-θ(빅 세타) | 빅오, 빅오메가 둘 다를 포함하는 개념으로, 알고리즘 수행시간 하한인 동시에 상한을 표시 |
- O-Notation (빅 오 표기법) 유형
유형 | 설명 | 사례 |
O(1) |
|
Hash Function |
O(log N) |
|
Binary Search |
O(N) |
|
Find item |
O(N log N) |
|
Quick Sort |
O(N²) |
|
Bubble Sort |
O(N³) |
|
Finding the Sortest Path |
O(Nⁿ) |
|
Dynamic Programming |
알고리즘 표현을 위한 순서도
순서도 기본
기호 | 이름 | 의미 |
단자 (Terminal) | 순서도 시작과 끝 | |
준비 (Preparation) | 변수 선언 및 초기 값 부여 / 배열 선언 | |
처리 (Process) | 값 계산 또는 대입 기호 | |
판단 (Decision) | 참 거짓 판단 또는 조건에 맞는 경로 분기 | |
수동 입력 (Console) | 키보드 이용한 수동 입력 | |
입/출력 (Input/Output) | 데이터 입출력 | |
문서 (Document) | 처리 결과 프린터로 출력 | |
흐름선 (Flow Line) | 각종 처리 기호의 처리 흐름 연결 | |
연결자 (Connector) | 다른 곳으로의 연결 표시 | |
순환 구조 (Loop) | 상단에는 각각 초기화, 최종 값, 증가치 의미 |
순서도 기본 모형
직선형 | 분기형 | 반복형 |
처음 시작부터 마지막 종료까지 단계적으로 진행 | 조건에 따라 실행 내용이나 순서 달리하는 형태 | 조건 만족할 때까지 일정한 내용 반복 수행 |
알고리즘 기법
기법 | 설명 |
분할과 정복 (Divide and Conquer) |
문제를 나눌 수 없을 때까지 나누고 각각을 풀면서 다시 병합하여 문제의 답을 얻는 알고리즘 |
동적 계획법 (Dynamic Programming) |
어떤 문제를 풀기 위해 그 문제를 더 작은 문제의 연장선으로 생각하고 과거에 구한 답을 활용하는 방식의 알고리즘 |
탐욕법 (Greedy) |
결정을 해야할 때마다 그 순간 가장 좋다는 것을 해답으로 선택함으로써 최종적인 해답에 도달하는 방식의 알고리즘 |
백트래킹 (Backtracking) |
어떤 노드의 유망성을 점검한 후 유망하지 않으면 그 노드의 부모 노드로 되돌아가 다른 자손 노드를 검색하는 알고리즘 |
정렬 알고리즘
개념
컴퓨터 기억공간 내 여러 원소로 구성된 배열에서 레코드 특정 항목들을 순서 기준에 따라 재배치하는 알고리즘
01 선택 정렬
최소 원소를 찾아 제자리에 위치
|
|
02 버블 정렬
왼쪽부터 모든 인접한 두 원소를 비교한 후 왼쪽의 원소가 더 크면 오른쪽 원소와 자리 변경하여 정렬해 나가는 방법
|
|
|
03 삽입 정렬
두 번째 자료를 비교 기준 Key로 설정하고 그 앞의 자료들과 비교하여 삽입 위치를 지정한 후 자료 삽입하여 정렬하는 알고리즘. 자료 삽입 위치를 찾았다면 그 위치에 자료를 삽입하기 위해 한 칸씩 자료들을 뒤로 이동시킴.
|
|
|
04 기수 정렬
낮은 자리 수부터 비교하여 정렬해 간다는 것을 기본 개념으로 하는 정렬 알고리즘. 비교 연산을 하지 않으며 정렬 속도가 빠르지만 데이터 전체 크기에 기수 테이블 크기만한 메모리가 더 필요함
|
|
소스 코드 품질분석 도구
개념
소스 코드에 대한 코딩 스타일, 설정된 코딩 표준, 코드 복잡도, 코드 내 존재하는 메모리 누수 현황, 스레드 결함 등을 발견하기 위해 사용하는 분석 도구.
소스코드 품질도구 종류
정적 분석 도구 (Static code analyzer)
- 작성된 소스 코드를 실행하지 않고 코드 자체만으로 코딩 표준 준수 여부, 코딩 스타일 적정 여부, 잔존 결함 발견 여부 확인하는 코드 분석 도구
- 사전에 결함 발견하고 예방하는 도구, 코딩 표준 준수 여부 분석 도구, 소스 코드 복잡도 계산 도구 등이 있음
동적 분석 도구 (Dynamic code analyzer)
- 애플리케이션 실행하여 코드에 존재하는 메모리 누수 현황 발견 및 발생한 스레드 결함 등을 분석하기 위한 도구
구분 | 도구명 | 도구 설명 | 지원 환경 | 개발도구 지원 |
정적 분석 도구 |
pmd | 자바 및 타 언어 소스 코드에 대한 버그, 데드 코드 (Dead code) 분석 | Linux, Windows |
Eclipse, NetBeans |
Eclipse에 임베드 되어 사용됨 | ||||
cppcheck | C/C++ 코드에 대한 메모리 누수, 오버플로우 등 문제 분석 | Windows | Eclipse, gedit, Visual Studio |
|
배열 범위 체크, 클래스 체크, 메모리 누수 체크, null pointer 체크 등 발생 가능한 결함에 대한 오류 검출 | ||||
SonarQube | 소스 코드 품질 통합 플랫폼, 플로그인 확장 가능 | Cross- Platform |
Eclipse | |
checkstyle | 자바 코드에 대한 코딩 표준 준수 검사 도구 | Cross- Platform |
Ant, Eclipse, NetBeans |
|
Sun Check RuleSet 제공 | ||||
CodeSonar | Microsoft C# assembly 파일과 디버깅 정보 (.pdb 파일) 기반으로 분석 수행하여 이에 상응하는 소스 코드 (.cs 파일) 통해 검출된 결과 출력 | Windows | Eclipse, Visual Studio |
|
Splint | C 코드 분석하여 오류 검출하는 도구 | Cross- Platform |
Visual Studio | |
코드 복잡도 |
ccm | 다양한 언어 코드 복잡도 분석 도구로 Linux, Mac 환경 CLI 형태 지원 | Cross- Platform |
Visual Studio |
Cobertura | Jcoverage 기반 테스트 커버리지 측정 도구 | Cross- Platform |
Ant, Maven | |
McCabe lQ | 컴포넌트 McCabe 복잡도 계산 | Cross- Platform |
Eclipse, Visual Studio |
|
동적 분석 도구 |
Avalanche | Valgrind 프레임워크 및 STP 기반 소프트웨어 에러 및 취약점 동적 분석 도구 | Linux, Android |
|
Valgrind | 자동화된 메모리 및 쓰레드 결함 발견 분석 도구 | Cross- Platform |
Eclipse, NetBeans |
|
메모리 관리에 관련된 오류 검출 및 Cache, Heap, Multi Thread 프로파일링 지원하는 오픈소스 도구 |
320x100
'정보처리기사 > 필기' 카테고리의 다른 글
[정보처리기사] Part02-05-01. 인터페이스 설계 확인 (16) | 2023.01.18 |
---|---|
[정보처리기사] Part02-04-03. 애플리케이션 성능 개선 (2) (5) | 2023.01.16 |
[정보처리기사] Part02-04-02. 애플리케이션 통합 테스트 (13) | 2023.01.12 |
[정보처리기사] Part02-04-01. 애플리케이션 테스트케이스 설계 (33) | 2023.01.11 |
[정보처리기사] Part02-03. 데이터조작 프로시저 최적화 (34) | 2023.01.08 |
댓글