kimjinmyeong / the-survey-revision

간편한 포인트 기반 웹 설문조사 서비스
1 stars 0 forks source link

feat: Gatling BaseSimulation, Submit Survey Scenario 추가, HikariCP 값 수정 #11

Closed kimjinmyeong closed 3 months ago

kimjinmyeong commented 3 months ago

이 PR은 다음을 수행하였습니다:

  1. Gatling의 BaseSimulation, Submit Survey Scenario 추가

또한 Simulation에따라 부하 정도를 다르게 하기 위해서 다음과 같은 추상메서드를 구현해야 합니다.

LOAD 테스트: 예상 부하 조건에서 시스템이 어떻게 성능을 발휘하는지 확인합니다.

    @Override
    public void loadTestingSetup() {
        setUp(
                createSurveyScn.injectOpen(atOnceUsers(1)),
                submitSurveyScn.injectOpen(
                        nothingFor(5),
                        atOnceUsers(1000),
                        rampUsers(5000).during(Duration.ofSeconds(300))
                )
        ).protocols(httpProtocol);
    }

STRESS 테스트: 부하를 점진적으로 증가시켜 시스템이 실패할 때까지 시스템의 한계점을 식별합니다.

    @Override
    public void stressTestingSetup() {
        setUp(
                createSurveyScn.injectOpen(atOnceUsers(1)),
                submitSurveyScn.injectOpen(
                        nothingFor(5),
                        rampUsers(10000).during(Duration.ofSeconds(600))
                )
        ).protocols(httpProtocol);
    }

SOAK 테스트: 장시간 동안 일정한 사용자 수를 사용하여 시스템의 안정성을 테스트합니다.

    @Override
    public void soakTestingSetup() {
        setUp(
                createSurveyScn.injectOpen(atOnceUsers(1)),
                submitSurveyScn.injectOpen(
                        nothingFor(5),
                        constantUsersPerSec(50).during(Duration.ofMinutes(30))
                )
        ).protocols(httpProtocol);
    }

hicariCP 파라미터 조정

hikari:
      maximum-pool-size: 50
      minimum-idle: 20
      idle-timeout: 30000
      max-lifetime: 1800000
      connection-timeout: 10000

위와 같이 설정한 이유는 다음과 같습니다.

maximum-pool-size

이전값: 10 변경값: 50 50개의 connection을 유지함으로써 더 많은 동시 요청을 처리할 수 있도록 하였습니다.

minimum-idle

이전값: 기본적으로 maximum-pool-size와 동일하게 설정됨 변경값: 20 20개의 최소 idle connection을 유지하여 요청이 들어오면 바로 사용할 수 있는 connection을 보장합니다. 이는 요청이 들어올 때마다 새로운 connection을 생성할 필요 없이 빠르게 응답할 수 있도록 합니다.

idle-timeout

이전값: 600000 (10분) 변경값: 30000 (30초) 사용되고 반환된 idle connection을 30초 동안만 유지합니다.이는 빠르게 불필요한 리소스를 해제하기 위함입니다.

max-lifetime

이전값: 1800000 (30분)

이는 기본값을 사용했습니다. connection을 30분 동안 유지합니다. 이는 주기적으로 connection을 새로고침하여 오래된 connection을 방지합니다.

connection-timeout

Spring 기본값: 30000 (30초) 변경값: 10000 (10초)

Connection을 10초 동안만 기다리므로, 더 빠르게 실패를 감지하고 대응할 수 있습니다. 이는 대기 시간을 줄이는 더 나은 사용자 경험을 제공합니다.


추가적으로 이전에 삭제했던 PointHistoryId를 다시 추가하였습니다. 그 이유는, PK가 transactionDate일 경우 동시에 transactionDate가 저장되었을 때 Duplicate key 문제가 발생하기 때문입니다.

github-actions[bot] commented 3 months ago

Test Results

47 tests  ±0   38 :white_check_mark: ±0   0s :stopwatch: ±0s 18 suites ±0    0 :zzz: ±0  18 files   ±0    9 :x: ±0 

For more details on these failures, see this check.

Results for commit c246174b. ± Comparison against base commit 32f662df.

:recycle: This comment has been updated with latest results.