API 다중 호출 이슈 처리2 - JMeter 테스트

김동영·2022년 12월 19일
0

업무일지

목록 보기
3/3

1. 목적

2. 테스트 절차

1. Thread Group 설정

  • 동시에 실행할 쓰레드(가상 요청 유저 수) 를 설정한다.
    Thread Group 설정

2. HTTP Request 설정

  • 테스트 대상 API Url 및 파라미터 설정 추가
    HTTP Request 설정
  • 각 쓰레드 별로 쿠키를 유지하여 쓰레드 별 동일 세션(동일 사용자) 요청으로 설정한다.
    HTTP Cookie Manage 추가
    쿠키 초기화 설정 해제 확인

3. 테스트 및 결과 확인

1. 테스트 환경

  1. 서버스펙

    • 로컬 노트북으로 임시진행
      LG 울트라북 16GB / i7-1165G7 @2.80GHz
  2. API 다중호출 처리용 쓰레드풀 갯수

    • 스프링부트 기본설정인 Embedded Tomcat 기준 200개
      org.springframework.boot.autoconfigure.web.ServerProperties 872L
      /**
       * Tomcat thread properties.
       */
      public static class Threads {
      	/**
           * Maximum amount of worker threads.
         	 */
           private int max = 200;
          /**
           * Minimum amount of worker threads
         	 */
           private int minSpare = 10;
          
           public int getMax() {
           	return this.max;
           }
           public void setMax(int max) {
           	this.max = max;
           }
           public int getMinSpare() {
           	return this.minSpare;
           }
           public void setMinSpare(int minSpare) {
           	this.minSpare = minSpare;
           }
      }

2. 테스트 쓰레드 산정기준

실제 하나의 API를 한 사용자가 엄청나게 호출하지 않는다.

  • 여러 사용자가 하나의 API에 대해 수 차례 시도하는 것이 일반적
  • 그에 맞춰 총 쓰레드 갯수를 늘리고 쓰레드 당 호출횟수는 적당히 조절한다.

3. 테스트 결과

디바운싱 처리는 인터셉터 PreHandle 단계에서 진행되기 때문에 실제 핸들러 로직 이전에 처리된다.
따라서 처리시간 계산 시, DB 커넥션 설정 등 로직 수행속도는 고려하지 않는다.

1. 쓰레드 5개, 쓰레드 당 30회/1초

  • API 호출속도 초당 총 150회 => 서버기준 7ms/1회 호출

  • 호출 결과

    디바운스 데이터 설정시간디바운스 처리시간
    만료된 세션 기준평균 0.25msN/A
    유효한 세션 기준평균 0.007ms평균 0.02ms
      최초 호출 시 세션 유효성 검증 및 세션에 디바운스 데이터를 설정하는 시간이 
      가장 오래 걸리기 때문에 최대 소요 시간인 최초 호출을 기준으로 측정함.
      
      만료된 세션은 Attribute 를 설정할 수 없기 때문에 디바운스 처리는 불가능
  • 개별 쓰레드 - 최초호출 성공
    호출성공 JMeter

  • 개별 쓰레드 - 이후 호출 디바운스 성공
    디바운스 JMeter
    디바운스 로그

  • 멀티 쓰레드 - 최초 호출, 디바운스 성공
    5개 쓰레드 기준 디바운스 성공

2. 쓰레드 25개, 쓰레드당 30회/1초

  • API 호출속도 초당 총 750회 => 서버기준 1.3ms/1회 호출

  • 호출 결과

    디바운스 데이터 설정시간디바운스 처리시간
    만료된 세션 기준평균 0.15ms(0.006 ~ 1.4ms)N/A
    유효한 세션 기준평균 0.003ms(0.002 ~ 0.005ms)최초호출 직후 평균 0.2ms(0.002 ~ 120ms)
    유효한 세션 기준 평균 0.004ms(0.002 ~ 0.25ms)
    최초 호출 시 세션 유효성 검증 및 세션에 디바운스 데이터를 설정하는 시간이 
    가장 오래 걸리기 때문에 최대 소요 시간인 최초 호출을 기준으로 측정함.
    
    만료된 세션은 Attribute 를 설정할 수 없기 때문에 디바운스 처리는 불가능
    디바운싱 처리는 세션 별 최종호출시간 Map을 저장하는 부분에서 시간차이가 발생한다.
    session.SetAttribute(호출시간key, 호출시간 저장된 Map)
  • 개별 쓰레드 - 최초호출 성공
    25쓰레드 성공 JMeter

  • 개별 쓰레드 - 디바운스 성공
    25쓰레드 성공 디바운스
    25쓰레드 디바운스 서버로그

  • 멀티 쓰레드 - 최초 호출, 디바운스 성공
    25쓰레드 최초호출,디바운스

99. 참고

1. Git Project 이슈

profile
프레임워크와 함께하는 백엔드 개발자입니다.

0개의 댓글