이것저것

[우아콘2021] 서버 성능테스트, 클릭 한 번으로 끝내볼 수 있을까? 내용정리

jwKim96 2021. 11. 17. 17:18

서버 성능테스트, 클릭 한 번으로 끝내볼 수 있을까?

feat. 김덕수님(배민서비스개발팀)

세션이 도움이될 사람

  • 현재 운영중이 서비스에 트래픽이 많고, 서버 성능테스트를 자주 하는 사람
  • 운영중인 서비스에 점점 트래픽이 늘어나는 사람
  • 대규모 트래픽을 안정적으로 처리하기 위해, 서비스 배포 전에 어떤 일을 해야 하는지 알고 싶은 사람

발표에서 전제하는점

1.서버환경
서버환경은 온프레미스가 아니라, 클라우드환경인 것을 전제 함
2.모니터링 환경
웹 콘솔을 통해서, 모니터링이 가능한 환경인 것을 전제로 함

서버 성능테스트 세션 내용

서버 성능테스트란, API 요청이 많은 상황에서 서버가 어떻게 동작하는지 확인하기 위해 수행하는 테스트

서버 성능 테스트를 하는 이유?

  • 서버가 얼마나 요청을 잘 처리하는지 측정하기 위해
  • 요청을 잘 처리하지 못할 때, 어떤 지점이 병목이 되는지 확인하기 위해

서버 성능테스트, 보통 언제 할까?

  • 트래픽 인입이 많을 것으로 예상되는 새로운 서비스를 오픈하는 경우
  • 기존 서비스에 병목의 가능성이 있는 변경사항이 생기는 경우
  • 평소보다 트래픽을 훨씬 많이 받아야 하는 경우

서버 성능테스트를 하려고 보니...

가상의 클라이언트를 생성하여, 부하를 일으키는 부분은 이미 자동화가 많이 되어있음.

그럼에도 성능 테스트를 하려고 하면, 고된 부분이 존재한다.

무엇이 고될까?

  • API서버 스케일아웃
  • DB변경시 시간이 많이 걸리는 경우가 많음
  • 테스트시마다, 지표를 관측하고 기록하는 일


어떻게 해결할까?

  • 성능테스트 과정 도식화
    • 성능테스트 시나리오 구상
    • 테스트 환경 구축
    • 성능테스트 생성 및 수행
    • 테스트 결과 지표 관층 및 기록
    • 테스트 결과 분석

성능테스트 시나리오 구상

  • (input) 시스템의 어느 부분어떻게 부하를 줄 것인지 결정
  • (output) 부하 상황에서 시스템의 동작 예측
  • 필요한 데이터 준비

테스트 환경 구축

  • 서버 수, 서버 스펙 결정
  • scale up & scale out

성능테스트 생성 및 수행

  • 구축한 성능테스트 시나리오에 따라 실제 부하 발생시킴

테스트 결과 지표 관측 및 기록

  • 부하 상황에서 모니터링 보드 지표 관측 및 기록

테스트 결과 분석

  • 요청을 잘 처리하는지 확인
  • 시스템이 기대한 대로 동작하였는지 확인

여기서 우리가 자동화 해야하는(할 수 있는) 부분은 반복적인 작업 부분이다.

즉, 테스트 환경 구축, 성능테스트 생성 및 수행, 테스트 결과 지표 관측 및 기록 단계를 자동화 할 수 있다.

반복적인 작업을 자동화 했기 때문에, 개발자는 성능테스트 시나리오 구상테스트 결과 분석에 더 집중할 수 있게 된다.

어떤 기술을 사용할까?

Naver에서 개발한 성능 테스트 도구인 NgrinderJenkins, AWS를 사용하였다.

Ngrinder는 REST API를 지원하기 때문에, 자동으로 테스트를 생성 및 수행할 수 있다.

Jenkins는 Groovy script 기반으로 설정하여 pipline을 구축할 수 있다.

AWS-CLI는 sdk를 통해 cli로 AWS 인프라 구성 작업이 가능하다.

먼저 AWS-CLI를 통해, API서버 인스턴스나 Replica DB를 scale-up 또는 scale-out 한다.

그 다음, Ngrinder REST API를 통해 테스트를 생성 및 수행한다.

테스트 중에는 Ngrinder의 성능테스트를 수행 시간을 Jenkins가 측정한다.

테스트가 끝나면, Jenkins는 테스트 결과를 Slack으로 알림을 보낸다.

그리고 마지막으로 AWS-CLI로 테스트에 사용한 모든 자원들을 정리한다.

어떻게 구현할까?

테스트 수행에 관련된 부분을 기능단위로 쪼개서, 각각을 Jenkins Job으로 만들어서 조합하여 사용하였다.

그리고 Groovy script로 설정 및 파이프라인을 구축하였다.


아직 팀에서도 사용한지 3~4개월정도 밖에 안된 방식이라고 하지만, 이번 발표를 보며 배운것이 많았다.

개발자라면 역시 귀찮은건 자동화 라는것을 우아하게 보여주신 김덕수 님께 박수를 보냅니다.