동영상 쇼츠 서비스 프로젝트 기술적 의사 결정 part 2 테스트 도구편 Artillery를 선택한 이유 vs K6 vs Locust 그리고 APM 을 선택한 이유 vs 다른 도구들

2024. 12. 3. 10:46·Deep Dives/Technical Notes
목차
  1. 애플리케이션 성능 테스트의 필요성
  2. 애플리케이션 성능 테스트란 무엇인가?
  3. 애플리케이션 성능 테스트가 필요한 이유
  4. 실제 부하 환경에서의 한계 확인
  5. 병목 지점 식별 및 최적화
  6. 안정적인 사용자 경험 제공
  7. 자원 효율성 확보
  8. 장애와 복구 시나리오 확인
  9. 비즈니스 손실 방지
  10. 장기적인 시스템 안정성 검증
  11. 예측 가능한 데이터 기반 의사결정
  12. 성능 테스트를 위한 핵심 단계
  13. 성능 테스트가 제공하는 가치
  14. 참고 자료
  15. 1. Artillery
  16. 2. K6
  17. 3. Locust
  18. 3.1. 개요
  19. 3.2. 주요 특징
  20. 3.3. 장점
  21. 3.4. 단점
  22. 3.5. 사용 사례
  23. 4. 공통점과 차이점4-1 공통점
  24. 4-2 차이점
  25. 6.결론
  26. 애플리케이션 전반적인 성능 모니터링 부족
  27. 내장된 성능 분석:
  28. APM vs 다른 도구들
  29. 애플리케이션 성능 모니터링(APM)이란 무엇인가요?
  30. 애플리케이션 성능 모니터링이 중요한 이유는 무엇인가요?
  31. 운영 비용 절감
  32. 애플리케이션 성능 모니터링에서는 어떤 지표를 추적하나요?
  33. CPU 사용량
  34. 응답 시간
  35. 오류율
  36. 트랜잭션 추적
  37. 인스턴스
  38. 요청
  39. 가동 시간
  40.  
  41. APM과 유사한 도구들 비교
  42. New Relic
  43. Datadog
  44. 결론 :
  45. APM을 도입한 이유

우선 동영상 쇼츠 서비스 프로젝트 기술적 의사결정을 하기 이전 성능 테스트,부하 테스트,스트레스 테스트가 왜필요한지에 대해서 조사하고 그렇다면
성능 테스트 부하테스트 스트레스테스트에 대해서 조사한 것들 먼저 작성 해보겠습니다 .
이후에 관련한 테스트 도구들을 비교해보고 의사결정 이유까지 작성해보겠습니다.


애플리케이션 성능 테스트의 필요성

애플리케이션 성능 테스트는 시스템의 안정성과 확장성을 보장하기 위해 필수적인 과정입니다. 단순히 기능이 정상적으로 동작하는지 확인하는 것을 넘어, 실제 사용자 환경에서 애플리케이션이 어떻게 반응하고, 예상치 못한 부하나 오류 상황에서 얼마나 안정적으로 동작하는지를 확인할 수 있습니다. 특히, 현대의 복잡한 애플리케이션 환경에서는 단순 테스트만으로는 알 수 없는 다양한 문제를 성능 테스트를 통해 발견할 수 있습니다.

애플리케이션 성능 테스트란 무엇인가?

성능 테스트는 특정 워크로드에서 애플리케이션의 안정성, 속도, 확장성, 반응성을 판별하는 과정입니다. 이는 단순히 소프트웨어의 품질을 확인하는 것이 아니라, 애플리케이션이 실제 운영 환경에서 예상되는 다양한 시나리오를 얼마나 잘 처리할 수 있는지 평가하는 데 초점을 둡니다.

성능 테스트를 통해 다음과 같은 질문에 답할 수 있습니다:

  • 애플리케이션이 충분한 성능 요건을 충족하는가?
  • 병목 지점은 어디인가?
  • 최대 트래픽에서 안정성에 이상은 없는가?
  • 장시간 동일한 성능을 유지할 수 있는가?

애플리케이션 성능 테스트가 필요한 이유

실제 부하 환경에서의 한계 확인

개발 환경에서는 단일 사용자 또는 소규모 요청만 처리하는 경우가 많습니다. 하지만 실제 운영 환경에서는 수백에서 수천 명의 사용자가 동시에 애플리케이션에 접속하거나 요청을 보냅니다. 성능 테스트는 이러한 대규모 부하 환경에서 애플리케이션이 어떤 한계를 가지는지 확인할 수 있습니다.

병목 지점 식별 및 최적화

애플리케이션은 서버, 데이터베이스, 네트워크, 스토리지 등 다양한 컴포넌트로 구성됩니다. 특정 상황에서 이러한 요소 중 하나가 병목 지점으로 작용해 전체 시스템의 성능을 저하시킬 수 있습니다. 성능 테스트는 병목 구간을 찾아내고, 이를 개선할 수 있는 기회를 제공합니다.

안정적인 사용자 경험 제공

사용자가 애플리케이션을 사용할 때 응답 속도와 안정성은 가장 중요한 요소 중 하나입니다. 성능 테스트를 통해 사용자 경험을 저해하는 성능 문제를 사전에 발견하고 해결함으로써, 안정적이고 일관된 사용자 경험을 제공할 수 있습니다.

자원 효율성 확보

애플리케이션이 CPU, 메모리, 디스크 I/O, 네트워크와 같은 시스템 자원을 얼마나 효율적으로 사용하는지를 평가할 수 있습니다. 이를 통해 불필요한 자원 낭비를 방지하고, 필요한 경우 인프라를 확장할 근거를 마련할 수 있습니다.

장애와 복구 시나리오 확인

최악의 상황에서도 시스템이 안정적으로 복구될 수 있는지 확인하는 것이 중요합니다. 성능 테스트는 예상치 못한 부하나 장애 상황에서 시스템의 복구 능력을 평가하고, 이를 개선할 수 있도록 돕습니다.

비즈니스 손실 방지

특히, 결제 시스템이나 금융 서비스와 같은 민감한 데이터를 처리하는 애플리케이션에서는 작은 성능 문제도 큰 금전적 손실이나 신뢰도 하락으로 이어질 수 있습니다. 성능 테스트는 이러한 위험 요소를 사전에 제거하는 데 도움을 줍니다.

장기적인 시스템 안정성 검증

애플리케이션이 장시간 동안 안정적으로 작동할 수 있는지 확인하는 것은 필수입니다. 메모리 누수나 리소스 고갈과 같은 문제는 단기 테스트에서는 드러나지 않을 수 있으므로, 내구성 테스트를 통해 장기적인 안정성을 검증해야 합니다.

예측 가능한 데이터 기반 의사결정

성능 테스트는 데이터를 기반으로 서비스의 임계점이나 병목 지점을 파악하게 해줍니다. 이를 통해 향후 인프라 확장, 코드 최적화, 장애 대응 시나리오 설계 등과 같은 의사결정을 효과적으로 내릴 수 있습니다.


성능 테스트를 위한 핵심 단계

  1. 요구사항 분석:
    • 성능 목표와 테스트 기준 정의 (예: 응답 시간, 동시 사용자 수, TPS 등).
  2. 테스트 계획 수립:
    • 사용할 테스트 도구와 환경을 선정.
    • 테스트 시나리오 설계 및 테스트 데이터를 준비.
  3. 테스트 실행:
    • 부하 테스트, 스트레스 테스트, 내구성 테스트 등 다양한 유형의 테스트 실행.
  4. 결과 분석 및 리포트 작성:
    • 수집된 데이터를 분석하여 병목 지점, 성능 문제, 개선점을 파악.
  5. 최적화 및 재테스트:
    • 성능 개선 작업을 수행한 후 동일한 테스트를 반복하여 개선 사항 검증.

성능 테스트가 제공하는 가치

성능 테스트는 단순히 애플리케이션의 상태를 점검하는 데 그치지 않습니다. 이는 시스템의 안정성과 확장성을 보장하고, 실제 사용자 환경에서의 신뢰성을 확보하는 핵심 도구입니다. 예상치 못한 문제로 인해 운영 환경에서 장애를 겪는 공포를 방지하기 위해, 성능 테스트는 필수적입니다.

테스트 코드가 개발의 두려움을 해소해줬듯, 성능 테스트는 운영 환경의 두려움을 해소해 줄 것입니다.

참고 자료

https://techblog.woowahan.com/2572/

 

결제 시스템 성능, 부하, 스트레스 테스트 | 우아한형제들 기술블로그

안녕하세요. 우아한형제들에서 결제시스템을 개발하고 있는 권용근입니다. 입사한 지 4개월 만에, 드디어 우아한형제들 기술 블로그에 글을 남기게 되어 감회가 새롭습니다. 저는 최근 결제 시

techblog.woowahan.com

 

https://velog.io/@dlatkdrb980219/애플리케이션-성능-테스트-모니터링

 

애플리케이션 성능 테스트 / 모니터링

성능 테스트 성능 테스트란? 특정 워크로드에서 애플리케이션의 안정석과 속도, 확장성 및 반응성이 어떻게 유지되는지를 판별하는 과정 소프트웨어의 품질을 보장하는 방법이지만 나중에 고

velog.io

참고자료:https://f-lab.kr/blog/importance%20of%20performance%20Testing
https://loosie.tistory.com/821

 

성능 테스트의 중요성과 목적 그리고 효과

서비스의 트래픽이 성장세에 있을 때 이 서비스에 얼마만큼의 자원 할당이 필요한지 알고 있는가?

f-lab.kr

 

 

성능 테스트, 부하 테스트, 스트레스 테스트에 대해 알아보자

성능 테스트 (Performance Test) 성능 테스트는 시스템 구성 요소가 특정 상황에서 어떤 성능을 보이는지 확인하기 위해 수행되는 테스트이다. 제품의 리소스 사용, 확장성 및 안정성도 이 테스트를

loosie.tistory.com



테스트 도구 Artillery 를 선택한 이유 vs K6 vs Locust

1. Artillery

1.1. 개요

Artillery는 Node.js 기반의 오픈 소스 부하 테스트 도구로, 특히 중소규모 트래픽에 적합한 가볍고 직관적인 도구입니다.
주요 초점: REST API, WebSocket, HTTP 등 현대적인 애플리케이션 프로토콜에 초점을 맞추고 있습니다.

1.2. 주요 특징

  • YAML 기반 구성: 간단한 설정 파일로 테스트 시나리오 작성 가능.
  • Node.js 통합: JavaScript를 통해 사용자 정의 테스트 로직 추가 가능.
  • WebSocket 지원: WebSocket 연결과 메시징 테스트에 최적화.
  • 서버리스 환경 적합: AWS Lambda와 같은 서버리스 환경에서의 테스트 지원.
  • 경량화된 설계: 로컬 환경에서 가볍게 테스트를 실행.

1.3. 장점

  1. 간편한 사용: YAML 형식의 설정 파일을 사용하여 누구나 쉽게 시나리오를 작성할 수 있습니다.
  2. 서버리스 테스트 지원: 서버리스 아키텍처에 최적화되어 AWS Lambda, API Gateway 등과 잘 맞습니다.
  3. 플러그인 기반 확장성: 확장 가능한 플러그인을 통해 기능 추가 가능.
  4. 빠른 테스트 시작: 설정과 실행이 간단해 신속한 테스트가 가능.
  5. WebSocket 및 API 테스트 강점: WebSocket 연결의 안정성과 성능 테스트를 잘 지원.

1.4. 단점

  1. 대규모 부하 테스트 한계: 초당 수십만 요청을 처리하는 대규모 테스트에는 적합하지 않을 수 있음.
  2. 리포팅 제한: 기본 텍스트 기반 리포트를 제공하며, 고급 시각화는 외부 도구를 사용해야 합니다.
  3. 유연성 부족: 복잡한 사용자 흐름이나 조건부 시나리오 작성 시 제한적.

1.5. 사용 사례

  • 중소규모 API 트래픽 테스트: 초당 수천~수만 건의 요청 처리량을 검증하는 데 적합.
  • 서버리스 애플리케이션 테스트: AWS Lambda와 연동해 서버리스 아키텍처의 성능 검증.
  • WebSocket 테스트: 실시간 애플리케이션의 연결 상태와 메시징 성능 확인.

    YAML 기반의 설정으로 테스트 시나리오를 간단히 작성할 수 있습니다. 
config:
  target: "https://example.com"
  phases:
    - duration: 60
      arrivalRate: 100
scenarios:
  - flow:
      - get:
          url: "/api"




예를 들자면 위와 같이 아주 간단하게 테스트를 할 수 있습니다. 

2. K6


2.1. 개요

k6는 고성능 부하 테스트 도구로, 특히 대규모 트래픽 시뮬레이션과 CI/CD 통합에 초점을 맞추고 있습니다.
주요 초점: 대규모 분산 테스트, 실시간 시각화, API 중심 애플리케이션.

2.2. 주요 특징

  • JavaScript 기반 설정: ES6 표준을 사용하여 복잡한 테스트 시나리오 작성 가능.
  • 고성능: CLI 기반으로 경량 실행 및 높은 처리량 제공.
  • AWS 통합: AWS CloudWatch,등과의 강력한 통합.
  • CI/CD 친화성: CI/CD 파이프라인에서의 지속적 부하 테스트를 지원.
  • 실시간 시각화: 기본 HTML 리포트 제공 및 외부 대시보드 통합.

2.3. 장점

  1. 대규모 부하 테스트: 초당 수십만 건의 요청 처리 시뮬레이션 가능.
  2. JavaScript의 유연성: 복잡한 로직과 조건부 테스트를 스크립트로 작성 가능.
  3. AWS와의 강력한 통합: Grafana, Prometheus 등과 연동해 실시간 데이터 시각화 가능.
  4. 시각화: 기본적으로 제공되는 HTML 리포트 외에 Grafana와 연동해 고급 분석 가능.
  5. 확장성: 클라우드 기반 분산 테스트 환경 구성 가능.

2.4. 단점

  1. 스크립트 작성 필요: YAML처럼 간단한 설정 파일 없이 JavaScript로 모든 테스트를 작성해야 함.
  2. 추가 리소스 요구: 대규모 분산 테스트 시 클러스터 설정 및 관리가 필요.

2.5. 사용 사례

  • 대규모 API 트래픽 테스트: 초당 수십만 요청을 처리하는 애플리케이션 성능 검증.
  • CI/CD 통합: CI/CD 워크플로에 부하 테스트를 추가하여 자동화.
  • AWS 기반 실시간 모니터링: CloudWatch와 통합해 트래픽 분석 및 최적화.
  • 복잡한 시나리오: 사용자 행동 시뮬레이션 및 조건부 요청 테스트.
import http from 'k6/http';
export default function () {
    let res = http.get('https://example.com/api');
}


ES6표준을 지원하고 복잡한 시나리오를 JavaScript 코드로 작성할 수 있습니다.

3. Locust

3.1. 개요

Locust는 Python 기반의 오픈 소스 부하 테스트 도구로, 대규모 분산 테스트 및 동적 사용자 흐름 시뮬레이션에 적합합니다.
주요 초점은 Python 스크립팅, 사용자 행동 시뮬레이션, 분산 테스트입니다.

 

3.2. 주요 특징

  1. Python 기반 스크립팅:
    • 사용자 흐름을 Python 코드로 작성하여 복잡한 시나리오를 구성할 수 있습니다.
from locust import HttpUser, task
class MyUser(HttpUser):
    @task
    def my_task(self):
        self.client.get("/api")

 

  • 분산 테스트 지원:
    • 워커(worker)를 분산 배치해 대규모 부하를 효율적으로 생성 가능.
  • 웹 기반 UI 제공:
    • 실시간 상태 모니터링과 부하 조정 가능.

 

3.3. 장점

  1. Python 기반 유연성:
    • 복잡한 로직과 조건부 시나리오를 손쉽게 작성할 수 있습니다.
  2. 분산 처리에 강점:
    • 여러 머신에서 동시에 테스트를 실행하여 대규모 부하를 시뮬레이션 가능.
  3. 웹 기반 UI:
    • 실시간 상태를 확인하고, 부하를 동적으로 조정 가능.

3.4. 단점

  1. Python 의존성:
    • Python 지식이 필요하여 비개발자에게 진입 장벽이 있을 수 있습니다.
  2. 기본 시각화 제한:
    • 상세 보고서 생성을 위해 외부 도구가 필요할 수 있습니다.

3.5. 사용 사례

  1. 대규모 API 테스트:
    초당 수십만 요청을 처리하는 RESTful API 검증.
  2. 사용자 행동 시뮬레이션:
    동적인 사용자 흐름과 트랜잭션 테스트.

 

4. 공통점과 차이점4-1 공통점

  • 1.1. 부하 테스트 주요 기능 제공
    • HTTP/REST API 및 WebSocket 테스트:
      • 세 도구 모두 HTTP/REST API 및 WebSocket 기반의 부하 테스트를 지원합니다.
    • 성능 지표 수집:
      • 동시 사용자 수, 응답 시간, 처리량 등의 성능 지표를 수집해 시스템의 병목 현상과 한계를 분석할 수 있습니다.
    1.2. 분산 테스트 지원
    • Locust: 기본적으로 분산 테스트를 지원하며, 여러 머신을 활용한 대규모 부하 생성에 적합합니다.
    • Artillery: 분산 테스트는 추가 설정이 필요하며, Artillery Pro(유료 플랜)를 활용하면 클라우드 기반 확장이 가능합니다.
    • k6: 기본적으로 분산 테스트가 가능하며, 클라우드 환경에서 확장성이 뛰어납니다.
    1.3. 확장성과 유연성
    • 세 도구 모두 사용자 정의 시나리오를 작성할 수 있으며, 다양한 데이터와 조건부 흐름을 활용한 테스트가 가능합니다.
    • Prometheus, Grafana 등 모니터링 도구와 통합할 수 있어 테스트 결과를 실시간으로 시각화 가능합니다.
    1.4. 리포트 제공
    • 테스트 완료 후 상세한 성능 보고서를 생성하며, 성공/실패 요청 비율, 응답 시간 분포 등의 데이터를 분석합니다.
    • k6는 기본 HTML 리포트와 실시간 대시보드를 제공하며, Artillery와 Locust는 외부 도구를 통한 추가 시각화를 지원합니다.

4-2 차이점

 

 

 

6.결론

### *Artillery를 선택한 이유*우리 팀이 *Artillery*를 선택한 이유는 다음과 같습니다:

1. *Node.js 친화적 환경*:    - Nest.js 기반 프로젝트와 자연스럽게 통합 가능.
    - JavaScript로 확장 가능하며, 기존 팀 구성원이 익숙한 기술 스택을 활용할 수 있음.

2. *러닝 커브가 낮음*:    - YAML 기반 설정 파일로 간단히 시작할 수 있어 초보자도 빠르게 학습 가능.
    - Python 환경과 코딩이 필요한 Locust에 비해 설정 및 사용이 쉬움.

3. *Nest.js 프로젝트에 적합한 규모*:    - Artillery는 중소규모 테스트에 충분히 강력하며, 우리 프로젝트의 부하 테스트 범위(초당 수백~수천 요청)에서는 성능적으로도 적합함.

4. *Locust와 K6 고급 성능 테스트 기능혹은 실시간 시각화이 불필요*:    - Locust는 고도로 복잡한 사용자 흐름, 대규모 분산 테스트, 실시간 테스트 조정 등의 고급 기능을 제공하지만, 우리 프로젝트는 단일 API 성능 테스트와 간단한 사용자 흐름 시뮬레이션에 초점이 맞춰져 있어 이러한 고급 기능이 필요하지 않음.
마찬가지로 K6의 실시간 시각화 또한 높은 리소스 소비가 일어나는데 득보다는 실이 많다고 생각했습니다.
    - 고급 기능 활용을 위해 추가적인 시간과 리소스를 투자할 필요 없이, Artillery로도 충분히 프로젝트 요구사항을 충족 가능.

5. *실시간 프로토콜(WebSocket) 지원*:    - 우리 프로젝트에서 WebSocket 테스트가 필요한 경우, Artillery의 간단한 설정만으로 테스트 가능.

6. *빠른 생산성*:    - 테스트 작성, 실행, 리포팅 과정이 간단하여 빠르게 테스트를 수행하고 분석할 수 있음.

### *결론*세 도구 모두 부하 테스트를 수행할 수 있는 강력한 기능을 제공하지만, 다음과 같은 이유로 *Artillery*를 선택했습니다:- *Node.js 친화적*이고 Nest.js 프로젝트와 자연스럽게 통합 가능.
- 러닝 커브가 낮아 빠르게 테스트를 시작할 수 있음.
- 프로젝트의 테스트 범위에 적합하며, WebSocket과 같은 실시간 프로토콜 테스트도 지원.

참고자료 :
https://www.libhunt.com/compare-k6-vs-artillery
https://www.youtube.com/watch?v=KECr2BujqtM
https://npm-compare.com/artillery,k6
https://ohksj77.tistory.com/266

 

 

 

 

 

artillery vs k6: Which is Better Load Testing Tools?

Which is Better Load Testing Tools? artillery vs k6 Load testing tools are essential for evaluating the performance and scalability of web applications under various conditions. They simulate multiple users accessing the application simultaneously to ident

npm-compare.com

 

 

성능테스트 툴 locust, k6, artillery 비교

지금까지 성능테스트를 위해 써본 툴을 비교해보고자 합니다. 오픈소스이며 자유도가 높은 툴을 사용하고자 하다 보니 3가지 툴을 사용해보았습니다.각각의 "스크립트 작성 방법", "gui 확인 방

ohksj77.tistory.com


=======================================================================================

그래서 아틸러리를 선택 하게되었고 추가로 아틸러리로만은  저희가 원하는 성능테스트하기 부족함과 어려움이 있어  APM 을 선택하기 까지 과정입니다 .

Artillery는 주로 부하 테스트 및 성능 테스트를 위한 오픈 소스 도구로, 여러 사용자가 동시에 애플리케이션을 호출하는 시나리오를 시뮬레이션하는 데 사용하는데 몇 가지 한계를 발견했습니다. 하지만 몇가지 단점이 있죠

애플리케이션 전반적인 성능 모니터링 부족

  • Artillery는 주로 HTTP 요청을 부하를 주는 방식으로 테스트하지만, 애플리케이션 전체의 성능을 추적하거나 실시간으로 모니터링하는 데는 제한적입니다. 예를 들어, 데이터베이스의 쿼리 성능, 비즈니스 로직, 외부 API 호출 등 애플리케이션의 다양한 측면을 포괄적으로 분석할 수는 없었습니다.

    그리고 병목 현상을 자세하게 추적하고 싶은데 실시간으로 추적하거나 시각적인 것들은 없어서 쉽지 않았습니다.

    데이터베이스 및 내부 서비스의 성능 분석 부족
    • Artillery는 HTTP 요청을 중심으로 성능을 테스트합니다. 따라서 데이터베이스 쿼리 성능, 내부 서비스 호출, 큐 시스템 등 다른 내부 요소들의 성능을 직접적으로 분석하기 어렵습니다.


    그리하여 다시 K6 에 대해 조사한 것이 떠올라 K6로 돌아가야하나 라고 생각을 했습니다 왜냐하면 K6에서는 
    아틸러리보다 조금 더 고급 기능과 확장성 , 같은 것을 제공하기 떄문이죠 

내장된 성능 분석:

    • K6는 내장된 성능 분석 기능을 제공하며, 테스트 결과를 실시간으로 확인하고 다양한 메트릭(응답 시간, 성공률, 실패율 등)을 시각화할 수 있습니다. 이를 통해 성능 저하가 발생한 부분을 쉽게 분석할 수 있습니다.
    • Artillery는 기본적인 성능 결과를 제공하지만, 성능 문제를 더 심층적으로 분석하려면 외부 도구나 추가적인 설정이 필요합니다.



      공통된 한계 ->
      마찬가지로 애플리케이션의 전반적인 성능 추적이 부족하다는 것을 알았습니다 .
      사용자 요청이 애플리케이션 내에서 처리되는 흐름을 전체적으로 추적하거나 모니터링하는 기능은 부족했습니다.
      또한 HTTP 요청을 기반으로 성능을 측정하기 떄문에 데이터베이스 쿼리 성능이나 내부 시스템의 상태를 추적하는 데 한계가 있었습니다. 이것은 이후 실제 시스템에서의 성능 문제를 진단하기 부족하다고 판단했습니다.

      그리하여 TypeORM 이나 PostgreSQL 을 이용한 성능 테스트도 알아보게 되엇는데 

      TypeORM과 PostgreSQL을 통해 데이터베이스의 쿼리 성능을 테스트하고 최적화하려 했지만, 이는 단지 쿼리 실행 속도와 인덱스 최적화에만 초점을 맞췄습니다. 애플리케이션 전체의 성능이나 비즈니스 로직의 효율성은 측정할 수 없었습니다.


그리하여 APM 과 다른 도구들을 알게되었고 이것들을  이용하여 위의 문제를 해결할 수 있을거라 생각되어 APM과 유사 도구들에 대하여 조사하였습니다. 


APM vs 다른 도구들

애플리케이션 성능 모니터링(APM)이란 무엇인가요?

애플리케이션 성능 모니터링(APM)은 소프트웨어 도구와 원격 측정 데이터를 사용하여 비즈니스 크리티컬 애플리케이션의 성능을 모니터링하는 프로세스입니다. 기업은 기대되는 서비스 수준을 유지하여 고객이 긍정적인 애플리케이션 경험을 제공받을 수 있도록 노력합니다. 

애플리케이션 성능 모니터링이 중요한 이유는 무엇인가요?

효과적인 애플리케이션 성능 모니터링(APM)은 기업의 성공에 있어 필수적인 요소입니다. 이를 통해 디지털 서비스를 원활하게 실행하고 가동 중단을 최소화하며 고객이 지속적으로 긍정적인 경험을 얻도록 보장할 수 있습니다. 

운영 비용 절감

IT 팀은 APM 도구를 사용하여 애플리케이션의 성능을 최적화하는 데 필요한 리소스, 인프라 및 컴퓨팅 파워를 결정합니다. 이를 통해 운영 비용을 최소화할 수 있습니다.

애플리케이션 성능 모니터링에서는 어떤 지표를 추적하나요?

CPU 사용량

APM 솔루션은 CPU 사용량 및 메모리 요구 사항과 같은 CPU 지표를 모니터링할 수 있습니다. 이를 통해 애플리케이션이 정상적으로 작동하는 데 필요한 컴퓨팅 리소스를 확보할 수 있습니다.

응답 시간

사용자들은 지연 없이 서비스에 액세스할 수 있을 것으로 기대하기 때문에 기업에게 응답 시간은 매우 중요합니다. APM 솔루션은 허용 가능한 기준 성능과 비교하여 응답 시간을 측정하고, 응답 시간이 임계값 미만으로 떨어지면 사용자에게 알립니다.

오류율

APM 소프트웨어는 애플리케이션을 모니터링하여 오류율을 기록하고 보고합니다. 오류의 예로는 웹 조회가 시간 초과되거나 데이터베이스 조회가 실패하는 경우를 들 수 있습니다. APM은 오류율이 사전 정의된 파라미터를 초과할 때(예: 최근 50개 요청 중 5%에서 오류가 발생한 경우) 알림을 제공합니다.

트랜잭션 추적

APM에서 트랜잭션 추적은 애플리케이션에서 수행되는 단일 트랜잭션에 대한 정확한 가시성을 제공합니다. 트랜잭션 추적에서 캡처되는 정보로는 사용 가능한 함수 호출, 외부 호출, 데이터베이스 호출 등이 있습니다. 트랜잭션 추적은 트랜잭션 요청을 처음부터 끝까지 모니터링합니다.

인스턴스

APM 솔루션은 애플리케이션을 실행 중인 서버 또는 애플리케이션 인스턴스의 수를 모니터링하고 보고할 수 있습니다. 또한 사용자 수요에 따라 스케일 업 또는 스케일 다운하도록 알릴 수 있습니다.

요청

APM 소프트웨어는 애플리케이션에 수신되는 사용자 요청 수를 모니터링합니다. 이 소프트웨어는 트래픽을 모니터링하여 이상 징후를 발견할 경우 알림을 보낼 수 있습니다. 예를 들어 예상치 못한 요청 증가, 동일한 사용자가 실행한 많은 수의 요청 또는 비정상적으로 적은 요청 수에 대해 알릴 수 있습니다.

가동 시간

가동 시간은 온라인 서비스를 제공하는 기업에게 매우 중요합니다. 대부분의 서비스 수준 계약(SLA)에서는 미리 정해진 기간 동안 일정 비율의 가동 중단 시간만 허용합니다. APM은 애플리케이션 가용성을 모니터링하고 서비스 제공업체와 고객이 동의한 수준과 비교합니다.

 

APM과 유사한 도구들 비교

New Relic

장점:

  • 고급 성능 분석: New Relic은 애플리케이션의 성능을 매우 상세하게 추적하며, 트랜잭션 레벨의 분석을 제공합니다. 코드와 데이터베이스 성능을 쉽게 모니터링할 수 있습니다.
  • 광범위한 통합: 다양한 언어 및 프레임워크와의 호환성 덕분에, 다수의 환경에서 통합하여 사용할 수 있습니다. 예를 들어, Node.js, Java, Python 등 다양한 언어를 지원합니다.
  • 실시간 알림 및 문제 감지: 성능 이상을 실시간으로 감지하고 알림을 제공하며, 장애를 빠르게 파악할 수 있습니다.

단점:

  • 비용: New Relic은 규모에 따라 매우 높은 비용이 발생할 수 있습니다. 특히 고급 기능을 사용하려면 가격이 상승합니다.
  • UI 복잡성: New Relic의 대시보드는 강력하지만 초보자에게는 다소 복잡하고 직관적이지 않을 수 있습니다.
  • 구성 복잡: 특정 기능을 제대로 활용하려면 초기 설정과 구성이 다소 복잡할 수 있습니다.

Datadog

장점:

  • 통합 모니터링: Datadog은 APM 외에도 인프라 모니터링, 로그 관리, 서비스 맵 등 다양한 기능을 제공합니다. 모든 모니터링 데이터를 한 곳에서 확인할 수 있어 관리가 용이합니다.
  • 클라우드 네이티브: Datadog은 클라우드 환경에서 효율적으로 작동하며, 여러 클라우드 서비스와의 통합이 용이합니다.
  • 실시간 대시보드: 직관적인 대시보드와 시각적 분석 도구를 통해 실시간으로 성능 데이터를 확인하고 분석할 수 있습니다.

단점:

  • 가격: Datadog은 가격이 비쌉니다. 사용량 기반의 가격 모델 때문에 규모가 커질수록 비용이 급증할 수 있습니다.
  • 설정 및 구성의 복잡성: 다양한 기능을 제공하는 만큼 초기 설정이 다소 복잡할 수 있습니다.
  • 추적 기능의 제한: APM 기능이 강력하지만, 때때로 트랜잭션을 세밀하게 추적하는 데 한계가 있을 수 있습니다.

결론 :

APM을 도입한 이유

위의 성능 테스트 방법들은 각기 다른 한계를 가지고 있었습니다. K6와 Artillery는 부하를 시뮬레이션하는 데는 유용했지만, 애플리케이션의 전체적인 성능 문제나 트랜잭션 흐름을 추적하는 데는 부족했습니다. 또한, TypeORM과 PostgreSQL을 이용한 성능 테스트는 데이터베이스 성능에만 집중했으며, 실제 운영 환경에서 발생할 수 있는 다양한 성능 문제를 파악하기에는 한계가 있었습니다.

따라서, APM(Application Performance Monitoring) 도구를 도입하여 애플리케이션 전체의 성능을 실시간으로 모니터링하고, 트랜잭션 흐름과 내부 서비스의 성능을 정확하게 추적할 수 있는 기능을 확보했습니다. APM을 통해 다음과 같은 이점을 얻을 수 있었습니다:

  • 전체 트랜잭션 흐름 추적: APM은 각 요청이 애플리케이션 내에서 어떻게 처리되는지, 외부 API 호출 및 데이터베이스 쿼리와의 관계를 추적할 수 있습니다.
  • 실시간 성능 모니터링: 애플리케이션의 성능을 실시간으로 추적하여, 문제가 발생하면 즉시 알림을 받을 수 있습니다.
  • 원인 분석: 성능 저하가 발생한 부분을 구체적으로 분석할 수 있어 문제 해결 시간을 단축시킬 수 있습니다.

따라서, APM 도입을 통해 더 정확한 성능 분석과 문제 해결이 가능해졌고, 애플리케이션의 성능을 최적화할 수 있었습니다.

참고자료:
https://www.44bits.io/ko/keyword/datadog
https://techblog.gccompany.co.kr/%EC%97%AC%EA%B8%B0%EC%96%B4%EB%95%8C-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-new-relic-%EC%9D%B4%EC%95%BC%EA%B8%B0-dad36583dec4
https://www.openmaru.io/apm-applicaion-performance-management/
https://jennifersoft.com/ko/blog/tech/what-is-application-performance-monitoring/
https://aws.amazon.com/ko/what-is/application-performance-monitoring/

 

데이터독(Datadog)이란?

데이터독(Datadog)은 모니터링 서비스입니다. 서버와 클라우드 서비스 모니터링을 시작으로 APM, 로그 수집, 신테틱스, 네트워크, 대시보드, 알람 당 다양한 모니터링 기능들을 제공하고 있습니다.

www.44bits.io

 

 

 

여기어때 서비스 모니터링 : New Relic 이야기

안녕하세요. 여기어때컴퍼니 파트너혜택개발팀에서 B2B, 포인트 업무를 담당하고 있는 JR입니다. 최근 여기어때 서비스 모니터링 도구로 사용하던 Pinpoint를 일부 서비스를 제외하고는 New Relic으

techblog.gccompany.co.kr

 

 

APM ( Application Performance Management : 애플리케이션 성능 관리) 란?

IT 서비스를 운영할 때에 가장 중요한 것은 안정성입니다. 그 때에 필요한 것은 시스템을 관찰하는 툴입니다.그 중, 서비스를 제공하는 것은 Application으로, Application이 정상적인지 아닌지 확인하

www.openmaru.io

 

 

APM, 애플리케이션 성능 모니터링(APM)이란 무엇인가요?

APM, 애플리케이션 성능 모니터링(APM)이란 무엇인가요? 애플리케이션 성능 관리(Application Performance Monitoring, 이하 APM)는 마치 숙련된 의사가 환자의 건강 상태를 체크하듯, 애플리케이션의 성능을

jennifersoft.com

 

 

APM이란 무엇인가요? - 애플리케이션 성능 모니터링 설명 - AWS

Amazon CloudWatch Application Signals를 사용하면 코드를 변경하거나 에이전트를 수동으로 구성하지 않고도 현재 애플리케이션 상태를 모니터링하고 비즈니스 목표와 비교하여 장기적인 애플리케이션

aws.amazon.com

 

'Deep Dives > Technical Notes' 카테고리의 다른 글

MongoDB Atlas Search  (0) 2024.12.19
의사결정 PostgreSQL vs MySQL  (3) 2024.12.19
프로젝트 보안 강화를 위한 Helmet과 다른 것들 비교 , XSS attack  (1) 2024.12.08
Node.js백 엔드 서버 개발자 주니어의 동영상 쇼츠 서비스 프로젝트 기술적 의사 결정  (4) 2024.11.28
도커 장단점과 EC2,ECS  (0) 2024.11.28
  1. 애플리케이션 성능 테스트의 필요성
  2. 애플리케이션 성능 테스트란 무엇인가?
  3. 애플리케이션 성능 테스트가 필요한 이유
  4. 실제 부하 환경에서의 한계 확인
  5. 병목 지점 식별 및 최적화
  6. 안정적인 사용자 경험 제공
  7. 자원 효율성 확보
  8. 장애와 복구 시나리오 확인
  9. 비즈니스 손실 방지
  10. 장기적인 시스템 안정성 검증
  11. 예측 가능한 데이터 기반 의사결정
  12. 성능 테스트를 위한 핵심 단계
  13. 성능 테스트가 제공하는 가치
  14. 참고 자료
  15. 1. Artillery
  16. 2. K6
  17. 3. Locust
  18. 3.1. 개요
  19. 3.2. 주요 특징
  20. 3.3. 장점
  21. 3.4. 단점
  22. 3.5. 사용 사례
  23. 4. 공통점과 차이점4-1 공통점
  24. 4-2 차이점
  25. 6.결론
  26. 애플리케이션 전반적인 성능 모니터링 부족
  27. 내장된 성능 분석:
  28. APM vs 다른 도구들
  29. 애플리케이션 성능 모니터링(APM)이란 무엇인가요?
  30. 애플리케이션 성능 모니터링이 중요한 이유는 무엇인가요?
  31. 운영 비용 절감
  32. 애플리케이션 성능 모니터링에서는 어떤 지표를 추적하나요?
  33. CPU 사용량
  34. 응답 시간
  35. 오류율
  36. 트랜잭션 추적
  37. 인스턴스
  38. 요청
  39. 가동 시간
  40.  
  41. APM과 유사한 도구들 비교
  42. New Relic
  43. Datadog
  44. 결론 :
  45. APM을 도입한 이유
'Deep Dives/Technical Notes' 카테고리의 다른 글
  • 의사결정 PostgreSQL vs MySQL
  • 프로젝트 보안 강화를 위한 Helmet과 다른 것들 비교 , XSS attack
  • Node.js백 엔드 서버 개발자 주니어의 동영상 쇼츠 서비스 프로젝트 기술적 의사 결정
  • 도커 장단점과 EC2,ECS
Jcob.moon
Jcob.moon
반가워요~ 하루하루 꾸준히 코딩 작성하는 곳입니다 !!
Pixelated Thoughts반가워요~ 하루하루 꾸준히 코딩 작성하는 곳입니다 !!
  • Jcob.moon
    Pixelated Thoughts
    Jcob.moon
  • 전체
    오늘
    어제
    • HelloWorld (178)
      • Daily Logs (126)
        • TIL (Today I Learned) (65)
        • Algorithm Practice (55)
        • Dev Book Notes (6)
      • Deep Dives (36)
        • 문제 해결 (Troubleshooting) (3)
        • CS Fundamentals (22)
        • Career Prep (4)
        • Technical Notes (7)
      • Project Log (7)
      • Any (3)
      • Cooperation (5)
        • Github (2)
        • Conventions (1)
        • Git (1)
        • Postman (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
Jcob.moon
동영상 쇼츠 서비스 프로젝트 기술적 의사 결정 part 2 테스트 도구편 Artillery를 선택한 이유 vs K6 vs Locust 그리고 APM 을 선택한 이유 vs 다른 도구들

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.