IT관련 프로젝트를 진행하다 보면 심심치 않게 성능과 용량에 대한 문제를 다루게 됩니다. 성능과 용량 문제는 매우 복잡하고 알아야 할 것이 많은 부분입니다. 그리고 이런 분야는 수요가 그리 많지 않기 때문에 많은 사람들이 크게 관심을 기울이지 않습니다. 이 부분에 대한 가장 기본적인 수식으로 리틀의 법칙 (Little's law)이라는 것이 있습니다. 계산식은 간단하며 다음과 같습니다. n = x * (z + r) 여기서 각 변수의 의미는 다음과 같습니다. n - 동시 상용자 수, x - 시스템이 처리 가능한 용량, 다른 용어로는 throughput이라고 합니다. r - 단위 처리의 응답 시간, z - 각 단위 처리 사이의 간격 (이른바 씽크타임, think time). 이 법칙에 대한 예를 들어보겠습니다. 간단한 성능 테스트를 진행했을 때의 결과가 다음과 같이 나왔다고 가정해보겠습니다. 동시에 1명이 접속하고 think time은 0이고, 꽤 많은 횟수를 테스트할 때 평균 응답 시간이 2초로 측정되었다면 이를 리틀의 법칙 수식에 넣으면 다음과 같이 될 것입니다. 1 user = x * (0 sec + 2 sec) 이 수식을 풀면 x 값은 0.5 (user/sec)가 됩니다. 즉, 1초에 0.5 사용자의 동시 요청을 처리할 수 있는 용량입니다. 잠깐만요… throughput 즉 x 값이 0.5라면 너무 적은 값이 아닌가요? 그렇습니다. 이 테스트의 결과로는 throughput은 0.5가 맞습니다. 단, 최대 throughput은 아닙니다. 동일한 시스템에 대하여 더 테스트를 진행합니다. 그래서 다음과 같은 측정값들을 얻었습니다. 동시에 5명이 접속하고, think time은 0 (그리고 당연히 꽤 많은 횟수를 테스트하고) 일 때, 평균 응답 시간이 2.3초가 나왔다면, 다음과 같이 수식이 나올 것입니다. 5 user = x * (0 sec + 2.3 sec) 이 식을 계산하면 x는 대략 2.17 users/sec 의 값을 갖습니다.
댓글