728x90
1. 애플리케이션 성능 분석
- 애플리케이션 성능 점검 개요
- 애플리케이션 성능 측정 지표
- 처리량 : 애플리케이션이 주어진 시간에 처리할 수 있는 트랜잭션의 수
- 응답 시간 : 사용자 입력이 끝난 후, 애플리케이션의 응답 출력이 개시될 때까지의 시간
- 경과 시간 : 애플리케이션에 사용자가 요구를 입력한 시점부터 트랜잭션을 처리 후 그 결과의 출력이 완료할 때까지 걸리는 시간
- 자원 사용률 : 애플리케이션이 트랜잭션을 처리하는 동안 사용하는 CPU, 메모리, 네트워크 사용량
- 유형별 성능 분석 도구
- 성능/부하/스트레스 점검 도구
- 모니터링 도구
- 애플리케이션 성능 측정 지표
- 애플리케이션 성능 저하 원인
- 데이터베이스 관련 성능 저하 원인
- DB Lock : 대량의 데이터 조회, 과도한 업데이트, 인덱스 생성 시 발생하는 현상
- 불필요한 DB Fetch : 실제 필요한 데이터보다 많은 데이터 요청이 들어올 경우 응답 시간 저하 현상 발생
- 연결 누수 : DB 연결과 관련한 JDBC 객체를 사용 후 종료하지 않을 경우 발생
- 부적절한 커넥션 풀 크기 : 너무 작거나 크게 설정한 경우 성능 저하 현상 발생 가능성 존재
- 확정 관련 : 트랜잭션이 확정되지 않고 커넥션 풀에 반환될 때 성능 저하 가능성 존재
- 내부 로직으로 인한 성능 저하 원인
- 외부 호출(HTTP, 소켓 통신)로 인한 성능 저하 원인
- 잘못된 한경 설정이나 네트워크 문제로 인한 성능 저하 원인
- 데이터베이스 관련 성능 저하 원인
- 애플리케이션 성능 테스트 프로세스
- 애플리케이션 성능 테스트 수행 절차
- 성능 테스트 도구 설치
- 테스트 환경 설정
- 시나리오 생성
- 성능 테스트 실행 및 모니터링
- 성능 테스트 결과 분석을 통한 성능 저하 요인 탐지
- 애플리케이션 성능 테스트 수행 절차
2. 애플리케이션 성능 개선
- 나쁜 코드
- 오염 : 비즈니스 기능을 수행하지 못하는 많은 컴포넌트들이 존재
- 문서부족 : 현재 코드와 문서가 일치하지 않고 수정과 변경을 위한 도메인 지식은 크게 증가하지만 개발자의 지식부족 초래
- 의미 없는 이름 : 함수, 클래스, 컴포넌트 이름들이 명확한 의미를 갖지 못하거나 실제 작동과 불일치
- 높은 결합도 : 클래스와 컴포넌트 간에 데이터와 컨트롤 흐름이 네트워크로 복잡하게 연결
- 아키텍처 침식 : 아키텍처가 더 이상 구별되지 않고 여러 솔루션으로 이루어져 아키텍처상 변형들로 인해 시스템 품질 떨어짐
- 클린 코드
- 의미 있는 이름 : 의도가 분명한 이름 사용
- 간결하고 명확한 주석
- 보기 좋은 배치
- 작은 함수
- 읽기 쉬운 제어 흐름
- 오류 처리
- 소스 코드 품질 분석
- 소스 코드 품질 분석 도구 유형
- 정적 분석 도구 : 작성된 소스코드를 실행시키지 않고, 코드 자체만으로 코딩 표준 준수 여부, 코딩 스타일 적정 여부, 잔존 결함 발견 여부를 확인
- 동적 분석 도구 : 애플리케이션을 실행하여 코드에 존재하는 메모리 누수 현황을 발견하고, 발생한 스레드의 결함 등을 분석하기 위한 도구
- 소스 코드 품질 분석 도구
- 정적 분석 도구 : pmd, cppcheck, SonarQube, checkstyle
- 코드 복잡도 도구 : ccm, cobertura
- 동적 분석 도구 : Avalanche, Valgrind
- 소스 코드 품질 분석 도구 유형
- 애플리케이션 성능 개선 방안
- 소스 코드 최적화 기법 적용
- 아키텍처 조정을 통한 성능 개선
- 프로그램 호출 순서 조정 적용
- 소스 코드 품질분석 도구 활용
- 메모리 사용 최소화 적용
- 입출력 발생 최소화 적용
- System.out.println()을 사용 제외
- 애플리케이션 성능 현황 관리
728x90
300x250