본문 바로가기
정보처리기사/소프트웨어 개발

애플리케이션 성능 개선

by jhwannabe 2023. 7. 13.

애플리케이션 성능 개선

성능 측정 지표

  • 처리량(Throughput) : 주어진 시간에 처리할 수 있는 프로세스 처리 수
  • 응답 시간(Response Time) : 데이터 입력 완료 시부터 응답 출력이 게시될 때까지의 시간
  • 경과 시간(Turnaround Time) : 입력한 시점부터 그 결과의 출력이 완료할 때까지 걸리는 시간
  • 자원 사용률(Resource Usage) : 프로세스 처리 중 사용하는 CPU 사용량, 메모리 사용량, 네트워크 사용량

유형별 성능 분석 도구

  • 성능/부하/스트레스(Performance/Load/Stress) 점검 도구 : 측정 지표인 처리량, 응답 시간, ㄱ여과 시간 등을 점검하기 위해 가상의 시스템 부하나 스트레스를 통해 성능을 분석하는 도구
  • 모니터링(Monitoring) 도구 : 성능 모니터링, 성능 저하 원인 분석, 시스템 부하량 분석, 장애 진단, 사용자 분석, 용량 산정 등의 기능을 통하여 애플리케이션 실행 시 자원 사용량을 확인하고 분석 가능한 도구

위험 감시(Risk Monitoring)

  • 위험 요소 징후들에 대하여 계속적으로 인지하는 것

 

애플리케이션 성능 저하 원인

데이터베이스 연결 및 쿼리 실행 시 발생되는 성능 저하 원인

DB Lock - 과도한 데이터 조회/업데이트/인덱스 생성 시 발생
- Lock의 해제 시까지 대기하거나 처리되지 못하고 종료됨
불필요한 DB Fetch - 필요한 데이터보다 많은 대량의 데이터 요청이 들어올 경우 발생
- 결과 세트에서 마지막 위치로 커서를 옮기는 작업이 빈번한 경우 응답 시간 저하 현상이 발생
연결 누수
(Connection Leak)
DB 연결과 관련한 JDBC 객체를 사용 후 종료하지 않을 경우 발생
부적절한 Connection
Pool Size
커넥션 플 크기가 너무 작거나 크게 설정한 경우 발생
기타 트랜잭션이 Commit 되지 않고 커넥션 풀에 반환도거나, 잘못 작성된 코드로 인해 불필요한 Commit이 자주 발생하는 경우 발생

내부 로직으로 인한 성능 저하 원인

  • 웹 애플리케이션의 인터넷 접속 불량이나 대량의 파일로 인해 부하가 발생하는 경우
  • 정상적으로 처리되지 않은 오류 처리로 인한 부하나 트랜잭션이 수행되는 동안 외부 트랜잭션(외부 호출)이 장시간 수행되거나, 타임아웃이 일어나는 경우

잘못된 환경 설정이나 네트워크 문제로 인한 성능 저하 원인

  • 환경 설정으로 인한 성능 저하 : Thread Pool, Heap Memory의 크기를 너무 작게 설정하면 Heap Memory Full 현상 발생
  • 네트워크 장비로 인한 성능 저하 : 라우터, L4 스위치 등 네트워크 관련 장비 간 데이터 전송 실패 또는 전송 지연에 따른 데이터 손실 발생

 

알고리즘

알고리즘

  • 주어진 과제를 해결하기 위한 방법과 절차를 의미
  • 알고리즘은 자연어, 의사코드(Pseudocode), 순서도, 프로그래밍 언어를 이용하여 표현 가능

알고리즘 설계 기법

분할 정복법
(Divide & Conquer)
- 제시된 문제를 분할이 불가할 때까지 나누고, 각 과제를 풀면서 다시 병합해 문제의 답을 얻는 Top-Down 방식

  1. 분할(Divide) : 정복이 필요한 과제를 분할이 가능한 부분까지 분할
  2, 정복(Conquer) : 분할된 하위 과제들을 모두 해결(정복)
  3. 결합(Combine) : 정복된 해답을 모두 취합(결합)

예) 퀵 정렬 알고리즘,병합(합병) 정렬 알고리즘
동적 계획법
(Dynamic Programming)
- 주어진 문제를 해결하기 위해 부분 문제에 대한 답을 계속적으로 활용해 나가는 Bottom-Up 방식

  1. 부분 문제로 분리
  2. 가장 낮은 단계의 부분 문제 해답 계산
  3. 이 부분 문제의 해답을 이용해 상위 부분 문제를 해결

- 이전 단계의 해답을 활용하기 위해 반드시 기억할 수 있는 저장소가 필요하기 때문에 속도는 빠르지만, 공간 복잡도가 커지는 단점이 있음

예) 플로이드 알고리즘, 피보나치 수열 알고리즘
탐욕법
(Greedy Method)
- 국소적인 관점에서 최적의 해결 방법을 구하는 기법으로 최적의 해결 방법을 구하는 기법으로 초적의 해결 방법을 구하지는 못하나 동적 계획법보다 효율적이라고 할 수 있음

예) 크루스칼 알고리즘, 다익스트라 알고리즘
퇴각 검색법
(Backtracking)
- 어떤 문제의 최적해를 구하기 위해 모든 가능성을 찾아가는 방법
- N-Queen 문제 해결 시에 응용됨
- 동적 계획법과 같이 기억할 저장소를 필요로 함
분기 한정법
(Branch & Bound)
- 정해진 범위(Bound)를 벗어나는 값들은 가지치기(Branch)해가며 결과값을 추적해 나가는 방식

예) 최적 우선 탐색(Best First Search) 알고리즘, A* 알고리즘
근사 해법
(Approximation Algorithm)
- 복잡도가 매우 높은 문제에 대해 가장 근사치의 값을 구하는 기법
- NP-Hard 문제를 해결하기 위해, 주어진 시간에 최적해에 가장 가까운 답을 찾는 결정성 알고리즘을 구현하는 기법
- 시간 복잡도, 공간 복잡도, 정밀도를 척도로 평가됨

예) 근사 알고리즘

시간 복잡도에 따른 알고리즘

  • 시간 복잡도는 알고리즘이 문제를 해결하기 위한 시간(연산)의 횟수를 말함
  • 시간 복잡도를 고려하는 것은 최적화를 위해 필요함
  • 알고리즘의 소요 시간에 대한 정확한 평가는 어려워 자료의 수 n이 증가할 때 시간이(Time Complexity) 증가하는 대략적인 패턴을 의미함
  • 시간 복잡도 Big-O 표기법
O(1) 상수 시간의 복잡도
입력값 n이 주어졌을 때, 문제를 해결하는데 오직 한 단계만 거침 (해시 함수)
O(log_2⁡n) 로그 시간의 복잡도
입력값 n이 주어졌을 때, 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듦 (이진 탐색)
O(nlog_2⁡n) 선형 로그 시간의 복잡도
문제 해결을 위한 단계 수는 nlog_2n번의 수행 시간을 가짐 (퀵 정렬, 병합(합병) 정렬)
O(n) 선형 시간의 복잡도
문제를 해결하기 위한 단계의 수와 입력값 n이 1:1 관계임 (순차 탐색)
O(n^2) 제곱 시간의 복잡도
문제를 해결하기 위한 단계의 수는 입력값 n의 제곱근 (버블 정렬, 삽입 정렬, 선택 정렬)
O(C^n) 지수 시간의 복잡도
문제를 해결하기위한 단계의 수는 주어진 상수값 C의 n제곱

 

Mccabe 순환 복잡도(Cyclomatic)

순환 복잡도

  • 프로그램의 이해 난이도는 제어 흐름 난이도의 복잡도에 따라 결정되며, 복잡도를 사이클로메틱 개수에 의해서 산정하는 방법
  • 사이클로메틱의 개수와 원시 프로그램 오류의 기수는 밀접한 관계가 있음
  • 최대 10을 넘지 않도록 하며 넘으면 이를 분해하도록 함

복잡도 계산 방식

  • 복잡도 = 화살표 수 - 노드 수 + 2(제어 흐름 그래프를 통해 파악)
  • 복잡도 = 영역 수(폐 구간) + 1(제어 흐름 그래프를 통해 파악)
  • 복잡도 = 의사 결정 수 + 조건 수 + 1(프로그램 코드상에서 파악, 제어 흐름도를 그리기 어려운 경우 활용함)
728x90
반응형

'정보처리기사 > 소프트웨어 개발' 카테고리의 다른 글

인터페이스 구현  (0) 2023.07.13
소스 코드 최적화  (0) 2023.07.13
결함 관리  (0) 2023.07.12
통합 테스트  (0) 2023.07.12
테스트 커버리지  (0) 2023.07.12