안녕하세요! 이번 포스팅은 프로젝트 오픈을 앞두고 반복적인 QA와 부하 테스트에 지쳐있던 제가, 직접 자동화 툴을 만들게 된 과정을 공유하고자 합니다.
특히 저희 프로젝트는 넥사크로(Nexacro) 기반의 웹/웹앱 환경이었는데, Non-UI 기반인 JMeter로 테스트 스크립트를 짜는 것은 정말 고통스러운 작업이었습니다. 😭 그러다 자동화 관련 컨퍼런스에 참여하게 되었고, 여러 부스에서 얻은 아이디어를 바탕으로 "이거다!" 싶어 직접 개발을 시작했습니다.
부족한 지식은 ChatGPT와 Gemini 같은 AI의 도움을 받아가며, 드디어 GUI 기반의 사용자 행동 녹화/재생 및 부하 테스트가 가능한 저만의 툴을 완성했습니다.
## 1. 왜 만들었나? (기존 방식의 한계)
- 넥사크로(Nexacro)의 특수성: 넥사크로는 표준 HTML DOM 구조가 아니라 자체 엔진으로 렌더링되어, Selenium만으로는 요소를 찾거나 이벤트를 제어하기가 매우 까다로웠습니다.
- JMeter 스크립트의 고통: Non-UI 기반이라 실제 사용자 화면(View)이 없어, 모든 API 요청과 파라미터를 수동으로 분석하고 일일이 입력해야 했습니다. 로직이 조금만 바뀌어도 스크립트 전체를 수정해야 했죠.
- 반복 QA의 비효율: 매번 같은 시나리오를 수동으로 클릭하며 테스트하는 것은 엄청난 시간이 소요되었습니다.
## 2. 솔루션: GUI 기반 "녹화(Record) & 재생(Replay)"
제가 만든 툴은 이 모든 문제를 한 번에 해결하는 것을 목표로 했습니다.
- GUI: PyQt5를 사용해 누구나 쉽게 사용할 수 있는 GUI를 만들었습니다.
- 브라우저 제어: Selenium으로 웹(Web) 및 모바일 웹(Web App) 브라우저를 제어합니다.
- 녹화: 브라우저에 **커스텀 JavaScript 로거(nx_id_logger.js)**를 주입(Injection)하여 사용자의 모든 행동(클릭, 마우스 이동, 입력, 스크롤 등)을 실시간으로 감지하고 JSON으로 저장합니다.
- 재생: 저장된 JSON 시나리오를 Selenium ActionChains로 읽어들여 사용자 행동을 그대로 재현합니다.
- 부하 테스트: 저장된 시나리오를 바탕으로 **멀티쓰레드(Multi-Thread)**를 생성하여, 여러 가상 유저가 동시에 접속하는 부하 테스트를 수행합니다.
## 3. 주요 기능 시연
1. 사용자 행동 녹화 (Record)
가장 핵심적인 기능입니다. Selenium으로 브라우저를 띄우고 사용자가 페이지와 상호작용하면, 주입된 JS 로거가 모든 이벤트를 감지하여 왼쪽 로그 창에 실시간으로 쌓아줍니다.
mousedown, mousemove, input, scroll 등 세밀한 이벤트까지 수집하여, 넥사크로의 복잡한 UI 조작도 대부분 기록할 수 있습니다.

[이미지 1 설명] 녹화가 진행 중인 화면. 왼쪽 리스트에 사용자의 클릭, 입력 이벤트가 JSON 형태로 수집되고 있습니다.
2. 시나리오 재생 및 리포트 (Replay & Report)
녹화된 JSON 시나리오를 선택하고 "Replay" 버튼을 누르면, Selenium이 방금 녹화된 행동을 순서대로 자동 재현합니다.
재생이 완료되면, 각 스텝의 성공/실패 여부, 수행 시간, 그리고 결과 스크린샷까지 포함된 상세 리포트를 생성합니다. 덕분에 오류가 발생한 지점을 직관적으로 파악할 수 있습니다.

[이미지 2 설명] Replay 실행 결과 리포트 화면. 스텝별 상태(Success)와 스크린샷이 함께 기록되어 있습니다.
3. GUI 기반 부하 테스트 (Load Test)
JMeter의 가장 큰 고통이었던 스크립트 작성 문제를 해결했습니다.
녹화된 시나리오(.json 파일)를 선택하고, **"유저 수(Threads)"**와 **"반복 수(Iterations)"**만 입력하면, Python의 concurrent.futures를 이용해 설정된 유저 수만큼의 쓰레드가 생성되어 서버에 동시 부하를 발생시킵니다. 더 이상 복잡한 스크립트 작업이 필요 없습니다.

[이미지 3 설명] 부하 테스트 탭. 테스트 케이스(JSON)마다 가상 유저 수(쓰레드)와 반복 수를 설정하여 부하를 줄 수 있습니다.
4. 고급 기능 지원 (넥사크로 특화)
단순 클릭뿐만 아니라, 넥사크로 환경에서 특히 골치 아픈 파일 업로드/다운로드까지 autoit 라이브러리를 연동하여 완벽하게 자동화하는 데 성공했습니다.
## 4. 결론 및 향후 계획
JMeter의 높은 진입 장벽과 넥사크로의 특수성이라는 두 가지 문제를 동시에 해결하기 위한 도전이었습니다. AI의 도움으로 JavaScript Hooking이나 Python Multithreading 같은 생소했던 기술들을 적용해보며 많이 성장할 수 있었습니다.
이 도구 덕분에 저희 팀은 QA 단계에서 반복적인 시나리오 테스트 시간을 획기적으로 줄이고, 더 의미 있는 버그를 찾는 데 집중할 수 있게 되었습니다.
긴 글 읽어주셔서 감사합니다. (궁금한 점은 댓글로 남겨주세요!)
'파이썬 > 크롤링' 카테고리의 다른 글
| Python과 Selenium을 사용하여 웹 크롤링하기(스크린샷, 워드 파일 생성) (0) | 2025.03.27 |
|---|
