K6 5

해커톤 성능 최적화 -4

Home API만 따로 떼서 테스트해봤습니다\4개 API를 동시에 돌리면 CPU가 버티질 못하니, 일단 가장 무겁다고 판단한 /home API만 단독으로 테스트해보기로 했습니다. 부하는 100명에서 시작해서 최대 600명까지 단계적으로 올렸습니다.결과가 나왔는데, 뭔가 이상했습니다. MED: 21msAVG: 712msP95: 2428ms MED와 AVG 사이의 격차가 너무 컸습니다. 절반의 요청은 21ms 안에 처리되는데, 평균은 712ms, P95는 2428ms입니다. 이건 대부분의 요청은 빠른데 일부 요청만 2~3초씩 걸리고 있다는 뜻입니다.원인은 둘 중 하나라고 판단했습니다. 캐시 TTL이 만료되는 순간 Thundering Herd가 터지거나, 배치가 실행되면서 HikariCP 커넥션을 가져가는 ..

해커톤 성능 최적화 - 1

첫 번째 부하테스트첫 번째 부하테스트는 기존의 헤커톤 프로젝트를 있는 그대로 부하테스트를 진행하였습니다해당 코드는 쿼리 최적화도 진행하지 않았고 DB 접근 기술도 Mybatis입니다사실 DB접근 기술은 성능에 상관은 없는데 언급하는 이유는 Mybatis에서 JPA로 마이그레이션 하면서N+1 문제를 해결하면서 모든 쿼리를 작성했기 때문입니다!! 결과는!! ㅋㅋㅋ 최악입니다!!!!CPU 이용률이 100%를 찍었고 , P90 , P 95 등 몇몇 지표는 측정조차 안 됐습니다.왜냐면 중간에 서버가 터졌기 때문입니다!!오류율도 거의 99.96% 로 오류 없이 통과한 게 0.004 %입니다 ㅋㅋㅋㅋ 성능 최적화 진행..두괄식으로!! 결론부터 말하자면 다음 3가지를 개선하였습니다!HikariCP와 Tomcat Th..

k6 와 그라파나로 성능최적화 도전

기존에 해커톤에서 진행한 프로젝트를 리펙토링을 진행했습니다.코드의 통일성도 높이고 DB 접근 기술도 Mybatis에서 JPA와 Querydsl로 마이그레이션 했습니다.JPA를 사용하면서 생기는 N+1 문제를 해결하면서 마이그레이션을 진행했습니다.이제는 부하테스트를 하고 싶었습니다.부하테스트에서 할 시나리오는 여러 개 만들었고, 그중 즐겨찾기 시나리오를 먼저 진행해 성능 최적화까지 이뤄낸 과정을 정리하겠습니다 즐겨찾기 시나리오 헤커톤에서 마든 메인 기능 중 하나는 즐겨찾기 한 공고와 , 해당 공고에 맞는 서류리스트를 불러오고 , 사용자가 제출한 서류리스트까지 보내는 과정입니다즉홈에 갔다가 → 즐겨 찾기 목록 확인 → 특정 공고를 상세 정보를 확인 ( 이때 제출 서류 목록까지 다 확인할 수 있습니다) 그..

K6 테스트 기본 구조 및 실행

이전에는 K6를 설치까지만 했습니다 이제는 K6의 기본 구조와 간단한 테스트를 해보겠습니다고고띠!! 시작하기 전에k6 스크립트를 작성하려면 다음이 필요합니다.자바스크립트 또는 타입스크립트에 대한 기본적인 지식K6 설치 여부 스크립트를 작성하기 위한 코드 편집기 (Visual Studio Code , JetBrains 편집기 등등..)K6 테스트 기본 구조k6가 테스트를 해석하고 실행하려면 모든 k6 스크립트는 공통 구조를 따라야 합니다.Default Function Imports Options Lifecycle operations Default FunctionK6 테스트 에 있어 핵심인 부분입니다. 이 영역에서는 유저가 실제로 하는 행동을 정의합니다 테스트를 진행하면서 가상 유저(VU)가 이 함수를 계..

K6 설치하기

일단 저는 윈도 환경에서 성능 부하 테스트기인 k6를 설치하겠습니다 k6를 선택한 이유 부하 테스트는 Load, Stress, Spike, Soak 테스트로 구분되며,각각 정상 트래픽, 한계 상황, 급격한 트래픽 증가, 장시간 안정성을 검증하는 목적을 가집니다.이 중 K6를 선택한 이유는 코드 기반으로 테스트 시나리오를 작성할 수 있어재현성과 확장성이 높고, CLI 기반으로 가볍게 실행되어 반복적인 성능 검증에 적합하기 때문입니다.또한 P95 응답시간, 실패율 등의 메트릭을 기본적으로 제공하여성능 개선 효과를 정량적으로 확인할 수 있다는 점에서 선택했습니다. JMeter를 사용해도 되지만 GUI 기반, 무겁고, 복잡해서 비교적 간단한 K6를 선택하였습니다. 설치 방법K6 공식 메뉴얼에 따르면 설치방법은..