[정보처리기사 실기] 10장 애플리케이션 테스트 관리 - 애플리케이션 성능 개선

2022. 4. 26. 22:05정보처리기사/실기

728x90
반응형

애플리케이션 성능 분석

애플리케이션 성능 점검 개요

(1) 애플리케이션 성능 측정 지료

  • 처리량 : 주어진 시간에 처리할 수 있는 트랜잭션 수, 앱의 경우 시간당 페이지 수로 표현
  • 응답 시간 : 이렵 마친 후, 앱의 응답 출력이 개시될 때 까지의 시간, 클릭으로 메뉴가 나타나는 시간
  • 경과 시간 : 요구 입력 시점부터 트랜잭션 처리 후 그 결과의 출력이 완료할 때까지 걸리는 시간
  • 자원 사용률 : 트랜잭션을 처리하는 동안 사용하는 CPU 사용량, 메모리 사용량, 네트워크 사용량

(2) 유형별 성능 분석 도구

  • 성능 분석 스트레스 점검 도구, 모니터링 도구

(3) 성능 분석 도구 유형

  • 성능 테스트 도구
    • JMeter : http, ftp, ldap 다양한 프로토콜 지원하는 안전성, 확장성, 부하, 기능 테스트 도구 : 크로스 플랫폼
    • LoadUI : UI 통해 http, jdbc 주로 웹 서비스 대상으로 서버 모니터링 지원 부하 테스트 : 크로스 플랫폼
    • OpenSTA : http, https 지원하는 부하 테스트 및 생산품 모니터링 도구 : 윈도우즈
  • 시스템 모니터링 도구 
    • Scouter : 단일 뷰 통합 실시간 모니터링, 튜닝에 최적화된 인프라 통합 모니터링 도구 : 크로스 플랫폼
    • Zabbix : 웹 기반 서버, 서비스, 앱 모니터링 도구 : 크로스 플랫폼

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

- DB 연결 및 쿼리 실행, 내부적인 요인과 외부적인 요인, 기타 환경 설정이나, 네트워크 문제로 구분

 

(1) 성능 저하 원인 : 디비 연결 위해 Connection 객체 생성하거나 쿼리 실행, 로직에서 성능 저하 또는 장애가 빈번 발견

  • DB Lock : 데이터 조회, 과도한 업데이트, 인덱스 생성 시 발생한 현상, 작업은 락의 해제 시까지 대기하거나 타임 아웃
  • DB Fetch : 대량의 데이터 요청이 들어올 경우 읍답 시간 저하 현상 발생, 세트에서 마지막 위치로 커서를 옮기는 작업이 빈번한 경우 응답 시간 저하 현상 발생
  • Connection Leak : jdbc 객체 사용 후 종료하지 않을 경우 발생
  • Connection Pool Size : 너무 작서나 크게 설정한 경우 성능 저하 현상이 발생할 가능성 존재
  • Commit : 확정되지 않고 커넥션 풀에 반환될 떄 성능 저하 가능성 존재

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

- 웹 앱의 인터넷 접속 불량, 특정 파일의 업로드 다운로드 인한 성능 저하, 정상적으로 처리되지 않은 오류 처리로 인한 성능 저하

 

(3) 외부 호출로 인한 성능 저하 원인 : 외부 트랜잭션이 장시간 수행되거나, 타임아웃이 일어나는 경우 성능 저하 현상이 발생

 

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

  • 환경 설정으로 인한 성능 저하 : 스레드 풀, 힙 메모리 의 크기르 너무 작게 설정하면 힙 메모리 출 현상 발생 성능 저하 가능성 존재
  • 네트워크 장비로 인한 성능 저하 : 라우터 스위치 등 네트워크 관련 장비 간 데이터 전송 실패 또는 전송 지연에 따른 데이터 손실 발생 시 애플리케이션 성능 저하 도는 장애 발생 가능성 존재

애플리케이션 성능 테스트 프로세스

(1) 케이스 작성 : 테스트 목표 및 목표값 설정해 작성, 측정 항목을 기술하여 작성, 테스트 시나리오 작성, 사전 확인 사항 작서

 

(2) 수행 절차 : 성능 테스트 도구 설치 -> 테스트 환경 설정 -> 시나리오 생성 -> 성능 테스트 실행 및 모니터링

 

애플리케이션 성능 개선

소스 코드 최적화의 이해

- 일기 쉽고 변경 및 추가가 쉬운 클린 코드를 작성하는 것, 품질 위해 기본적으로 준수 해야 할 원칙과 기준 정의

 

(1) 베드 코드 

  • 개념 : 로직을 이해하기 어렵게 작성된 코드
  • 종류 : 외계인 코드, 스파게티 코드, 알 수 없는 변수명, 로직 중복
  • 유형 : 오렴, 문서 부족, 의미 없는 이름, 높은 결함도, 아키텍처 침식

(2) 클린 코드

  • 개념 : 가독성이 높고, 단순, 의존성 줄이고, 중복 최소화해 깔끔하게 정리
  • 특징 : 중복 코드 제거로 앱 설계 개선, 가독성 좋아 기능 쉽게 이해, 버그 찾기 쉽고, 프로그래밍 속도 빠르다
  • 원칙 : 가독성, 단순성, 의존성 최소, 중복성 제거, 추상화
  • 소스 코드 최적화 기법의 유형 : 의미 있는 이름, 간결하고 명확한 주석, 보기 좋은 배치, 작은 함수, 읽기 쉬운 제어 흐름, 오류 처리, 클래스 분할 배치, 느슨한 결합 기법 적용, 코딩 형식 기법 적용

소스 코드 품질 분석

(1) 개념 : 코딩 스타일, 표준, 복잡고 존재하는 메모리 누수 현상, 스레드의 결함 등 발견하기 위한 활동, 정적 분석과 동적 분석 도구 존재

 

(2) 품질 분석 도구

  • 정적 분석 도구 : pmd, cppcheck, sonarqube, checkstyle, ccm, cobertura
  • 동적 분석 도구 : avalanche, valgrind

애플리케이션 성능 개선 방안

(1) 소스 코드 최적화 기법 적요 : 개발 프레임워크의 코딩 표준 설정, 인터페이스 클래스 이용 느슨한 결합 코드 구현, 추상화 된 자료구조 구현해 의존성 최소

 

(2) 아키텍처 조정 통한 성능 개선 : 객체의 생성과 사용을 분리 의존성 최소, 팩토리 메서드 패턴 이용 성능 개선 방안

 

(3) 프로그램 호출 순서 적용 : 호출 함수 먼저 코딩, 호출되는 함수는 나중에 배치, 애플리케이션 성능 개선, 연관된 내용 세로로 가갑게 작성 밀집도 높이고, 유사성 높은 함순 코드끼리 가깝게 배치

 

(4) 소스 코드 품질 분석 도구 활용 :

  • 메모리 사용 최적화 (StringBuffer, StringBuilder) : 루프내 불필요한 메소드 호출이 반복되지 않도록 코딩
  • 입출력 발생 푀소화 적용 : 버퍼를 사용하거나 BufferedReader를 사용해 입출력 발생 최소화 성능 개선
  • System.out.println() 사용 제외 : 대기 시간 발생, Log4j 로거를 사용해 성능 개선

(5) 리팩토링을 통한 성능 개선

  • 개념 : 유지보수 생산성 향상 목적으로 기능 변경하지 않고, 복잡한 소스 코드 수정, 보완하여 가용성 및 가독성 높이는 기법, 단순화해 유지보수성 향상
  • 목적 : 유지보수성 향성, 유연한 시스템, 생산성 향상, 품질향상
728x90
반응형