Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

우분투 환경에서 Node.js 앱 성능/가용성 테스트하기 - 강창훈 | 2023. 3...

우분투 환경에서 Node.js 앱 성능/가용성 테스트하기 - 강창훈 | 2023. 3. 25. 정기총회

https://event.ubuntu-kr.org/2022/05/21/2023-general-assembly/
우분투 환경에서 Artillery를 이용하여 Node.js 앱 성능과 가용성 테스트 하는 방법에 대해 이야기 해 보고자 합니다. 웹페이지, RESTful API, 웹소켓 테스트를 각각 진행하는 방법에 대해 다룰 예정입니다.

추가 자료 링크: https://drive.google.com/drive/folders/1lRyhaAeCP6yjXZfTOHdrnHuiyGMkktFI

Ubuntu Korea Community

March 26, 2023
Tweet

More Decks by Ubuntu Korea Community

Other Decks in Programming

Transcript

  1. Ubuntu 2023 정기총회 -기술발표 강창훈 Node.js 애플리케이션 성능검증 및 테스트

    -Artillery 지니공공아카데미 Node.js 애플리케이션 성능검증 및 테스트 -Artillery
  2. 01 Artillery 소개 1.Artillery 소개 2.Artillery 용도 3.Artillery 특징 02

    Node.js 앱 Ubuntu 20.03 배포하기 1.NodeSampleApp 준비하기 2.Ubuntu 20.03 준비하기 3.Node.js Framework 설치하기 4.pm2 패키지 설치하기 5.nginx 설치하기 6.NodeSampleApp 배포서비스 03 Artillery 기반 성능 테스트하기 1.artillery 패키지 설치하기 2.yam 파일 테스트 시나리오 정의하기 3.웹페이지 시나리오 테스트 4.RESTAPI 시나리오 기반 테스트 5.Websocket 시나리오 기반 테스트 6.테스트 결과 HTML 리포팅 Contents 지니공공아카데미 2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery
  3. 01 Artillery 소개 1.Artillery 소개 2.Artillery 테스트 지원환경 3.Artillery 테스트

    방식 지니공공아카데미 2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery
  4. 01 Artillery 소개 1.Artillery 소개 지니공공아카데미 2023 강창훈 Node.js 애플리케이션

    성능검증 및 테스트 -Artillery • 세계에서 가장 진보된 부하 테스트 플랫폼 Artillery • 클라우드 기반의 오픈 소스이며 자주 사용하는 모니터링 및 CI/CD 스택과 통합 • Node.js 환경 기반 스트레스,성능테스트,시나리오 기반 테스트 환경 제공 노드 패키지 제공 • Artillery 패키지 개발환경 과 서버 설치 사용가능 • Web Page,RESTful,WebSocket(Socket.IO),GraphQL,gRPC 기반 성능/시나리오 기반 테스트 가능 https://www.artillery.io
  5. 01 Artillery 소개 2.Artillery 테스트 지원 환경 지니공공아카데미 2023 강창훈

    Node.js 애플리케이션 성능검증 및 테스트 -Artillery • 서버분산 환경-nginx,loadbalancer • 멀티코어 클러스터링-pm2 • 로컬 개발 환경 지원 -nodemon
  6. 01 Artillery 소개 3.Artillery 테스트 방식 지니공공아카데미 2023 강창훈 Node.js

    애플리케이션 성능검증 및 테스트 -Artillery • Yml파일 기반 테스트 시나리오 작성가능 • Pm2를 통한 서버 서비스 환경 모니터링 가능
  7. 02 Node.js App Ubuntu 20.03 배포하기 1.NodeSampleApp 준비하기 2.Ubuntu 20.03

    준비하기 3.Node.js Framework 설치하기 4.pm2 패키지 설치하기 5.nginx 설치하기 6.NodeSampleApp 배포서비스 지니공공아카데미 2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery
  8. 02 Node.js 앱 Ubuntu 20.03 배포하기 1.NodeSampleApp 준비하기 지니공공아카데미 2023

    강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery • 구글 드라이브 하기 링크에서 샘플 앱 제공 • 풀소스 깃 허브 링크 참고 https://github.com/jinykang/ubuntu-artillery.git https://drive.google.com/drive/folders/1lRyhaAeCP6yjXZfTOHdrnHuiyGMkktFI?usp=sharing bit.ly/3LOOu9e
  9. 02 Node.js 앱 Ubuntu 20.03 배포하기 2.Ubuntu 20.03 준비하기 지니공공아카데미

    2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery 1)NCloud 플랫폼 접속하기 https://www.ncloud.com/ 2)콘솔접속하기 https://console.ncloud.com 3)NCloud Ubuntu 20.03 가상 서버 생성 https://drive.google.com/file/d/1bRW8Fu_RIncbMB7t-FvFfdNcSkE388tT/view?usp=share_link
  10. 02 Node.js 앱 Ubuntu 20.03 배포하기 3.Node.js Framework 설치하기 지니공공아카데미

    2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery 1) node.js 18.x 설치하기 sudo apt install curl curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs 2) 설치된 NODE 버전확인하기 node -v v18.15.0 3) 설치된 NPM버전확인하기 npm -v 9.5.0 • https://drive.google.com/file/d/1iliOgGvdi-3WAvrW5ibUcwLC_RRD0K_U/view?usp=share_link
  11. 02 Node.js 앱 Ubuntu 20.03 배포하기 4.pm2 패키지 설치하기 지니공공아카데미

    2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery 1)pm2 설치 npm install pm2 –g pm2 version 2)PM2로 노드어플리케이션 실행하기 -서비스 폴더 이동 cd /var/www/nodesampleapp -노드패키지 복원설치하기 npm I 3)노드애플리케이션 실행하기 pm2 start app.js --name nodesampleapp -pm2 주요명령어 pm2 list pm2 start app.js --name nodesampleapp pm2 stop nodesampleapp pm2 restart nodesampleapp pm2 delete nodesampleapp 4)노드애플리케이션 서비스 죽이기(내리기) pm2 delete nodesampleapp 5)CPU 코어 클러스터링 환경으로 노드 애플리케이션 실행하기 ㄴ모든 코어마다 노드실행시 -i 0 ㄴ필요한 코어수만큼만 실행시 -i 갯수 pm2 start app.js --name nodesampleapp -i 0 #서버코어수 확인하기 cat /proc/cpuinfo • https://drive.google.com/file/d/1YrMtMzLgc2jBuuQHY2HAIJrjwLR65edV/view?usp=sharing
  12. 02 Node.js 앱 Ubuntu 20.03 배포하기 5.nginx 설치하기 지니공공아카데미 2023

    강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery 1)nginx 설치하기 sudo apt install nginx 2)설치된 nginx 제거하기 sudo apt remove nginx 3)NGINX 서비스 관리하기 sudo systemctl enable nginx sudo systemctl start nginx sudo systemctl status nginx sudo systemctl stop nginx https://drive.google.com/file/d/1ZCA7hqwEldLIdflkwXnc6gDY05malLzX/view?usp=share_link 4)노드샘플앱 어플리케이션 호스팅하기 vi /etc/nginx/sites-available/default server { listen [::]:80; listen 80; server_name ubuntu.wechatmaker.com 175.45.195.135; location / { proxy_pass http://192.168.0.6:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; } } 5)설정파일 구문검사 및 웹서버 재시작 sudo nginx -t sudo nginx -s reload
  13. 02 Node.js 앱 Ubuntu 20.03 배포하기 6.NodeSampleApp 배포서비스 지니공공아카데미 2023

    강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery -WinSCP나 데브옵스(CI/CD) 기능을 통해 소스를 배포합니다.
  14. 03 Artillery 소개 1.artillery 패키지 설치하기 2.yml 파일 테스트 시나리오

    정의하기 3.웹페이지 시나리오 테스트 4.RESTAPI 시나리오 기반 테스트 5.Websocket 시나리오 기반 테스트 6.테스트 결과 HTML 리포팅 지니공공아카데미 2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery
  15. 03 Artillery 기반 성능 테스트하기 1.artillery 패키지 설치하기 지니공공아카데미 2023

    강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery 1) 설치하기 npm i artillery --save-dev or npm install -g artillery 2) 설치여부 확인하기 artillery dino 3)CLI 기반 테스트하기 -20개의 연결(브라우저연결) 30건의 요청 보낸다. artillery quick –count 20 –n 30 http://175.45.195.135 -1000건의 연결에 300건의 요청을 보낸다. artillery quick --count 1000 -n 300 http://175.45.195.135/ --60초동안 동시접속자5명이 초당10회 요청하기 artillery quick --duration 60 --rate 10 -n 5 http://localhost:3000 -60초동안 동시접속자5명이 초당10회 요청하기 pm2 monit -20개의 연결(브라우저연결) 30건의 요청 보낸다. artillery quick --count 20 -n 30 http://localhost:3000 artillery quick --count 20 -n 30 http://175.45.195.135 artillery quick --duration 60 --rate 10 -n 5 http://175.45.195.135 artillery quick --duration 60 --rate 10 -n 5 http://175.45.195.135
  16. 03 Artillery 기반 성능 테스트하기 2.yml 파일 테스트 시나리오 정의하기

    지니공공아카데미 2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery 1) sample.yml 시나리오파일 생성 -node프로젝트 test폴더 생성 후 > sample.yml 파일 생성 및 기능정의 • target: 대상url주소 • phases: 테스트 진행단계 • payload: 테스트용 데이터 호출 • senarios: 테스트 시나리오 정의 2)pm2 모니터링하기 pm2 monit 3)시나리오파일 실행하기 • cd test • artillery run sample.yml Basic Sample) config: target: "https://example.com/api" phases: - duration: 60 arrivalRate: 5 name: Warm up - duration: 120 arrivalRate: 5 rampTo: 50 name: Ramp up load - duration: 600 arrivalRate: 50 name: Sustained load payload: path: "keywords.csv" fields: - "keyword" scenarios: - name: "Search and buy" flow: - post: url: "/search" json: kw: "{{ keyword }}" capture: - json: "$.results[0].id" as: "productId" - get: url: "/product/{{ productId }}/details" - think: 5 - post: url: "/cart" json: productId: "{{ productId }}" -think는 지정된 초만큼 멈췄다가 다음 시나리오 flow를 진행합니다. • Artillery는 테스트가 실행되는 동안 10초마다 콘솔에 보고서를 인쇄합니다. • 여기에는 해당 기간 동안 수집된 성능 지표가 포함됩니다. • 테스트 실행이 끝나면 실행 및 완료된 VU 수, 완료된 요청 수, 응답 시간, 상태 코드 및 발생했을 수 있는 모든 오류를 포함한 전체 요약을 받게 됩니다
  17. 03 Artillery 기반 성능 테스트하기 3.웹페이지 시나리오 테스트 지니공공아카데미 2023

    강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery 1)웹페이지 테스트 cd test artillery run sample.yml 2)pm2 모니터링하기 pm2 monit --웹페이지 테스트 config: target: "http://175.45.195.135" phases: - duration: 60 arrivalRate: 5 name: Warm up scenarios: - name: "Search" flow: - get: url: "/entry" 단계별 테스트 설정 적용하기 -- 60초동안 매초 5회 요청발생 : 총요청횟수 : 5*60 = 300번 요청발생
  18. 03 Artillery 기반 성능 테스트하기 4.RESTAPI 시나리오 기반 테스트 지니공공아카데미

    2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery 1)RESTful 시나리오 테스트 cd test artillery run sample.yml 2)pm2 모니터링하기 pm2 monit --RESTP API 테스트 config: target: "http://175.45.195.135/api" phases: - duration: 60 arrivalRate: 5 name: Warm up - duration: 120 arrivalRate: 5 rampTo: 50 name: Ramp up load - duration: 600 arrivalRate: 50 name: Sustained load scenarios: - name: "Search" flow: - get: url: "/test1?name=eddy" 단계별 테스트 설정 적용하기 -- 60초동안 매초 5명의 가상 사용자 생성 API호출 : 총요청횟수 : 5*60 = 300번 요청발생 -- 120초동안 매초 5회에서 최대 50회까지 점진적으로 요청수 증가 발생시킴 -- 600초(10분)동안 매초 50회 동시 요청발생-초당 동접자 50명 반환결과 값: Artillery는 테스트가 실행되는 동안 10초마다 콘솔에 보고서를 인쇄합니다. 여기에는 해당 기간 동안 수집된 성능 지표가 포함됩니다. 테스트 실행이 끝나면 실행 및 완료된 VU 수, 완료된 요청 수, 응답 시간, 상태 코드 및 발생했을 수 있는 모든 오류를 포함한 전체 요약을 받게 됩니다.
  19. 03 Artillery 기반 성능 테스트하기 4.RESTAPI 시나리오 기반 테스트 지니공공아카데미

    2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery 1)RESTful 시나리오 테스트 artillery run sample.yml 2)pm2 모니터링하기 pm2 monit STEP2)테스트값을 전달해 테스트할때 --csv파일을 하나 만들고 테스트값을 저장한다. -in keywords.csv 파일 keyword eddy gabriel config: target: "http://175.45.195.135/api" phases: - duration: 60 arrivalRate: 5 name: Warm up - duration: 120 arrivalRate: 5 rampTo: 50 name: Ramp up load payload: path: "keywords.csv" fields: - "keyword" scenarios: - name: "Search" flow: - get: url: "/test1?name={{ keyword }}"
  20. 03 Artillery 기반 성능 테스트하기 5.Websocket 시나리오 기반 테스트 지니공공아카데미

    2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery 1)WebSocket 기반 시나리오 테스트하기 artillery run sample.yml 2)pm2 모니터링하기 pm2 monit Socket-STEP1)소켓에 메시지 보내기 테스트 config: target: "http://175.45.195.135" socketio: transports: ["websocket"] phases: - duration: 60 arrivalRate: 10 scenarios: - name: "Socket Testing" engine: socketio flow: - emit: channel: "broadcast" data: "Hi This is Testing..." --1분동안 초당 10명 가상 사용자 생성 메시지 전송 : 초당 동접자 10명 -pm2 모니터링하기 pm2 monit artillery run sample.yml
  21. 03 Artillery 기반 성능 테스트하기 6.테스트 결과 HTML 리포팅 지니공공아카데미

    2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트 -Artillery 1)테스트 결과 HTML 리포트로 출력하기 • .yml 파일과동일한 경로에 test-run-report.json 파일을 생성한다. • 하기와 같이 테스트를 진행한다. 테스트가 모두 종료가 되면 결과 데이터가 json파일에 저장된다. • json파일을 이용해 html파일을 만든다. artillery run --output test-run-report.json sample.yml • json파일을 이용해 html파일을 만든다. artillery report test-run-report.json
  22. 연사 소개 지니공공아카데미 2023 강창훈 Node.js 애플리케이션 성능검증 및 테스트

    -Artillery -모하는 사람이고? 사업 하고 강의 하고 책쓰는 시니어 개발자 입니다. -현재는 모하며 먹고사노? 현) 실시간 메시징 솔루션 기업 엠소프트웨어 대표( CEO/ CTO) 현) 모두의연구소 전략기획팀 SW사업총괄PM - 겸업 현) 글로벌 팀빌딩 플랫폼 비긴메이트 CTO - 겸업 현) 비영리 IT교육 단체 지니공공아카데미 공동설립자/운영자 현) SW아키텍트,풀스택개발자-전문강사 현) Microsoft MVP 2023 –Development (Node.js, React.js, C#,.NET….) 현) Naver Cloud Master 2023 [email protected] 010-2760-5246