본문 바로가기
우아한테크코스 4기/레벨4

부하테스트 (0) - 고가용성과 부하테스트

by 나는후니 2022. 9. 8.
부하테스트(1) - 부하테스트의 종류와 목적
부하테스트(2) - 부하테스트 적용하기
부하테스트(3) - WAS, Connection Pool 설정하기

부하 테스트를 왜 해야하는가?에 대한 의문은 고가용성의 서비스를 만들기 위한 노력이 없다면 갖기 힘든 의문이라고 생각합니다. 따라서 부하테스트 시리즈의 첫 글을 고가용성과 부하테스트로 시작해보려 합니다.

 

물론 저 또한 큰 서비스를 운영해본 경험이 없기 때문에 글에 일부 오점들이 드러나겠지만, 부하테스트를 학습하는 과정에서 갖게 된 제 생각과 운영 중인 작은 서비스에 적용한 경험을 솔직하게 기록한다고 생각하며 이 시리즈를 시작합니다.

1. 고가용성

최근 채용 공고를 둘러 보면 흔히 고가용성이라는 단어를 들어볼 수 있습니다.

네XX와 토X의 채용 공고 일부

쉽게 볼 수 있는 단어이지만 서비스를 실제로 운영해본 경험이 없는 입장에서는 이 단어가 크게 와닿지 않을텐데요. 부하테스트에 대한 글을 적기 전 고가용성이라는 단어를 먼저 꺼낸 이유가 바로 이 때문입니다.

 

가용성의 사전적 정의는 시스템이 서비스를 정상적으로 제공할 수 있는 상태를 뜻합니다. 자연스럽게 고가용성의 정의는 거의 항상 서비스를 정상적으로 제공할 수 있는 상태를 뜻한다고 봐도 좋을 것 같네요. 서비스 운영에서 고가용성의 중요성이 계속해서 강조되다 보니 높은 가용성을 가진 다양한 시스템 설계 방법이 많은 글, 영상에서 소개되고 있습니다. 그 중 두 가지 대표적인 방법에 대해 경험을 기반으로 간단하게 소개하겠습니다.

스케일 아웃

시스템 확장 방법으로, 하나의 서버에서 운영하던 서비스를 여러 대의 서버로 확장하는 것을 뜻합니다. 단일 장애점을 제거하여 하나의 서버가 운영이 중단 되어도 다른 서버에서 리소스를 처리할 수 있어 안정성이 높습니다. 높은 안정성을 유지하기 위해 여러 가용영역에 서버를 두는 것이 중요한 것 같고 서버가 확장되며 생기는 어려운 점(세션, 로깅, DB 서버 이중화 등)들을 잘 해결해야 합니다. 또, 간편하게 확장할 수 있는 구조(Auto Scaling, 도커라이징, 쉘 스크립트 작성 등)를 만드는 것이 스케일 아웃의 핵심이라고 느껴졌습니다.

스케일 업

서버의 성능을 높이는 것입니다. 스토리지, CPU 사양, 메모리 등의 성능을 높여 기존 환경에서 해결할 수 없던 하드웨어 적 문제들을 쉽게 해결할 수 있습니다. 서버 환경을 분리하지 않는 점에서 스케일 아웃보다 훨씬 편리했습니다. 하지만 결국 하드웨어에는 한계가 있고 서버 성능을 높이는 과정에서 서버의 안정적인 운영을 보장할 수가 없다는 단점이 있습니다.

이처럼 고가용성의 서비스를 운영 하기 위한 여러 방법이 있는데요 하지만 큰 문제가 있습니다.

이제 막 첫 걸음을 떼는 서비스는 트래픽이 그리 많지 않아 시스템 확장을 해야하는 상황 자체가 오지 않습니다. 실제로 그런 상황이 오지 않으니 내 서버가 어느 시점에 시스템을 확장해야 하는지, 어느 정도의 트래픽을 견디는지 판단하는 것이 어렵습니다. 이러한 어려움 때문에 고가용성 서비스 운영을 위한 대비가 전혀 불가능한 것이죠.

 

이 문제를 해결하기 위해 부하테스트가 존재합니다. 부하테스트는 가용성과 확장성 높은 시스템 구축을 위한 하나의 방법인 것이죠.

2. 부하테스트

부하테스트의 목적은 시스템 처리 능력 (어느 정도의 부하를 견디는지)을 계산하여 가용성을 높이고, 서비스의 장애상황에 대비하는 것입니다.

 

다양한 시나리오의 부하테스트를 통해 WS, WAS, DB 시스템의 응답 성능을 예측해보고 원하는 성능을 만들기 위해 서버를 확장한다거나, 언어 차원의 성능을 개선할 수 있고. 혹은 장애 상황에 빠르게 대처하는 안정적인 인프라 구조를 가질 수 도 있습니다. 부하테스트를 통해 어떤 지점을 더 개선해야하는지 고민하고 실제로 개선하여 안정적인 서비스 운영을 대비할 수 있는 것이죠.

 

이런 Case 들이 있을 것 같습니다.

  1. 초당 Request 개수 를 높이고 싶은 경우. 각 서버의 시스템 사용량 확인, 로그, 모니터링을 통해 어떤 지점에서 병목이 발생하고 어떤 서버의 성능을 높이면 되는지 확인합니다. 그리고 각 시스템의 설정을 조금씩 변경, 개선해보면서 반복적으로 부하테스트를 진행하여 목표 성능에 도달합니다.
  2. 현재 시스템이 견디는 최대 부하 상황에서 서비스를 안정적으로 운영하고 싶은 경우. 최대 부하 지점을 찾아 긴 시간동안 서버에 부하를 주고, 어느 지점에서 문제가 발생하고 서버가 죽는지 확인해보고. 다시 일반적인 상태로 돌아왔을 때, 서버가 자동으로 원상복구되는지 확인해볼 수 있습니다. 이 과정에서 서비스가 중단되지 않고 안정적으로 자동 확장/ 축소가 가능한지 확인할 수도 있겠네요.

어떤 지표를 통해 성능을 개선하는 지에 대해서는 추후에 작성해보도록 하겠습니다.

3. 결론

부하테스트는 여러 시나리오를 통해 각 시스템의 성능을 예측하여 고가용성의 서비스를 운영할 수 있게 도와주는 아주 좋은 도구입니다. 작은 서비스를 운영하더라도 예상치 못한 상황을 대비하기 위해 습관적으로 부하테스트 시나리오를 짜고 어떻게 개선할지 고민하고 적용하는 것이 중요하다고 생각합니다.

 

다음 글에서는 부하테스트의 종류에 대해 소개해보겠습니다. 읽어주셔서 감사합니다.