부하테스트 ‐ (8) 게시글 댓글 목록 페이지 조회 부하테스트 - ttasjwi/board-system GitHub Wiki
부하테스트 계획
- 게시글 댓글 목록 조회 (페이지) 기능에 대해 부하테스트를 수행해본다.
- 병목지점을 확인하고 조회 성능을 개선한다.
계획
- 기존 테스트 데이터 셋팅을 보면
- 2400만번 게시글에는 댓글이 거의 1200만개( < 사실 비현실적이긴 하다. 어떻게 한 게시글에 댓글이 1200만개 달리나...?)
- 나머지 게시글에는 0-2개 정도 댓글이 달려 있다.
- 조회 테스트는 다음과 같이 할 예정이다.
- 대부분의 사용자는 2400만번 게시글의 댓글을 조회하도록 한다. (1-20 페이지 사이를 조회)
- 나머지 사용자들은 1-2399만 게시글의 1페이지 댓글을 조회하도록 한다.
부하테스트 파일 작성, 실행
vim script.js
import http from 'k6/http';
import {sleep} from 'k6';
export const options = {
// 부하를 생성하는 단계(stages)를 설정
stages: [
// 10분에 걸쳐 vus(virtual users, 가상 유저수)가 50에 도달하도록 설정
{duration: '10m', target: 50}
],
};
function pickArticleId() {
const random = Math.random()
if (random < 0.5) {
return 24000000;
}
// 1 ~ 23999999
return Math.floor(Math.random() * 23999998) + 1;
}
function pickRandomPageOfArticle24000000() {
const rand = Math.random();
if (rand < 0.95) {
return 1; // 95%
} else if (rand < 0.98) {
return 2; // 다음 3%
} else {
// 마지막 2% → 3~20 랜덤
return Math.floor(Math.random() * 18) + 3; // 3 ~ 20
}
}
export default function () {
// API 주소로 GET 요청
const articleId = pickArticleId()
const page = (articleId === 24000000) ? pickRandomPageOfArticle24000000() : 1
http.get(`http://13.125.89.114/api/v1/article-comments?articleId=${articleId}&page=${page}&pageSize=50`);
sleep(1);
}
K6_WEB_DASHBOARD=true k6 run script.js
실행 결과

- VUs 를 점진적으로 증가시켜봤지만, 초반부터 TPS 가 매우 들쑥날쑥하다.
- TPS 는 전체적으로 1-1.5 정도를 유지했다.
- 일부 요청은 타임아웃이 발생했다.
- latency 는 1분까지 치솟은 적이 있다.

- EC2 CPU 사용률은 크게 안 늘었지만(앞의 46% 까지 치솟은 부분은 배포 당시의 부하로 추정), RDS CPU 사용률이 크게 치솟았다.
- RDS가 병목지점인 것으로 의심해볼 수 있다.
실제 API 호출해보기

- 게시글Id = 2400만 인 게시글의 댓글 1페이지 (pageSize =50) 을 조회해보니 TimeOut 이 발생했다.
- 한 API 처리가 1분이 넘도록 안 되고 있는 것을 보아 심각도가 크다.