JUINTINATION

애플리케이션 성능 분석 본문

정보처리기사 정리

애플리케이션 성능 분석

DEOKJAE KWON 2024. 2. 12. 19:23
반응형

애플리케이션 성능

처리량(Throughput) 일정 시간 내에 애플리케이션이 처리하는 일의 양
응답 시간(Response Time) 애플리케이션에 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
경과 시간(Turn Around Time) 애플리케이션에 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간
자원 사용률(Resource Usage) 애플리케이션이 의뢰한 작업을 처리하는 동안의 CPU 사용량, 메모리 사용량, 네트워크 사용량 등의 자원 사용률

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

애플리케이션의 성능 저하 현상은 애플리케이션을 DB에 연결하기 위해 Connection 객체를 생성하거나 쿼리를 실행하는 애플리케이션 로직에서 많이 발생하며 다음은 애플리케이션 성능 저하의 주요 요인이다.

  • DB에 필요 이상의 많은 데이터를 요청한 경우
  • DB의 락(Lock)이 해제되기를 기다리면서 애플리케이션이 대기하거나 타임아웃된 경우
  • 커넥션 풀(Connection Pool)의 크기를 너무 작거나 크게 설정한 경우
  • JDBC나 ODBC 같은 미들웨어를 사용한 후 종료하지 않아 연결 누수(Connection Leak)가 발생한 경우
  • 트랜잭션 처리 중 외부 호출이 장시간 수행되거나 타임아웃된 경우
  • 트랜잭션이 확정(Commit)되지 않고 커넥션 풀에 반환되거나 잘못 작성된 코드로 인해 불필요한 Commit이 자주 발생하는 경우
  • 인터넷 접속 불량으로 인해 서버 소켓에 쓰기는 지속되나 클라이언트에서 정상적인 읽기가 수행되지 않는 경우
  • 네트워크 관련 장비 간 데이터 전송이 실패하거나 전송 지연으로 인해 데이터 손실이 발생한 경우
  • 대량의 파일을 업로드하거나 다운로드하여 처리 시간이 길어진 경우

시간 복잡도

시간 복잡도는 알고리즘의 실행 시간, 즉 알고리즘을 수행하기 위해 프로세스가 수행하는 연산 횟수를 수치화한 것을 의미한다.

시간 복잡도는 하드웨어적 성능이나 프로그래밍 언어의 종류에 따라 달라지기 때문에 시간이 아닌 명령어의 실행 횟수를 표기하는데 이러한 표기법을 점근 표기법이라고 한다. 점근 표기법의 종류는 다음과 같다.

    • 빅오 표기법(Big-O Notation)
      • 알고리즘의 실행시간이 최악일 때를 표기
    • 세타 표기법(Big-θ Notation)
      • 알고리즘의 실행시간이 평균일 때를 표기
    • 오메가 표기법(Big-Ω Notiation)
      • 알고리즘의 실행시간이 최상일 때를 표기

순환 복잡도(Cyclomatic Complexity)

순환 복잡도는 한 프로그램의 논리적인 복잡도를 측정하기 위한 소프트웨어의 척도로 제어 흐름도 이론에 기초를 둔다.

  • 순환 복잡도를 이용하여 계산된 값은 프로그램의 독립적인 겨로의 수를 정의하고 모든 경로가 한 번 이상 수행됐음을 보장하기 위해 행해지는 테스트 횟수의 상한선을 제공한다.
  • 제어 흐름도 G에서 순환 복잡도 V(G)는 다음과 같은 방법으로 계산할 수 있다.
    • V(G) = E - N + 2 : E는 화살표 수, N은 노드의 수

애플리케이션 성능 개선을 위한 소스 코드 최적화

소스 코드 최적화는 나쁜 코드(Bad Code)를 배제하고 클린 코드(Clean Code)로 작성하는 것이다.

  • 클린 코드(Clean Code)
    • 누구나 쉽게 이해하고 수정 및 추가할 수 있는 단순, 명료한 코드
    • 즉, 잘 작성된 코드
  • 나쁜 코드(Bad Code)
    • 프로그램의 로직이 복잡하고 이해하기 어려운 코드
      • 스파게티 코드 : 코드의 로직이 서로 복잡하게 얽혀 있는 코드
      • 외계인 코드 : 아주 오래되거나 참고문서 또는 개발자가 없어 유지 보수 작업이 어려운 코드

클린 코드 작성 원칙

가독성 누구든지 코드를 쉽게 읽을 수 있도록 작성한다.
코드 작성 시 이해하기 쉬운 용어를 사용하거나 들여쓰기 기능 등을 사용한다.
단순성 코드를 간단하게 작성한다.
한 번에 한 가지를 처리하도록 코드를 작성하고 클래스/메서드/함수 등을 최소 단위로 분리한다.
의존성 배제 코드가 다른 모듈에 미치는 영향을 최소화한다.
코드 변경 시 다른 부분에 영향이 없도록 작성한다.
중복성 최소화 코드의 중복을 최소화한다.
중복된 코드는 삭제하고 공통된 코드를 사용한다.
추상화 상위 클래스/메서드/함수에서는 간략하게 애플리케이션의 특성을 나타내고 상위 내용은 하위 클래스/메서드/함수에서 구현한다.

소스 코드 최적화 유형

  • 클래스 분할 배치
    • 하나의 클래스는 하나의 역할만 수행하도록 응집도를 높이고 크기를 작게 작성한다.
  • 느슨한 결합(Loosely Coupled)
    • 인터페이스 클래스를 이용하여 추상화된 자료 구조와 메서드를 구현함으로써 클래스 간의 의존성을 최소화한다.
  • 코딩 형식 준수
    • 줄 바꿈 사용
    • 개념적 유사성이 높은 종속 함수 사용
    • 호출하는 함수는 선배치, 호출되는 함수는 후배치
    • 지역 변수는 각 함수의 맨 처음에 선언
  • 좋은 이름 사용
    • 변수나 함수 등의 이름은 기본적인 이름 명명 규칙(Naming Rule)을 정의하고 규칙에 맞는 이름을 사용한다.
  • 적절한 주석문 사용
    • 소스 코드 작성 시 앞으로 해야 할 일을 기록하거나 중요한 코드를 강조할 때 주석문을 사용한다.

소스 코드 품질 분석 도구

소스 코드 품질 분석 도구는 소스 코드의 코딩 스타일, 코드에 설정된 코딩 표준, 코드의 복잡도, 코드에 존재하는 메모리 누수 현상, 스레드 결함 등을 발견하기 위해 사용하는 도구로 크게 정적 분석 도구와 동적 분석 도구로 나뉜다.

  • 정적 분석 도구
    • 작성한 소스 코드를 실행하지 않고 코딩 표준이나 코딩 스타일, 결함 등을 확인하는 코드 분석 도구
    • 소스 코드에서 코딩의 복잡도, 모델 의존성, 불일치성 등을 분석할 수 있음
    • 비교적 애플리케이션 개발 초기의 결함을 찾는데 사용되고 개발 완료 시점에서는 개발된 소스 코드의 품질을 검증하는 차원에서 사용됨
    • 자료 흐름이나 논리 흐름을 분석하여 비정상적인 패턴을 찾을 수 있음
  • 동적 분석 도구
    • 작성한 소스 코드를 실행하여 코드에 존재하는 메모리 누수, 스레드 결함 등을 분석하는 도구
728x90

'정보처리기사 정리' 카테고리의 다른 글

데이터베이스 설계  (0) 2024.02.15
인터페이스 구현  (0) 2024.02.12
결함 관리  (0) 2024.02.12
애플리케이션 테스트  (1) 2024.02.12
소프트웨어 버전 등록 및 관리  (0) 2024.02.12
Comments