
안녕하세요 가야태자 @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는 다음과 같이 활용됩니다.
- ERP 주요 업무 트랜잭션 시나리오 구성
- 단순 조회 페이지가 아닌 로그인 → 주문/재고 조회 → 데이터 등록/수정(DB Write)으로 이어지는 실제 사용자 비즈니스 흐름을 HTTP Request Sampler와 Cookie Manager 등으로 시뮬레이션합니다.
- 데이터베이스(JDBC) 직접 부하 테스트
- 웹 화면을 거치지 않고 직접 DB 커넥션 풀로 JDBC Request를 보내 특정 쿼리(Complex JOIN, Large Scan) 자체의 병목 구간을 선별합니다.
- 분산 테스트 (Distributed Testing)
- 부하 발생기 단일 장비의 CPU/메모리가 부족할 경우, 여러 서버에서 동시에 트래픽을 가해 목표 TPS를 달성합니다. 워커 장비에
jmeter-server를 띄우고 컨트롤러에서-R옵션으로 원격 실행하는 구조입니다. (과거 Master-Slave로 불렸으나 현재 공식 문서는 client/server, 즉 컨트롤러/워커 용어를 사용합니다.) - APM(Scouter, Jennifer 등)과 결합한 튜닝 모니터링
- JMeter로 부하를 주는 동안 APM 툴을 통해 JVM Heap Memory, Thread Lock, Slow Query를 실시간 관측하고 파라미터 옵션 변경 후 Before & After 성능 변화를 측정합니다.
5. 관련글 및 참고 링크 (외부 링크)
성능 테스트 개념 정립 및 JMeter 실무 적용 시 참고하기 좋은 공식 문서와 유용한 자료들입니다.
- Apache JMeter 공식 사용자 가이드 (User Manual)
- JMeter의 기본 개념부터 고급 플러그인 설정까지 공식 작성된 가이드 문서입니다.
- Apache JMeter 공식 용어집 (Glossary)
- Elapsed Time, Latency, Connect Time 등 지표의 정확한 정의가 정리되어 있습니다. 성능 수치를 해석할 때 반드시 한 번은 읽어야 하는 문서입니다.
- Apache JMeter Remote (Distributed) Testing
- 컨트롤러/워커 구성으로 분산 부하 테스트를 수행하는 공식 절차 안내입니다.
- k6 공식 홈페이지
- 개발자 친화적인 오픈소스 부하 테스트 도구인 k6의 공식 페이지입니다.
- Apache JMeter Plugins Manager 설치 및 사용법
- 다양한 리포트와 커스텀 기능을 추가해 주는 필수 플러그인 관리자 가이드입니다.
- JMeter를 활용한 성능 테스트 - velog
- JMeter의 실무 활용 및 성능 테스트 과정을 상세하게 다룬 개발 블로그 포스팅입니다.
사실 9년 전에 예고해 놓고 안 왔습니다 ^^;;
2017년에 JMeter 소개 글을 하나 썼는데, 마지막을 이렇게 맺어 놨더라구요.
조만간 JMeter를 어떻게 웹 부하테스트에 사용하는지로 찾아 뵙겠습니다.
조만간이라고 해놓고 9년이 걸렸습니다 T.T 늦었지만 오늘 지킵니다.
👉 2017년에 쓴 JMeter 소개 글 — 9년 동안 틀린 채로 있던 두 군데를 정정해서 덧붙여 놨습니다.
'성능진단(테스트) · 개선' 카테고리의 다른 글
| [성능 개선 이야기] 국산 APM 3종을 각각 다른 입장에서 써봤습니다 (Scouter / 제니퍼 / 와탭) (0) | 2026.08.24 |
|---|---|
| [실무] JMeter 성능 테스트의 한계를 극복하는 필수 플러그인 3가지 & 대시보드 리포트 세팅 (0) | 2026.08.21 |
| [성능개선이야기] 시스템 모니터링(System Monitoring)의 개념 및 오픈소스 솔루션 비교 (nmon / Zabbix / Prometheus) (0) | 2026.07.28 |
| [성능 개선 이야기] APM이란 무엇인가? 사상, 기능, 그리고 언어별 작동 원리 (0) | 2026.07.20 |
| Apache SSL에서 주기적으로 속도가 느리다면 (0) | 2009.09.08 |