728x90
https://www.youtube.com/watch?v=3AMqUmrNido
우리 프로젝트에서 참고할 만한 내용
성능 개선을 위해 생각해 볼 요소(인프라)
- 클러스터를 싼 것을 사용(T2.micro) -> 인스턴스 큰 것으로 변경하기
- 도커 CPU, memory 사이즈 조정하기
- DB pool 사이즈 조정하기
성능 개선을 위해 생각해 볼 요소(어플리케이션)
- node.js 버전
- v8 엔진 버전, 컴파일러(5.9 이전에는 Crankshaft, 5.9이후로는 Ignition + Turbofan)
- 관련 npm 패키지 버전
- DB 버전
- 언어(JS or TS)
시나리오 기반으로 생각해볼 것
- Series N 단계 투자를 받은 유저 수 x명을 보유한 서비스 소유한 스타트업의 유저 수가 y명으로 급격히 증가할 경우를 대비한 시나리오
- 어느정도 자리를 잡은 중견 이커머스 스타트업에서 특정 기념일에 약 n만명의 유저의 트래픽이 급격히 발생할 경우를 대비한 시나리오
서버 테스트 시 측정할 요소
- web stransaction time
- Throughput(rpm)
영상 요약
성능 테스트를 위한 준비
발표자가 만든 서버
- 인증 API 서버(회원가입, 로그인, 권한 부여, 회원 정보 관리). 기본 CRUD 구현
알고자 했던 것
- 서버 한계 파악 : 내가 짠 서버가 과연 어디까지 버틸까?
- 병목 구간 확인 : 코드의 어느 부분에서 트래픽이 발생할까?
- 코드 개선 후 확인 : callback -> promise, async/await 등으로 바꿨을 때 얼마나 차이가 있을까?
목적
- Unit test 외 실제 트래픽과 유사한 상황에서의 성능을 파악하기 위해
성능 테스트의 도구
테스트 도구 선정
성능 테스트 도구 선정 기준
- 사용자 시나리오 기반으로 작성할 수 있을 것. 예) 유저가 어떤 상황에서 로그인을 하나?
- 대량 트래픽 조절 가능할 것
- 성능 테스트 도구도 Node.js로 할 것. npm으로 다 커버 가능할 것
고려한 테스트 도구 후보
- Jmeter : 성능 뛰어나다고 알려져있으나 친숙하지 않아서 제외
- Artillery : 인지도 높고 다양한 기능 지원(이걸 선택)
Artillery
duration : 240, arrivalCount : 24
- 240초 동안 24 유저(시나리오) 생성 -> 10초에 한명씩 새 유저 생성
- -> 4분동안 10초에 한 유저씩 생성되는 상황 구현
- capture : 받은 토큰을 받아서 다시 보내기 위함
(그 외 세부 Artillery 코드는 영상 또는 블로그 참조)
APM?
Artillery로 성능 테스트 환경 마련 이후 APM
이란 것도 활용 가능
- APM(Application Performance Management)의 필요성 생김(왜?)
Node.js 대표 APM
- NewRelic(발표자가 선택한 것)
- RisingStack
- NSolid
- pinpoint
APM으로 NewRelic 선정 이유
- Production 전 단계에서 고가의 APM 사용하기 부담스러움. NewRelic은 24시간 Free trier무료 기능이 있음(재확인 필요)
테스트 서버 아키텍처
타겟 서버
- 서버를 모두 도커로 띄우고 있는 상황
ECS cluster
(aws의 도커를 띄어주는 오케스트레이션 서비스)로 도커 관리하고 있음- 도커들의 DB로 RDS를 사용중
테스트 서버(Vagrant, Ansible은 러닝커브 높아서 지식 없는 경우 며칠 내에 구현은 어려움)
- Vagrant : 버추얼 박스에서 개발 환경 띄울 때 주로 사용. AWS에서 띄울 수 있음. 동시에 여러대 띄우기 위함.
- Ansible
테스트 후 성능 분석
728x90
'Research > Node.js' 카테고리의 다른 글
nodejs_번역_고성능 및 확장 가능한 Node.js 어플리케이션에 대해 - 3 (0) | 2023.03.01 |
---|---|
nodejs_번역_고성능 및 확장 가능한 Node.js 어플리케이션에 대해 - 2 (0) | 2023.02.28 |
nodejs_번역_고성능 및 확장 가능한 Node.js 어플리케이션에 대해 - 1 (0) | 2023.02.28 |
Node.js stress test tool (0) | 2023.02.06 |
Node.js로 대용량 txt 파일 읽기 (0) | 2023.02.05 |
댓글