2. 소프트웨어 개발

 2.4 애플리케이션테스트 관리

 2.4.4 애플리케이션 성능 개선


1. 알고리즘

 

1.1 알고리즘 개요

 

1. 알고리즘이란?

알고리즘은 수학과 컴퓨터과학, 언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말한다.

대부분의 알고리즘은 유한한 수의 규칙에 따라 구별 가능한 기호들을 조작하여 입력 정수에서 출력 정수를 생성하기 위한 일반화된 작업을 정의한다.

 

2. 알고리즘 기술 방법

자연어, 의사코드, 순서도, 프로그래밍 언어, 인터프리터가 작업하는 제어 테이블, 유한상태 기계의 상태도 등으로 표현할 수 있다.

알고리즘 개발은 문제 정의 -> 모델 고안 -> 명세 작성 -> 설계 -> 검증 -> 분석-> 구현 -> 테스트 -> 문서화의 순서로 개발한다.

 

3. 알고리즘 구현 사례

가장 단순한 알고리즘 가운데 하나는 임의로 나열된 숫자를 가운데 가장 큰 수를 찾는것이다.

 

1.2 알고리즘 분류

 

1. 소프트웨어 구현 시 적용되는 알고리즘

재귀적 알고리즘, 연역적 알고리즘, 결정록적 알고리즘, 근사 알고리즘, 양자 알고리즘 등이 사용된다.

 

2. 소프트웨어 설계 시 적용되는 알고리즘

무차별 대입 공격, 분할 정복 알고리즘, 그래프 순회, 분기 한정법, 확률적 알고리즘, 리덕션, 백 트래킹 등이 사용된다.

 

3. 최적화 문제에 적용되는 알고리즘

선형 계획법, 동적 계획법, 탐욕 알고리즘, 휴리스틱 함수 등이 사용된다.

 

4. 이론적 분야에 적용되는 알고리즘

검색 알고리즘, 정렬 알고리즘, 수치 알고리즘, 그래프 알고리즘, 문자열 알고리즘, 암호학적 알고리즘, 기계학습, 데이터압축 등이 사용된다.

 

1.3 알고리즘 복잡도 측정

 

1. O(1)

n에 관계없이 일정시간 이하에서 수행되는 알고리즘이다

예) 파일의 첫 번쨰 바이트가 널인지 검사하는 것

 

2. O(log n)

log2n에 비례하는 시간 이하에 수행되는 알고리즘이다.

예) 이진 탐색

 

3. O(nlogn)

n에 대략 비례할 수 있는 시간 이하에 수행되는 알고리즘이다.

예) 정렬 알고리즘

 

4. O(n2)

n2에 비례하는 시간 이하에 수행되는 알고리즘이다.

예) 최장 공통 부분 수열 문제

 

5. O(n3)

n3에 비례하는 시간 이하에 수행되는 알고리즘이다.

 

1.4 정렬 알고리즘

 

1. 정렬 알고리즘이란?

여러원소로 구성된 리스트에서 이 원소들을 크기 순서대로 재배치하는 것

 

2. 선택 정렬

최소원소를 찾아 제자리에 위치시키는 기법 

 

3. 버블 정렬

왼쪽부터 모든 인접한 두 키를 비교한 후 왼쪽의 키가 더 크면 오른쪽의 키와 자리바꿈을 통하여 정렬해 나가는 방법

 

4. 삽입 정렬

왼쪽부터 모든 인접한 두 키를 비교한 후 왼쪽의 키가 더 크면 오른쪽의 키와 자리바꿈을 통하여 정렬해 나가는 방법

 

5. 기수 정렬

낮은 자리수부터 비교하여 정렬해 간다는 것을 기본 개념으로 하는 정렬 알고리즘이다. 기술정렬은 비교 연산을 하지 않으며 정렬 속도가 빠르지만 데이터 전체 크기에 기수 테이블의 크기만한 메모리가 더 필요하다.

 

2. 소스코드 품직 분석 도구

 

2.1 소스코드 품질분석 도구 개요

 

1. 소스코드 품질분석 도구란?

소스코드에 대한 코딩 스타일, 설정된 코딩 표준, 코드의 복잡도, 코드 내에 존재하는 메모리 누수 현황, 스레드의 결함 등을 발견하기 위하여 사용하는 분석 도구이다.

소스 코드 품질 분석도구는 정적 분석 도구와 동적 분석 도구가 있다.

 

2. 정적 분석 도구

작성된 소스 코드를 실행시키지 않고, 코드 자체만으로 코딩 표준 준수 여부, 코딩 스타일 적정 여부, 잔존 결함 발견 여부를 확인하는 코드 분석 도구이다.

사전에 결함을 발견하고 예방하는 도구, 코딩 표준 준수 여부를 분석하는 도구, 소스 코드의 복잡도를 계산하는 도구 등이 있다.

 

3. 동적 분석 도구 

애플리케이션을 실행하여 코드에 존재하는 메모리 누수 현황을 발견하고, 발생한 스레드의결함 등을 분석하기 위한 도구이다.

 

3. 코드 최적화

 

3.1 소스코드 최적화 개요

 

1. 소스코드 최적화를 해야 하는 이유

소스코드 최적화는 읽기 쉽고 변경 및 추가가 쉬운 클린코드를  작성하는 것으로, 소스코드 품질을 위해 기본적으로 지킬 원칙과 기준을 정의하고 있다.

소스 코드는 지속적으로 변경이 되는데, 소프트웨어 구조와 실행 시간 및 자원 사용량 측면에서 비효울적인 형태로 변경이 될 수 있다. 이 때문에 소스코드는 지속적으로 최적화를 해야 한다.

 

2. 나쁜 코드

나쁜 코드는 다른 갭라자가 로직을 이해하기 어렵게 작성된 코드이다. 대표적인 사례로 처리 로직의 제어가 정제되지 않고 서로 얽혀 있는 스파게티 코드, 변수나 메소드에 대한 이름 정의를 알 수 없는 코드, 동일한 처리 로직이 중복되게 작성된 코드 등이 있다.

이러한 나쁜 코드가 많아질 경우 잦은 오류가 발생할 가능성이 높다.

소스코드 이해가 안되어 유지보수 비용이 높아진다.

 

3. 외계어 코드

아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 어려운 코드를 의미한다.

 

4. 클린 코드

잘 작성되어 가독성이 높고, 단순하며, 의존성을 줄이고, 중복을 최소화하여 깔끔하게 잘 정리된 코드를 말한다.

클린 코드가 많을 수록 애플리케이션 설계가 개선된다.

가독성이 높으므로 유지보수비가 낮아지고, 변경 속도가 빠르다.

 

3.2 소스코드 최적화 기법

 

1. 클래스 분할 배치 기법

클래스는 하나의 역할, 책임만 수행할 수 있도록 응집도를 높이고, 크기를 작게 작성한다.

 

2. 클래스 간 느슨한 결합 기법

클래스의 자료 구조, 메소드를 추상화할 수 있는 인터페이스 클래스를 이용하여, 클래스간의 의존성을 최소화 한다.

 

3. 코딩 형식 기법

코딩 시 줄바꿈을 확실히 지켜야 한다.

호출하는 함수를 먼저 배치하고, 호출되는 함수는 나중에 배치한다.

변수 선언 위치를 지역 변수는 각 함수 맨 처음에 선언한다.

함수간에 주고하는 파라메터는 이름만 보고도 어떠한 파라메터인지 파악할 수 있도록 이름을 부여한다.

변수 이름은 기억하기 좋은 이름, 발음이 쉬운 용어, 접두어 사용 등 기본적인 명명 규칙을 정의한다.

 

4. 주석문 사용을 습관화

코딩 시 항상 주석문을 사용하여 다른 개발자가 이해하기 쉽도록 설명한다.

 

3.3 아키텍처 조정을 통한 코드 최적화 

 

1. SpringMVC 구조 활용

SpringMVC는 사용자 화면 계층에 적용하면 코드 최적화에 도움이 된다.

디스패처 서블릿은 Spring MVC 프레임워크의 Front Controller, 웹 요청과 응답의 수명주기를 주관하는 컴포넌트이다.

핸들러매핑은 웹 요청시 해당 URL에 매핑되는 컨트롤러를 검색, 결정하는 컴포넌트이다.

컨트롤러는 비즈니스 로직을 수행하고 결과를 Model And View에 반영하는 컴포넌트이다.

 

모델앤뷰 는 수행 결과와 반영하는 모델 데이터 객체, 이동할 페이즈 정보 및 뷰로 이루어져 있다.

뷰리졸버는 결과를 표시할 어떤 뷰를 선택할지 결정한다.

뷰는 결과 데이터인 모델 객체를 표현한다.

 

2. 팩토리 메소드 패턴 활용

객체의 생성과 사용을 분리함으로써 소프트웨어의 의존성을 최소화 하기 위하여 팩토리 메소드 패턴을 이용하여 성능 개선을 한다.

 

3.4 프로그램 호출 손서 조정을 통한 성능 개선

 

1. 호출하는 프로그램을 먼저, 호출 당하는 프로그램을 나중에 작성

호출하는 함수를 먼저 코딩하고, 호출되는 함수는 나중에 배치한다.

 

2. 루프 내 불필요한 메소드 호출이 반복되지 않도록 코딩

루프 내에서 메소드의 호출이 반복되는 코드를 루프 진입 전에 호출하도록 소스코드를 수정한다.

 

3.5 리팩토링 기법

 

1. 리팩토링 이란?

코드의 외부 행위는 바꾸지 않고 내부 구조를 개선시켜 소프트웨어 시스템을 변경하는 프로세스이다.

이는 버그 발생의 기회를 최소화 시켜주는 코드 정화 방법이다.

 

3.6 성능 검사

 

1. 성능 검사란?

시스템 검사의 종류 중 통합 시스템의 맥락에서 소프트웨어의 실시간 성능을 비교 검사하며, 모든 단계에서 수행된다.

'자격증 > 정보처리기사' 카테고리의 다른 글

정보처리기사 24일차  (0) 2021.02.03
정보처리기사 23일차  (0) 2021.02.02
정보처리기사 21일차  (0) 2021.02.02
정보처리기사 20일차  (0) 2021.01.30
정보처리기사 19일차  (0) 2021.01.30

+ Recent posts