Ⅶ. 애플리케이션 테스트 관리 - 애플리케이션 성능 개선.
1. 애플리케이션 성능 분석
1.1 애플리케이션 성능 측정 지표 ( Tip. 처응경자 )
- 처리량 : 주어진 시간에 처리할 수 있는 트랜잭션 수 / 시간당 페이지 수
- 응답시간 : 사용자 입력 끝난 후 출력이 개시될때까지의 시간
- 경과시간 : 요구를 입력한 시점부터 결과 출력 완료 할때까지의 시간
- 자원 사용률 : 트랜잭션 처리하는 동안의 CUP사용량, 메모리사용량, 네트워크 사용량
1.2. 유형별 성능 분석 도구
- 성능/부하/스트레스 점검 도구 : 처리량, 응답시간, 경과시간 등을 점검하기 위한 도구
- 모니터링 도구 : 자원 사용량을 확인하고 분석 가능한 도구
1.3. 성능 분석 도구 유형
성능테스트 도구
- JMete : HTTP, FTP, LDAP 등 다양한 프로토콜을 지원하는 안전성, 확장성, 부하, 기능 테스트 도구
- LoadUI : UI를 통해 HTTP, JDBC등 주로 웹 서비스 대상으로 서버 모니터링을 지원하는 부하 테스트 도구
- OpenSTA : HTTP, HTTPS 지원하는 부하 테스트 및 생산품 모니터링 도구 / Windows 기반
시스템 모니터링 도구
- Scouter : 단일 뷰 통합/실시간 모니터링, 튜닝에 최적화된 인프라 통합 모니터링 도구
- Zabbix : 웹기반 서버, 서비스, 애플리케이션 모니터링 도구
2. 애플리케이션 성능 저하 원인
2.1. 데이터 베이스 관련 성능 저하 원인 ( Tip. 락페릭사커 )
- DB Lock(데이터베이스락) : 대량 조회, 과도한 업데이트, 인덱스 생성시 발생
- DB Fetch(불필요한 데이터베이스 패치) : 실제 필요 데이터 보다 대량의 데이터 요청이 들어올 경우 응답시간 저하 현상 발생
- Connection Leak(연결누수) : DB연결과 관련한 JDBC 객체를 사용 후 종료하지 않을 경우
- Connection Pool Size(부적절한 커넥션 풀 크기) 너무 작거나 크게 설정한 경우 성능 저하 가능성 존재
- Commit(확정 관련) : 트랜잭션이 확정(Commit)되지 않고 커넥션 풀에 반환될때 성능 저하 가능 / 불필요한 잦은 확정(Commit)시 성능 저하 가능
2.2. 내부 로직으로 인한 성능 저하 원인
- 웹 애플리케이션의 인터넷 접속 불량
- 특정 파일의 업로드, 다운로드로 인한 성능 저하
- 정상적으로 처리되지 않은 오류 처리로 인한 성능 저하
2.3. 외부 호출(HTTP, 소켓통신)로 인한 성능 저하
- 임의의 트랜잭션이 수행되는 동안 외부 트랜잭션(외부호출)이 장시간 수행되거나, 타임아웃이 일어나는 경우 성능저하 현상이 발생할 수 있다.
2.4. 잘못된 환경 설정이나 네트워크 문제로 인한 성능 저하 원인
- 환경설정 으로 인한 저하 : 스레드 풀, 힙메모리의 크기를 너무 작게 설정 하면 Heap Memory Full 현상 발생으로 성능 저하 가능
- 네트워크 장비로 인한 성능 저하 : 라우터, L4스위치 등 네트워크 장비간 데이터 전송 실패 또는 정송 지연에 따른 저하 가능
3. 애플리케이션 성능 테스트 프로세스
3.1. 애플리케이션 성능 테스트 케이스 작성
- 테스트 목표 및 목표값을 설정하여 작성 : 테스트 상황 및 사용자 수 , 호출 간격, TPS, 응답시간 등 목표값 설정
- 측정항목을 기술하여 작성 : TPS, 응답시간, 시스템 사용률, 거래 성공 비율 등 측정 항목에 대해 기술
- 테스트 시나리오 작성 : 성능 테스트에 대한 구체적인 방법 및 절차 작성
- 사전 확인 사항 작성 : 테스트 시작/종료 시간, 스크립트 수행 횟수, DB상태, 투입인력, 테스트 환경 등에 대해 작성
3.2. 애플리케이션 성능 테스트 수행 절차 ( Tip. 도환시성 )
- 성능 테스트 도구 설치
- 테스트 환경 설정
- 시나리오 생성
- 성능테스트 시랳ㅇ 및 모니터링
3.3. 성능 테스트 분석을 통한 성능 저하 요인 탐지
- 애플리케이션의 성능 테스트 결과 분석
- 애플리케이션의 성능 저하 요인 탐지, 분석
2. 애플리케이션 성능 개선
1.1. 나쁜 코드 [Bad Code]
- 다른 개발자가 로직(Logic)을 이해하기 어렵게 작성된 코드
- 처리 로직의 제어가 정제되지 않고 서로 얽혀있는 스파게티 코드, 변수나 메서드에 대한 이름 정의를 알 수 없는 코드
- 동일한 처리 로직이 중복되게 작성된 코드 등..
- 나쁜 코드 유형 ( Tip. 오문이 결침 )
- 오염 : 비지니스 기능을 수행하지 못하는 많은 컴포넌트가 존재
- 문서부족 : 현재 코드와 문서가 일치 하지 않고 수정과 변경을 위한 도메인 자식은 크게 증가하지만 개발자의 지식 부족 초래
- 의미없는 이름 : 함수, 클래스, 컴포넌트 이름이 명확한 의미를 갖지 못하거나 실제 작동과 불일치
- 높은 결합도 : 클래스와 컴포넌트간 데이터와 컨트롤 흐름이 네트워크로 복잡하게 연결
- 아키텍처 침식 : 아키텍처가 구별되지 않고 여러 솔루션으로 이루어져 아키텍처상 변형으로 시스템 품질이 떨어짐
1.2. 클린 코드 [Clean Code]
- 잘 작성되어 가독성이 높고, 단순하며, 의존성을 줄이고, 중복을 최소화하여 깔끔하게 잘 정리된 코드
- 특징
- 중복코드 제거로 애플리케이션의 설계가 개선
- 가독성이 높으므로 애플리케이션 기능에 대해 쉽게 이해할 수 있다.
- 버그를 찾기 쉬워지며, 프로그래밍 속도가 빨라진다.
- 클린 코드 유형 ( Tip. 이주배 함제오 )
- 의미있는 이름 : 의도가 분명한 이름 사용
- 간결하고 명확한 주석 : 간결하고 명확히 작성
- 보기좋은 배치 : 읽는 사람이 편하게 구성
- 작은 함수 : 함수 하나당 하나의 일만하도록 선언 / 중복 없도록 작성
- 읽기 쉬운 제어 흐름 : 읽기 쉽게 작성 / IF문 인수는 간단한 내용을 선 배치
- 오류처리 : 오류 반환보다 예외처리 활용 / Null반환 대신 Null체크 코드 작성
2. 소스코드 품질 분석
2.1. 소스코드 품질 분석 이란?
- 소스 코드에 대한 코딩스타일, 설절된 코딩 표준, 코드의 복잡도, 코드 내에 존재하는 메모리 누수 현황, 스레드의 결함 등을 발견하기 위한 활동.
2.2. 소스코드 품질분석 도구 유형
- 정적 분석도구 : 작성된 소스코드를 실행시키지 않고, 코드자체만으로 코딩표준여부, 코딩 스타일, 잔존 결함을 확인하는 코드 분석도구
- 동적 분석 도구 : 애플리케이션을 실행하여 코드에 존재하는 메모리 누수 현황을 발견하고, 발생한 스레드의 결함 등을 분석 하는 도구.
2.3. 소스코드 품질분석 도구
정적분석도구
- pmd : 자바 및 타 언어 소스코드에 대한 버그, 데드코드 분석
- cppcheck : C/C++코드에 대한 메모리 누수, 오버플로우 등 문제 분석
- SonarQube : 소스 코드 품질 통합 플랫폼, 플러그인 확장 가능
- checkstyle : 자바 코드에 대한 코딩 표준 검사 도구
코드 복잡도 도구
- ccm : 다양한 언어의 코드 복잡도 분석 도구 / 리눅스, 맥 환경 CLI 형태 지원
- cobertura : jcoverage기반의 테스트 커버리지 측정 도구
동적 분석 도구
- Avalanche : Valgrind 프레임워크 및 STP기반 소프트웨어 에러 및 취약점 동적 분석 도구
- Valgrind : 자동화된 메모리 및 스레드 결함 발견 분석 도구
3. 애플리케이션 성능 개선 방안 ( Tip. 소아프 메입시애 )
- 소스코드 최적화 기법 적용 : 느슨한 결합 코드 구현 / 의존성 최소화
- 아키텍처 조정을 통한 성능 개선 : 팩토리 메서드 패턴 이용
- 프로그램 호출 순서 조정 적용
- 메모리 사용 최소화 적용 : String → StringBuffer 또는 StringBuilder 이용
- 입출력 발생 최소화 적용
- System.out.println()을 사용 제외
- 애플리케이션 성능 현황 관리 : 성능현황판작성 / 성능현황판이용 성능 개선
- 정보처리기사 필기 합격 후 실기대비 정리 및 책없이 간단히 보기위해 작성하였습니다.
- 2020년 수제비 정보처리기사 책 기반으로 정리 하였습니다.
- 저작권 관련 문제가 있다면 hojunbbaek@gmail.com 으로 메일 주시면 바로 삭제 조치 하도록 하겠습니다.
[정보처리기사 실기] Ⅶ. 애플리케이션 테스트 관리 - 애플리케이션 성능 개선. (feat.수제비)