반응형

image.png

안녕하세요 가야태자 @talkit 입니다.

요즘 제가 하고 있는 일은 기업 ERP의 성능을 개선하는 것입니다.

이 성능을 개선하기 위해서 일단 성능 테스트를 진행합니다.

현재 성능을 파악하기 위함이고, 또는 미래 성능을 예측해서 사용자가 어느 정도 이 시스템을 많이 사용할 수 있는지를 파악하는 용도라고 생각하면 됩니다.

이때 사용하는 도구로는 부하 발생기, 리포트 생성기 등이 있는데

이 원천 데이터를 생산할 수 있는 프로그램이 Apache JMeter입니다. 리포트도 만들어 줍니다.

Apache JMeter 외에도 성능 테스트를 할 수 있는 도구는 여러 가지가 있습니다.

이러한 이유로 오늘은 성능 테스트 도구들, 그리고 Apache JMeter에 대해서 좀 더 알아보겠습니다.

1. 성능 테스트(Performance Testing)의 핵심 개념

성능 테스트는 시스템이 특정 부하(Load) 상황에서 얼마나 빠르고, 안정적이며, 효율적으로 동작하는지를 측정하는 과정입니다. 단순히 기능이 잘 작동하는지 확인하는 기능 테스트와 달리, 시스템의 수용 한계(Capacity)를 파악하는 것이 목적입니다.

  • 부하 테스트 (Load Testing): 예상되는 정상/최대 사용자 트래픽 상황에서 시스템이 목표 응답 시간(Response Time)과 처리량(Throughput)을 유지하는지 확인합니다.
  • 스트레스 테스트 (Stress Testing): 임계치를 넘어서는 과도한 부하를 순간적 혹은 지속적으로 가해 시스템이 언제, 어떻게 무너지는지(Point of Failure) 파악하고 복구 능력을 평가합니다.
  • 내구성 테스트 (Soak/Endurance Testing): 오랜 시간(예: 24시간 이상) 일정 부하를 지속시켜 메모리 누수(Memory Leak)나 자원 고갈 문제가 발생하는지 점검합니다.

성능 테스트의 주요 지표

  • TPS (Transactions Per Second): 초당 처리할 수 있는 비즈니스 트랜잭션 건수
  • Response Time (Elapsed Time, 응답 시간): 요청을 보내기 직전부터 마지막 응답을 받은 직후까지 걸린 시간. JMeter 기준으로 브라우저 렌더링 시간과 클라이언트 스크립트 처리 시간은 포함되지 않습니다.
  • Latency (대기 시간): 요청을 보내기 직전부터 첫 번째 응답을 받은 직후까지 걸린 시간. 흔히 "순수 서버 처리 시간"으로 오해하지만, JMeter에서는 요청 조립 시간과 커넥션 수립 시간(Connect Time)이 latency에서 차감되지 않고 포함됩니다.
  • Connect Time: 커넥션을 수립하는 데 걸린 시간으로 SSL 핸드셰이크 시간을 포함합니다. 병목이 네트워크·TLS 구간인지 애플리케이션 구간인지 가르는 데 유용합니다.

2. 주요 성능 테스트 도구 비교

성능 테스트 도구는 운영 환경, 예산, 스크립트 작성 방식에 따라 라이선스와 특징이 다릅니다.

구분 대표 도구 주요 특징 및 장단점
오픈소스 Apache JMeter Java 기반, GUI 지원으로 진입장벽이 낮고 웹, DB, API 등 가장 범용성이 높음.
Grafana k6 Go 언어로 개발된 엔진으로 가볍고 빠르게 동작하며, JavaScript/TypeScript 스크립트로 CI/CD 파이프라인 연동에 최적화 (v0.57부터 TypeScript 기본 지원).
Gatling Scala 코어에 Scala/Java/Kotlin DSL 제공(3.7+). 비동기 모델(Akka actor + Netty)로 자원 효율이 높고 완성도 높은 HTML 리포트 제공.
Locust Python 코드 기반 스크립팅, 복잡한 사용자 시나리오 동적 제어에 유용.
상용 / 엔터프라이즈 OpenText LoadRunner 대기업/금융권 전통의 강자. 대규모 인프라 모니터링과 다원화된 프로토콜 지원 (고가의 비용). HP → Micro Focus를 거쳐 2023년 OpenText로 편입.
BlazeMeter (Perforce) JMeter 100% 호환을 내세우는 클라우드 SaaS 확장 서비스. 서버 구축 없이 대규모 클라우드 가상 사용자 생성 가능.
Tricentis NeoLoad JMeter 기반이 아닌 자체 엔진 상용 도구. 노코드 GUI 레코딩과 YAML 기반 as-code 방식이 핵심이며, JMeter/Gatling 스크립트 실행 및 결과 통합을 부가적으로 지원.

3. Apache JMeter의 주요 기능

Apache JMeter는 오픈소스 부하 테스트 시장에서 오랜 기간 표준처럼 사용되어 온 강력한 도구입니다.

  • 다양한 프로토콜 지원: HTTP/HTTPS 웹 애플리케이션, REST/SOAP API, JDBC(데이터베이스 직접 쿼리), LDAP, JMS, FTP, SMTP 등 다양한 인프라 레이어 테스트 가능.
  • GUI 및 Non-GUI (CLI) 모드: 테스트 시나리오를 만들 때는 직관적인 GUI 화면을 사용하고, 실제 대규모 부하를 인가할 때는 시스템 자원을 아끼기 위해 CLI(Headless) 모드로 실행. 공식 문서도 *"GUI mode should only be used for debugging"* 이라고 명시하고 있습니다.
  • Thread Group 기반 사용자 시뮬레이션: 가상 사용자(Thread) 수, Ramp-Up 시간(사용자가 늘어나는 속도), 루프 횟수 등을 세밀하게 제어.
  • 동적 리포트 생성: 테스트 실행 후 APM 수준의 대시보드 형태 HTML 리포트 자동 생성 (Response Time, Error Rate, Throughput 등). JMeter 3.0부터 기본 제공.
  • 풍부한 플러그인 생태계: JMeter Plugins Manager를 통해 동적 시나리오 제어, 커스텀 리스너, 타사 모니터링 툴(InfluxDB, Grafana) 실시간 연동 확장.

알아두어야 할 한계

  • JMeter는 브라우저가 아닙니다. HTTP 프로토콜 레벨에서 요청·응답을 주고받을 뿐, JavaScript를 실행하거나 화면을 렌더링하지 않습니다. 따라서 SPA 기반 ERP 화면이라면 JMeter의 TPS·응답 시간이 좋아도 사용자 체감 성능은 다를 수 있습니다. 프론트엔드 구간은 Lighthouse, k6 browser 모듈 등으로 별도 측정을 병행해야 합니다.
  • 가상 사용자 1명당 OS 스레드 1개를 사용하는 모델이라 k6나 Gatling(비동기 모델)에 비해 부하 발생기의 CPU/메모리 소모가 큽니다. 이것이 아래 분산 테스트가 필요해지는 실질적인 이유입니다.

4. 현장에서의 Apache JMeter 활용 방안

ERP 및 기업형 시스템 성능 개선 작업 시 JMeter는 다음과 같이 활용됩니다.

  1. ERP 주요 업무 트랜잭션 시나리오 구성
  2. 단순 조회 페이지가 아닌 로그인 → 주문/재고 조회 → 데이터 등록/수정(DB Write)으로 이어지는 실제 사용자 비즈니스 흐름을 HTTP Request Sampler와 Cookie Manager 등으로 시뮬레이션합니다.
  3. 데이터베이스(JDBC) 직접 부하 테스트
  4. 웹 화면을 거치지 않고 직접 DB 커넥션 풀로 JDBC Request를 보내 특정 쿼리(Complex JOIN, Large Scan) 자체의 병목 구간을 선별합니다.
  5. 분산 테스트 (Distributed Testing)
  6. 부하 발생기 단일 장비의 CPU/메모리가 부족할 경우, 여러 서버에서 동시에 트래픽을 가해 목표 TPS를 달성합니다. 워커 장비에 jmeter-server를 띄우고 컨트롤러에서 -R 옵션으로 원격 실행하는 구조입니다. (과거 Master-Slave로 불렸으나 현재 공식 문서는 client/server, 즉 컨트롤러/워커 용어를 사용합니다.)
  7. APM(Scouter, Jennifer 등)과 결합한 튜닝 모니터링
  8. JMeter로 부하를 주는 동안 APM 툴을 통해 JVM Heap Memory, Thread Lock, Slow Query를 실시간 관측하고 파라미터 옵션 변경 후 Before & After 성능 변화를 측정합니다.

5. 관련글 및 참고 링크 (외부 링크)

성능 테스트 개념 정립 및 JMeter 실무 적용 시 참고하기 좋은 공식 문서와 유용한 자료들입니다.


사실 9년 전에 예고해 놓고 안 왔습니다 ^^;;

2017년에 JMeter 소개 글을 하나 썼는데, 마지막을 이렇게 맺어 놨더라구요.

조만간 JMeter를 어떻게 웹 부하테스트에 사용하는지로 찾아 뵙겠습니다.

조만간이라고 해놓고 9년이 걸렸습니다 T.T 늦었지만 오늘 지킵니다.

👉 2017년에 쓴 JMeter 소개 글9년 동안 틀린 채로 있던 두 군데를 정정해서 덧붙여 놨습니다.


반응형

+ Recent posts