개발자
컴퓨터 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를 어떻게 조정해야 할까요? 도와주시면 감사하겠습니다 ㅜ
커리어리 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 전략 개발 및 필요한 경우 하드웨어 업그레이드를 고려해야한다는 것입니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!