Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

시나리오 기반 부하테스트 적용 #4

Open
wants to merge 4 commits into
base: dev
Choose a base branch
from

Conversation

yoonseo-han
Copy link
Collaborator

📋개요

m3u8 동적 요청 및 이후 ts 파일 요청 시나리오에 기반한 부하테스트 진행

🕰️예상 리뷰시간

5분

📢상세내용

  • 기존 HTTP 부하테스트는 여러 워커 쓰레드에서 입장 시간을 다르게 하고 동적 m3u8 요청에 관한 테스트만을 진행
  • 다만 진짜 인이어 플랫폼 트래픽에서는 각 클라이언트에서 m3u8을 수신하고 나서 해당 파일에 적혀진 내용을 기반으로 ts 파일에 관한 요청처리를 진행함
  • 다중 사용자에 관한 동시다발적인 파일 요청처리를 서버에서 잘 진행하는지에 관한 테스트가 필요하기에 시나리오를 더 구체화해서 테스트를 진행 할 수 있도록 수정
  • artillery의 processor 필드에 js 기반의 커스텀 코드를 불러 올 수 있도록 설정
  • 해당 파일에서 m3u8을 받아온 이후로 axios로 각 줄에 관한 ts 파일의 GET 요청을 부를 수 있도록 구현
  • 테스트 결과에 관한 링크 link

💥특이사항

@yoonseo-han yoonseo-han added the 🚀 Refactor 리팩토링 label Jan 16, 2025
@yoonseo-han yoonseo-han self-assigned this Jan 16, 2025
Copy link
Collaborator

@Kontae Kontae left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그냥 .m3u8 안에 있는 .ts파일들만 뽑아서 HTTP 요청을 보내는 것으로 HLS 기능을 대체한거구나 고생했어!!

Comment on lines +54 to +55
"artillery": "^2.0.22",
"artillery-engine-socketio-v3": "^1.2.0",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

서버 폴더의 package.json에도 동일하게 설치가 되었네 두 번 설치한건가?
일단 깃에선 취소해야할 것 같습니다

Comment on lines +22 to +23
afterResponse: 'processM3U8'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 그냥 이렇게 함수를 불러오네 신기하네

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

artillery에서 일반 js 함수를 불러올 수 있다니... 따봉

Comment on lines +2 to +3
target: 'http://localhost:3000'
processor: './processor.js'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

배포 서버에도 살짝만 해보면 좋을 것 같아요

Copy link
Collaborator

@rdyjun rdyjun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

구우우우욷

async function processM3U8(requestSpec, response, context, ee) {
debug('Starting M3U8 processing');
try {
if (!response || !response.body) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional Chaining 을 피드백 하려다 js 파일인 걸 보고 납득!


lines.forEach((line) => {
if (
line.includes('/api/music/') &&
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정규식을 쓰면 더 간단하게 해결될 것 같음!
물론 이 방식이 더 직관적인 것은 맞습니다~

- think: 30
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

think가 sleep 같은 기능을 하는 것으로 알고 있는데, 마지막에 think를 사용한 이유가 궁금합니다~

Comment on lines +22 to +23
afterResponse: 'processM3U8'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

artillery에서 일반 js 함수를 불러올 수 있다니... 따봉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🚀 Refactor 리팩토링
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants