부하 용량 변경 및 인스턴스 유형 변경 후 부하 테스트 진행 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
1. 테스트 세팅 변경 사항
- 인스턴스 유형 변경
- 부하량 감소 (서비스 규모에 맞춰)
a. VM 인프라 구성
역할 | 인스턴스 스펙 | 설명 |
---|---|---|
FastAPI 서버 | n2d-standard-4 (vCPU 4개, 메모리 16GB) |
GCS에서 이미지 30~50개 다운로드 처리 |
K6 서버 | e2-medium (vCPU 2개, 메모리 4GB) |
테스트 트래픽 생성기 |
b. FastAPI 서버 코드 요약
@app.get("/images")
def get_images(file_names: List[str] = Query(...)):
for file_name in file_names:
blob = bucket.blob(f"test-images/{file_name}")
_ = blob.download_as_bytes() # GCS에서 이미지 다운로드
return JSONResponse(status_code=200, content={"message": f"이미지 {len(file_names)}장 로딩 완료"})
- 요청당 30~50장의 이미지 다운로드
- 실패 시 즉시 500 응답 반환
c. K6 부하 테스트 스크립트
export const options = {
vus: 30, // 동시 가상 유저 수
duration: '10m', // 테스트 시간
};
function getRandomImageList() {
const total = Math.floor(Math.random() * 21) + 30; // 30~50개
...
}
export default function () {
const query = getRandomImageList();
const res = http.get(`${BASE_URL}/images?${query}`);
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(Math.random() * 2 + 3);
}
2. 테스트 결과 요약
-
평균 응답 시간(P95): 약
3.3초
-
요청 성공률:
100%
지표 수치 P95 응답 시간 약 3.3초 실패율 0%
3. 회고
- 이미지를 한 장씩 다운로드하기 때문에 순차 진행으로 인한 지연 시간이 길다. → 병렬 다운로드로 속도 개선하자
- 버킷과 연결하는 세션 객체를 매 연결마다 생성하고 있어 지연이 발생한다(인증 및 연결 과정) → 클라이언트 세션 객체를 통해 GCS 버킷 객체를 서버에서 미래 만들어두고 재사용하는 방식으로 속도 개선하자