검색 성능 최적화 - 테스트 환경 및 시나리오

jhkim31·2024년 8월 7일
0

검색 성능 최적화

목록 보기
1/4
post-thumbnail

프로젝트의 성능 테스트를 진행하며 검색 성능을 최적화한 기록을 정리한 글이다.

이 글에선 테스트에 사용된 인프라와 테스트 환경, 시나리오 등에 대해 설명한다.

테스트 인프라 구축

성능 테스트를 하기 위한 인프라 구축 과정은 다음 시리즈에 정리되어 있다.

https://velog.io/@jhkim31/series/테스트-인프라-구축

환경

위의 시리즈에도 나와있지만 하나의 호스트에 KVM 으로 여러개의 VM을 띄우고 docker-swarm을 구성했다.

우선 호스트와 각 VM에 대한 성능이다.

HOST

  • CPU : i5-10400 (6Core, 12Threads)
  • RAM : 32GB
  • DISK : 1.5TB (500GB M.2, 1TB M.2)

VM (모두 동일)

  • Master : 1개 (docker swarm master)
  • Worker : 3개 (docker swarm worker)
    • App Worker (Java Application 수행 노드) : 2개
    • DB Worker (MySQL, Redis 실행 노드) : 1개
  • CPU : 2
  • RAM : 4GB
  • DISK : 50GB
  • NETWORK : Docker Network

그리고 이 모든 모니터링은 Grafana 에서 이루어진다.

docker 환경

다음은 서버 인스턴스 현황이다.

  • MySQL : 1개 (8.0.23, master)
  • Redis : 1개 (7.2.5, master)
  • JVM : 1개 (jshop-0.0.7-beta)

테스트 도구

  • nGrinder/controller : 1개 (3.5.9-p1)
  • nGrinder/agent : 3개 (3.5.9-p1)

테스트 데이터

  • user : 100만명
  • 상품 : 57만개
    • 상품은 여러개의 상세 상품을 가지고 있다.
    • ex) 아이폰 15, 아반떼 CN7
  • 상세 상품 : 470만개
    • 상세 상품은 실제 상품을 의미한다.
    • ex) 아이폰 15, 빨간색, 128GB, 100만원, 아반떼 CN7, 화이트, 인스퍼레이션

ERD

Data Example

성능 테스트

시나리오

  • 단일 키워드 검색 성능 테스트
  • 가상 사용자는 검색 API로 상품 생성에 사용된 랜덤한 키워드를 날린다.
  • 최대 가상 사용자는 10명, 5분마다 가상 사용자를 늘린다.
  • 1시간동안 테스트 진행

목표치

  • 평균 응답시간 : 1000ms
  • 처리량 : 10 RPS
  • 에러율 : 0.05

테스트 결과

1시간동안 진행되어야할 테스트가 타임아웃으로 인해 조기 종료 되었다.
조회 성능은

  • 응답시간 : 3600ms
  • 처리량 : 0.4 RPS
  • 에러율 : 0.19

정도가 나온것을 확인할 수 있다.

결과

테스트 결과 생각보다 너무 낮은 성능이 나왔다.

다음 글부터 이 원인을 분석해보고 해결책을 찾아 적용해 원하는 목표치까지 달성하는 과정을 기록해보려 한다.

profile
김재현입니다.

0개의 댓글