▶ 058 애플리케이션 성능 분석
애플리케이션 성능
- 애플리케이션 성능 측정 지표 : 처리량, 응답시간, 경과 시간, 자원 사용률
- 애플리케이션의 성능 분석 도구 분류 : 성능 테스트 도구, 시스템 모니터링 도구
성능 테스트 도구
애플리케이션에 부하나 스트레스를 가하면서 성능 측정 지표를 점검하는 도구
- JMeter : HTTP, FTP 등 다양한 프로토콜을 지원하는 부하 테스트 도구
- LoadUI : 서버 모니터링, Drag&Drog 등 사용자의 편리성이 강화된 부하 테스트 도구
- OpenSTA : HTTP, HTTPS 프로토콜에 대한 부하 테스트 및 생산품 모니터링
시스템 모니터링 도구
애플리케이션이 실행되었을 때 시스템 자원의 사용량을 확인 및 분석하는 도구
- Scouter : 단일 뷰 통합/실시간 모니터링, 튜닝에 최적화된 인프라 통합 모니터링 도구
- Zabbix : 웹기반 서버, 서비스, 애플리케이션 등의 모니터링 도구
애플리케이션 성능 저하 원인 분석
- DB에 필요 이상의 많은 데이터를 요청한 경우
- DB의 락이 해제되기를 기다리면서 애플리케이션이 대기하거나 타임아웃된 경우
- 커넥션 풀(Connection Pool)의 크기를 너무 작거나 크게 설정한 경우
- 연결 누수(Connection Leak)가 발생한 경우
- 불필요한 Commit이 자주 발생하는 경우
- 대량의 파일을 업로드, 다운로드하는 경우
- 트랜잭션 처리 중 외부 호출이 장시간 수행 또는 타임아웃된 경우
- 데이터 손실이 발생한 경우
▶ 059 애플리케이션 성능 개선
소스 코드 최적화
나쁜 코드 배제, 클린 코드로 작성
- 클린 코드 작성 원칙 : 가독성, 단순성, 의존성 배제, 중복성 최소화, 추상화
소스 코드 최적화 유형
- 클래스 분할 배치 : 하나의 클래스는 하나의 역할만 수행하도록 응집도 높임, 크기를 작게 작성
- 느슨한 결합 : 클래스 간의 의존성 최소화
- 코딩 형식 준수 :
줄 바꿈 사용,
개념적 유사성이 높은 종속 함수 사용,
호출 함수 선배치/호출 되는 함수 후배치,
지역 변수는 각 함수의 맨처음에 선언
- 좋은 이름 사용
- 적절한 주석문 사용
소스 코드 품질 분석 도구
정적 분석 도구 | 작성한 소스 코드를 실행하지 않고 코딩 표준이나, 코딩 스타일, 결함 등을 확인하는 코드 분석 도구 - 동적 분석 도구로는 발견현하기 어려운 결함 찾아냄 - 코딩의 복잡도, 모델의 의존성, 불일치성 등 분석 - 종류 : pmd, cppcheck, SonarQube 등 |
동적 분석 도구 | 작성한 소스 코드를 실행해 코드에 존재하는 메모리 누수, 스레드 결함 등 분석 - 종류 : Avalanche, Valgrind 등 |