baedal-project / baedal

배달 프로젝트
https://baedal.pyuri.com/
1 stars 4 forks source link

[Feat] Jmeter 부하 테스트 #31

Open celinaym opened 2 years ago

celinaym commented 2 years ago

:bulb: 이슈 내용

:white_check_mark: 작업 내용

:rotating_light: 주의 사항

celinaym commented 2 years ago

Jmeter 설치 및 사용법 link

https://jmeter.apache.org/usermanual/component_reference.html#Backend_Listener

celinaym commented 2 years ago
  1. GET /api/orders : Threads=1000(동접자 1000명 가정), loop count=1개를 보냈을 때 connection time out이 뜨면서 서버가 다운되었습니다. log를 확인해보니 DB에 select query가 나가다가 멈추는데 1000명의 사용자가 많은 데이터들을 조회하다 보니 시간이 오래 걸려서 그런 것 같습니다. cache server 등을 통해 개선할 필요가 있습니다.
  2. POST /api/orders : 100만명의 동접자를 테스트 하려고 바로 jmeter을 이용해 Threads=1,000,000/loop count=infinite로 설정하였는데 post 요청의 형식이 틀려서 중지해야 했음에도 loop이 너무 많다 보니 중지가 안되는 상황이 있어 jmeter 자체를 강제 종료해야 했습니다. jmeter unit test이 필요할 것 같습니다.
celinaym commented 2 years ago
  1. DB 구조 개편 2. ES 이용해서 실시간으로 불러오는 방법도 추후에 논의해보면 좋을 것 같습니다. *추가적으로 htop을 설처히면 CPU 사용량, 메모리 사용량 등을 GUI로 볼 수 있어서 얼마나 부하가 걸리는지 확인할 수 있으니 참고하시면 좋을 것 같아요:)
celinaym commented 2 years ago

1) 내일 시나리오 작성해서 테스트 해보려고 해요,,! 그리고 jmeter에서 remote monitoring이라고 분산 부하 테스트 할 수 있던데 가능하다면 이것도 해보면 좋을 것 같아요. 2) 추가적으로 저희 아직 기준도 없는 것 같아요. 예를 들자면, '서버가 죽었네 -> 부하 테스트 실패했다'가 아니라 단위 시간당 목표한 동접자 수 도달을 완료했다와 같이 구체적인 기준도 정할 필요가 있어 보입니다. 3) 그리고 실제 서비스를 모방해서 시나리오 작성을 하게 될 경우 프론트만 괜찮다면 토큰(최대한 피하고 싶었지만)…. 넣는 게 좋을 수도 있을 것 같아요. 테스트 때문에 넣여야 할 수도 있는거지 당연하게도 백엔드적으로 뭘 보여주는데 사용할 수는 없습니다,, 어떤 글을 봤는데(origin을 못 찾겠어여,,ㅎ) 대충 그 글쓴이가 jmeter에서 부하테스트를 했을 때 실패한 이유는 다음과 같았어요. token을 사용하기 때문에 만료시간이 존재하는데 갑자기 많은 사용자가 몰렸을 때 로그인이 튕길 경우 사용자는 계속적으로 접속하려고 하기 때문에 인증 부분과 관련된 부하가 크다는 뭐 대충 이러한 내용이었습니다. 4) 계속 찾아보다가 느낀 점 : 부하가 안 걸린다면 코드가 괜찮아서가 아닌, 오히려 테스트 설계를 잘못한 것일 수도 있겠다 생각이 들어요. Okky 가보니깐 동접자 수가 실제로는 저희가 테스트 한 것만큼 이렇게 많이 버티지 못한다고 하더라고요. 부하가 안 걸린다면, 부하가 걸리게끔 설계하는 것도 필요하다고 생각합니다.

celinaym commented 2 years ago

token으로 부하가 걸릴 수도 있기 때문에 더 나은 시나리오(테스트)를 위해 Token 이용해서 로그인 하는 것으로 변경하겠습니다.