서버스펙
API 다중호출 처리용 쓰레드풀 갯수
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;
}
}
실제 하나의 API를 한 사용자가 엄청나게 호출하지 않는다.
디바운싱 처리는 인터셉터 PreHandle 단계에서 진행되기 때문에 실제 핸들러 로직 이전에 처리된다.
따라서 처리시간 계산 시, DB 커넥션 설정 등 로직 수행속도는 고려하지 않는다.
API 호출속도 초당 총 150회 => 서버기준 7ms/1회 호출
호출 결과
디바운스 데이터 설정시간 | 디바운스 처리시간 | |
---|---|---|
만료된 세션 기준 | 평균 0.25ms | N/A |
유효한 세션 기준 | 평균 0.007ms | 평균 0.02ms |
최초 호출 시 세션 유효성 검증 및 세션에 디바운스 데이터를 설정하는 시간이
가장 오래 걸리기 때문에 최대 소요 시간인 최초 호출을 기준으로 측정함.
만료된 세션은 Attribute 를 설정할 수 없기 때문에 디바운스 처리는 불가능
개별 쓰레드 - 최초호출 성공
개별 쓰레드 - 이후 호출 디바운스 성공
멀티 쓰레드 - 최초 호출, 디바운스 성공
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)
개별 쓰레드 - 최초호출 성공
개별 쓰레드 - 디바운스 성공
멀티 쓰레드 - 최초 호출, 디바운스 성공