개발자

Jmeter 동시성 테스트 관련 질문입니다.

2024년 02월 29일조회 190

컴퓨터 1대로 Jmeter와 로컬 환경에서 서버를 띄우고 주문 -> 결제 -> 재고량 감소 API 테스트를 하려고 하는데 궁금한 점이 있어 질문드립니다. (간단한 사이드 프로젝트 수준 입니다.) 기술 스택 : Java, Spring Boot, JPA, MySQL, OpenFeign 사용자 10000명이 동시에 주문 또는 결제하는 테스트 시나리오에 대한 결과를 보고 싶은데 컴퓨터 성능의 이슈로 Dead-Lock이 발생합니다. 쓰레드 수를 늘려가며 에러율을 모니터링 한 결과 최대 500개까지는 Dead-Lock이 발생하지 않습니다. 동시에 10000개의 쓰레드를 감당하려면 어떤 부분을 고려해야 할까요? 스펙상 불가능하다면 10000명의 동시성 테스트를 대체하기 위해 어떻게 테스트 시나리오를 다시 짜야될까요? Jmeter의 Number Of Threads, Ramp - up period, loop - count를 어떻게 조정해야 할까요? 도와주시면 감사하겠습니다 ㅜ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

포크코딩님의 프로필 사진

하드웨어 스펙이 얼마나 딸리는지 모르겠으나... 하드웨어 스펙이 딸린다면 Jmeter로 부하테스트 하는게 최선은 아니라고 생각이 듭니다. 테스트 내용이 복잡하지 않으니 go같은걸로 직접 만드셔서 해봐도 원하는 결과를 확인할 수 있지 않을까 싶네요.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 02월 29일

10000명의 동시성 테스트를 수행하기 위해 자원이 충분하지 않다면, 먼저 하드웨어 업그레이드를 고려해볼 수 있습니다. 즉, 더 강력한 CPU와 더 많은 메모리를 갖춘 서버를 가져보는 것입니다. 하지만, 이것이 실제 필요한 해결책인지 여부를 판단하기 위해서는 다음 고려사항들을 참고해야 합니다: 1. 애플리케이션 코드 최적화: 주문 -> 결제 -> 재고량 감소 API에서 나타나는 deadlock은 일반적으로 데이터베이스의 동시 요청 문제일 가능성이 큽니다. JPA가 사용하는 MySQL의 lock 전략을 확인하고 필요한 경우 최적화해야합니다. 2. Load testing strategy: 당신은 10000개의 사용자가 동시에 요청을 보낸다면 어떻게 될지 알아보고 싶다고 했습니다. 그러나 현실에서 모든 사용자가 정확히 같은 시간에 요청을 보내는 시나리오는 거의 없습니다. JMeter 설정에서 "Ramp-up period"를 조정하여 사용자들이 시간에 따라 점진적으로 서버에 요청을 보내도록 설정할 수 있습니다. 3. Thread count와 ramp up time: JMeter에서 thread count는 동시에 실행될 사용자 수를 나타냅니다. Ramp-up period는 이러한 사용자가 얼마나 빨리 서버에 접속하게 될지를 결정합니다. 10000개의 쓰레드를 모두 한 번에 시작하는 대신, ramp-up 기간을 설정하여 일정 시간 동안 점차적으로 사용자 수를 늘릴 수 있습니다. 4. Database 최적화: MySQL 데이터베이스 자체도 성능 향상을 위해 최적화할 수 있습니다. 인덱싱, 쿼리 튜닝, 하드웨어 최적화 등 여러 가지 방법이 있습니다. 5. 분산 테스트: 단일 시스템에서 부하 테스트를 실행하는 대신 여러 시스템에서 JMeter 클라이언트를 분산시켜 실행할 수도 있습니다. 이렇게 하면 각각의 시스템에서 생성되는 부하가 합산되어 전체 로드가 됩니다. 따라서 원래 질문의 답은, 데이터베이스 최적화, 애플리케이션 코드 리팩토링, 적절한 Load Testing 전략 개발 및 필요한 경우 하드웨어 업그레이드를 고려해야한다는 것입니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!