웹 애플리케이션 서비스 배포하기 전 테스트 자동화 도구 사용하여 준비해보기
시작
웹 부하 테스트를 하는 이유
회사에서 새로운 서비스를 런칭하려고 합니다. 그런데 다른 프로젝트와 다르게 Windows 서버가 아니라 Azure 클라우드를 이용하여 컨테이너와 컨테이너 오케스트레이션 환경으로 서버를 구성하였습니다. Azure Kubernetes Service이고, 그라파나로 웹의 애널리틱스를 볼 수 있습니다. 팀에서도 AKS를 처음 구성하는 거라 CPU, 메모리 등 제한 설정에 대해서 어느 정도 운영할지도 정해지지 않았습니다. 그래서 최대 어디까지 버틸 수 있는 웹 부하 성능 테스트가 필요하게 되었습니다.
Apache JMeter란?
아파치에서 자바로 만든 웹 애플리케이션으로 웹 애플리케이션에 초점을 둔 다양한 서비스의 성능을 분석하고 측정하기 위한 부하 테스트 도구입니다. 제이미터는 JDBC 데이터베이스 연결, FTP, LDAP, 웹 서비스, JMS, HTTP, 제네릭 TCP 연결, OS 네이티브 프로세스를 위한 단위 테스트 도구로도 사용할 수 있습니다.
사용하려는 기능은 Apache JMeter의 플러그인을 사용하여 테스트를 수행할 것입니다. 플러그인은 독립된 프로젝트로, Plugin Manager를 통해 플러그인을 설치할 수 있습니다. 그래서 설치하지 않으면 초기 화면에서는 플러그인을 볼 수 없습니다.
준비
- 자바 8 이상 버전 설치
https://www.oracle.com/kr/java/technologies/downloads/ - Apache JMeter 다운로드
https://jmeter.apache.org/download_jmeter.cgi - JMeter Plugins Manager 다운로드
https://jmeter-plugins.org/ - Chorme Web Driver 다운로드
https://chromedriver.chromium.org/downloads
사용
Apache JMeter 설정
Apache JMeter 5.5 zip 을 다운받아 압축을 해제합니다. apache-jmeter-5.5\bin 경로에서 jmeter.bat 을 실행하면 아래와 같은 GUI 웹 애플리케이션이 실행됩니다.
플러그인 설정
다운로드 받은 jar 파일을 apache-jmeter-5.5\lib\ext 경로에 넣어줍니다. 제대로 넣어주고 다시 제이미터를 실행하면 보이지 않던 아이콘이 생깁니다.
Selenium/WebDriver Support 설치
새로 생긴 아이콘을 클릭하거나 Options 메뉴 클릭 후 플러그인 매니저를 사용하여 Available Plugins에서 Selenum/WebDriver Support를 체크 후 Apply Chages and Restart JMeber 버튼을 클릭하여 설치합니다.
셀레늄(Selenium)은 웹 애플리케이션 자동화 및 테스트를 위한 포터블 프레임워크입니다. 아파치 2.0 라이선스로 배포되는 오픈 소스 소프트웨어이며 무료로 다운로드 및 사용할 수 있습니다. Selenium은 WebDriver라는 API를 통해 운영체제에 설치된 웹 브라우저를 제어할 수 있습니다. 웹 브라우저를 제어할 수 있다는 것은 JavaScript로 렌더링이 완료된 DOM 결과물에도 접근 할 수 있기 때문에 JavaScript를 사용하여 DB 데이터를 가져오거나 비동기적으로 뒤늦게 불러오는 컨텐츠들에 대한 테스트를 할 수 있습니다.
Selenium WebDriver API를 사용할 수 있는 웹 브라우저는 크롬, 사파리, IE, Edge, 파이어폭스 등이 있습니다.
Chrome Driver 다운로드 및 설정
웹 브라우저마다 고유한 렌더링 엔진이 있어 HTML이 다를 수 있습니다. 이번 테스트에서는 크롬 브라우저를 사용합니다. 먼저 설치된 크롬 브라우저의 버전을 확인합니다.
버전에 맞는 ChromeDrvier를 운영체제에 맞게 다운로드합니다.
zip 압축 해제를 해주면 exe 실행파일이 있는데 apache-jmeter-5.5\bin 경로에 넣어준 후에 다시 아파치 제이미터를 실행합니다.
Thread Group 설정
JMeter가 스레드를 생성해서 요청을 수행하도록 사용자 수, 부하 발생 시간 등을 설정합니다. 사용자 수를 100으로 설정하여 최대한 제 컴퓨터 성능 최대까지 사용하도록 합니다.
WebDrviver Sampler, Chorme Driver Config를 사용하여 테스트 정보를 설정합니다.
캡처와 동일하게 셋팅하면 실행되지 않습니다. 준비된 웹 테스트 환경이 없어서 오류가 뜹니다. chromeDriver 버전이랑 설치된 크롬 버전이 안맞으면 실행이 되지 않을 수 있고, 크롬 드라이버 경로에서도 오류가 날 수 있습니다. 컴퓨터 환경에 맞게 잘 설정해주어야 오류 없이 테스트를 진행할 수 있습니다. View Results Tree 말고도 in Table도 있고 다양한 화면이 존재합니다. 용도에 맞게 사용할 수 있습니다.
끝
개발한 프로젝트는 시간에 쫓겨서 Window 서버 IIS에 배포하기만 했었는데 이번 포스팅에서는 다루지 않았지만 SEO 설정, 웹 속도 테스트, 웹 접근성 테스트 등 다양하게 준비하는 모습을 옆에서 관람했습니다. 다음에 프로젝트 서비스 런칭할 때 대략적인 서버 사양만 생각하지 말고 객관적인 수치를 확인할 수 있는 테스트 도구를 사용하면서 런칭을 준비해보고 싶어집니다.
참고사이트
https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_%EC%A0%9C%EC%9D%B4%EB%AF%B8%ED%84%B0
https://jmeter-plugins.org/wiki/Start/
https://ko.wikipedia.org/wiki/%EC%85%80%EB%A0%88%EB%8A%84_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)
https://chromedriver.chromium.org/security-considerations