카카오페이 성능 테스트 존을 소개합니다.

카카오페이 성능 테스트 존을 소개합니다.

요약: 이 글은 성능 테스트 존 도입 사례와 주요 기능을 다룹니다. 홈화면, 관리콘솔, 모니터링 대시보드 등을 이용하여 테스트 상태를 실시간으로 확인하고, 성능 병목을 효율적으로 파악할 수 있습니다. 이 과정에서 개발 및 운영 환경에서의 성능 최적화 가능성을 탐구하며, 성능 테스트의 중요성을 강조합니다.

💡 리뷰어 한줄평

marriott.jw 카카오페이에서 개발한 k8s 서비스에 대해 성능 테스트를 어떻게 하고 있는지 잘 설명한 글입니다. 서비스 안정성을 고려하는 엔지니어라면 꼭 한번 읽어보면 좋겠습니다.

bri.ghten 카카오페이에서 어떻게 개발자 친화적으로 쉽게 성능 테스트를 할 수 있게 시스템을 구축했는지에 대한 글입니다. 성능 테스트 시스템 구축을 고민하고 있는 엔지니어 분들께 참고할 만한 하나의 인사이트가 될 것입니다.

시작하며

안녕하세요, 카카오페이 SRE팀 RE파트 에드워드입니다.
오늘은 카카오페이에서 성능 테스트 환경을 구축하고 제공한 경험을 공유하려고 합니다. 구체적인 경험을 공유하기에 앞서 어떠한 배경과 목표로 성능 테스트 환경을 만들게 됐는지 말씀드리겠습니다. 이 글은 성능 테스트 환경 개선 및 효율적인 모니터링 도구에 관심 있는 엔지니어를 대상으로 합니다.

카카오페이는 대규모 트래픽이 예상되는 이벤트 전이나, 기존 서비스 아키텍처의 변경이 있을 때에는 필수적으로 중요 서비스의 성능 검증을 진행하고 있습니다. 그러나 성능 테스트를 하기 위한 준비 과정이 길고, 개발자들에게 불편함으로 다가와서 이를 개선할 필요가 있었습니다. 이런 불편을 겪는 개발자들에게 보다 쉽게 성능 테스트를 수행할 수 있고, 운영 서비스에 영향을 주지 않을 수 있는 성능 테스트 환경 (이하 성능 테스트 존)을 구축하여 제공하게 되었습니다.

개발자 인터뷰

프로젝트를 시작하기 앞서, 개발자들과 인터뷰를 통해 현재 상황과 필요한 기능을 파악했습니다. 다음은 인터뷰 내용입니다.

  • 🙍‍♂️ 개발자 A: 성능 테스트를 하기 위해 유관부서 협조하에 장비 발급부터 환경 세팅 등 준비 과정들이 있는데요. 길면 한 달까지도 소요되어 성능 테스트 준비하는 데 많은 시간이 소요되어 준비기간을 줄일 수 있으면 좋겠어요.
  • 🙋‍♀️ 개발자 B: 저희 부서는 성능 테스트를 진행하고 그 결과를 위키페이지에 정리하곤 하는데요. 언제든지 과거에 진행했던 성능 테스트에 대한 이력을 확인할 수 있으면 좋겠어요.

이러한 개발자들의 의견을 바탕으로, 아래와 같이 성능 테스트 존 프로젝트의 방향성을 결정했습니다.

  • 환경 준비: 유관부서 협조 없이 개발자들이 직접 필요한 성능 테스트 환경을 꾸릴 수 있도록 한다.
  • 개발 환경: 장애 발생 예방 차원에서, 성능 테스트 환경을 운영환경이 아닌 개발환경에 구성한다.
  • 테스트 이력: 과거에 수행한 성능 테스트 이력 조회 및 비교를 위해, 테스트 이력을 관리/보관한다.
  • 테스트 도구: nGrinder, K6 등 다양한 성능 테스트 도구를 지원한다.

성능 테스트 존 소개

성능 테스트 존은 말 그대로 성능 테스트를 하기 위한 전용 환경을 말하며, 더 나아가서 개발자들이 유관부서 협조 없이 간단한 설정만으로 쉽고 빠르게 준비할 수 있도록 제공하는 서비스입니다. 성능 테스트 존 환경은 k8s를 기반으로 구축했습니다. 그 이유는 대부분의 서비스가 k8s 환경에서 동작하고, 서비스의 리소스 조정과 scale in/out이 쉽게 가능하여 성능 테스트 결과의 질을 향상하는 데 도움이 되기 때문입니다.

아키텍처

성능 테스트 존은 크게 2개의 기능을 제공합니다.

  1. 성능 테스트 용도의 서비스 및 컴포넌트 배포
  2. 성능 테스트 도구 지원

먼저 서비스 및 컴포넌트 배포에 대해 설명드리겠습니다.

성능 테스트 존은 일전에 소개드린 Testcraft라는 웹 서비스를 통해서 연결된 성능 테스트를 위한 k8s 클러스터 환경에 서비스와 컴포넌트들을 배포할 수 있도록 제공합니다.

서비스의 경우 사전에 빌드되어 사내 컨테이너 레지스트리에 올려진 이미지를 불러와서 배포하는 구조이며, cpu, memory, replicas, java_option 등 설정값을 자유롭게 변경하여 배포할 수 있습니다. 설정값을 다르게 설정한 뒤 이름만 다르게 하여 동일한 서비스를 여러 개 배포할 수 있기 때문에, 설정에 따른 서비스의 성능을 확인하고자 할 때 유용합니다.

컴포넌트는 크게 DB (MySQL, Mongo), Redis, Kafka 3개를 제공하며, standalone 형태의 pod로 제공합니다. Pod로 제공하기 때문에 빠르게 구성이 가능하며, memory/cpu 리소스 조절이 자유로워 부하 테스트를 할 때 유용합니다. 추가적으로 DB의 경우 Target DB 서버의 정보를 입력받아 DB 데이터를 복사해 오는 기능을 제공하고, 모든 컴포넌트는 재사용을 위한 데이터 초기화 기능을 제공합니다.

이렇게 배포된 서비스들은 개발 환경에 존재하기 때문에, 같은 환경에 존재하는 기존 서비스들과 통신도 가능하며 필요시 사내 공용 목서버를 이용하여 외부 서비스를 목킹하여 대체하여 테스트할 수 있습니다.

또한, 서비스와 컴포넌트는 그라파나 대시보드에서 프로메테우스로 수집한 메트릭을 확인할 수 있습니다.


그다음으로 성능 테스트 도구 지원을 설명드리겠습니다.

카카오페이는 그동안 nGrinder라는 성능 테스트 도구를 이용해 왔습니다. 그러나, nGrinder에서 지원하는 언어(ex. Groovy)는 개발자에게 친숙한 언어가 아니기에, 성능 테스트를 하는 데 일종의 허들로 작용했습니다. 이에 따라, 개발자 친숙한 언어인 javascript 언어로 테스트 스크립트를 작성하여 테스트할 수 있는 k6라는 성능 테스트 도구를 제공하기로 했습니다.

k6: 그라파나 진영에서 개발하고 있는 오픈 소스 load testing tool이며, 개발자 중심으로 성능 테스트를 쉽고 생산적으로 할 수 있게 합니다.

마찬가지로 Testcraft 서비스를 통해 테스트 스크립트와 테스트 케이스를 작성할 수 있도록 제공합니다. 작성한 테스트를 수행하게 되면, 테스트 지표를 influxdb로 수집하여 그라파나 대시보드를 통해서 테스트 지표들을 확인할 수 있습니다.


지금까지 설명드린 전체 아키텍처에 대한 그림입니다.

기능소개

1. 홈 화면

홈 화면에서는 부서별 테스트를 위한 프로젝트 생성 기능을 제공합니다. 테스트 목적에 따라 프로젝트를 여러 개 만들어서 관리할 수 있습니다.

2. 관리콘솔

해당 페이지에서는 서비스와 컴포넌트 배포를 하는 기능을 제공합니다. 배포된 서비스와 컴포넌트 상태에 대해서도 간략하게 확인할 수 있습니다. 모든 컴포넌트는 데이터 초기화가 가능하며, 추가적으로 DB의 경우 데이터 복사 기능 및 DB 설정 값 변경, Kafka의 경우 topic 생성 기능을 제공합니다.

해당 페이지에서는 k6 스크립트 작성과 테스트 케이스를 작성하는 기능을 제공하며, 수행한 테스트에 대한 이력도 웹 페이지에서 확인할 수 있습니다.

3. 모니터링 대시보드

모니터링 대시보드는 프로메테우스와 그라파나를 활용하여 실시간 데이터를 시각화합니다. 덕분에 테스트 중 성능 병목 현상이나 이상점을 즉시 파악할 수 있어, 테스트 결과 분석 시간을 효과적으로 단축할 수 있습니다.

사용 후기

  • 🙆‍♀️ 개발자 A: 빼빼로데이에 앞서서, 샌드박스 환경에서 서비스의 최대 허용 트래픽에 대해서 확인할 수 있는 근거를 마련할 수 있어서 좋았습니다.
  • 🙍‍♂️ 개발자 B: 샌드박스 k8s 환경에서 별도의 DB를 POD 형태로 배포 및 복제하여, 기존에 사용하던 DB에 영향 없이 테스트할 수 있어서 좋았습니다.
  • 💁 개발자 C: javascript 기반인 K6를 이용하여 성능 테스트 스크립트를 작성하니 보다 쉽게 테스트를 할 수 있어서 좋았습니다.

한계

성능 테스트 존이 많은 이점을 제공하고 있지만, 한계점도 존재합니다.

  • 인프라 구성 차이

    • 현재 구성된 성능 테스트 존은 GCP를 이용하고 있는 개발환경이기에, IDC를 이용하고 있는 운영환경과의 차이가 존재합니다. 또한 개발환경은 단일 클러스터인 반면, 운영환경은 멀티 클러스터 구성인 점도 차이가 있습니다.
    • 다만, 개발 환경에서 코드 수정이나 설정 값 변경을 통해 성능 개선을 충분히 확인한다면, 운영 환경에서도 동일한 효과를 얻을 수 있습니다. 따라서 개발 환경에서의 성능 테스트도 충분히 유의미하다고 판단했습니다.
    • 현재 인프라 구성 차이를 줄이기 위해 개선 방향을 논의 중입니다.
  • FE 서비스 테스트

    • 현재 지원하는 성능 테스트는 백엔드 API 테스트만 가능하게 되어있습니다.
    • 다만, k6에는 k6 browser라는 FE 친화적인 테스팅 기능이 있는데, 해당 기능을 활용하는 것을 내부적으로 검토하고 있습니다.

마치며

먼저, 긴 글을 끝까지 읽어주셔서 감사합니다.
이번 글에서는 성능 테스트 존을 도입하게 된 배경과 기능, 사용 후기 그리고 한계점을 소개했습니다. 성능 테스트 존은 성능 테스트를 위한 환경 준비의 어려움을 해결하기 위해 시작되었으며, 현재는 서비스의 안정성을 확보하는 데 중요한 역할을 하고 있습니다. 해당 플랫폼을 운영하면서 지속적으로 개선 및 발전시켜 나가고 있습니다. 이 글이 사내 성능 테스트 환경 구축에 대해 고민하고 있는 분들에게 도움이 되었기를 바라겠습니다!

참고 자료

edward.lim
edward.lim

카카오페이 SRE팀 RE파트 에드워드입니다. 두루두루 잘 아는 전문 엔지니어가 되기 위해서 끊임없이 노력합니다.