[✨성능 개선 - MoodBuddy✨] 일기 조회 시간 약 95.9% 단축 ♨️

._mung·2025년 3월 14일
0

MoodBuddy

목록 보기
6/8

📌 프로젝트 소개

팀원 : PM(1) / Design(1) / Frontend(2) / Backend(3)
기간 : 2024.03 ~ 2025.03
링크 : https://github.com/M-ung/MoodBuddy_Server
서비스 내용 : 사용자가 작성한 일기를 바탕으로 감정 분석하는 웹 서비스
소통 : GitHub, Slack, Notion, Discord


✨성능 개선✨

Test Environment

일기 조회 기능을 성능 테스트하려고 한다.

📌 무드버디 v1 시스템 구성

  • 애플리케이션: Spring Boot (Docker)
  • 데이터베이스: MySQL (Local)
  • 테스트 툴: K6

📌 무드버디 v2 시스템 구성

  • 애플리케이션: Spring Boot (Docker)
  • 데이터베이스: MySQL (Local)
  • 캐시 시스템: Redis (Docker)
  • 테스트 툴: K6

무드버디 v1은 QueryDSL을 활용해 DB에서 일기들을 조회하는 방식으로 구현했다.
무드버디 v2는 QueryDSL로 DB에서 조회하는 것은 똑같지만 몇 가지 추가를 했다.

1️⃣ Redis 캐싱을 적용했다.
2️⃣ 페이징 조회를 할 때, 쿼리 수를 단축하고자 Count 조회를 하는 걸 첫 페이지에서 하도록 했다.
3️⃣ ResponseDTO에서 불필요한 응답 데이터는 제거했다.


Test Scenario

📌 부하 증가 단계

  • 2분 동안 500명의 사용자가 증가
  • 2분 동안 1000명의 사용자가 증가
  • 2분 동안 1000명 유지 (최대 부하)
  • 2분 동안 500명으로 감소
  • 2분 동안 0명으로 감소
  • 총 10분 테스트 진행

📌 테스트 요청

  • 1000명의 사용자 중 랜덤으로 로그인 시도
  • 응답에서 accessToken을 추출
  • accessToken을 가지고 getDiaries API 요청
  • 총 50개의 일기를 가져오며, 페이지당 20개씩 요청
  • 각 요청 후 1초 동안 sleep

📌 테스트 통과 기준

  • 응답 속도: 95% 이상의 요청(p(95))이 100ms 이하로 처리되야 함.
  • 에러율: 전체 요청 중 1% 미만만 실패

Result Analysis

📍 무드버디 v1 테스트 결과

📍 무드버디 v2 테스트 결과

📍 주요 성능 지표 비교

지표개선 전개선 후개선율
총 요청 수 (http_reqs)366,040474,18829.5% 증가
응답 시간 평균 (http_req_duration avg)238.6ms12.33ms94.8% 감소
응답 시간 90퍼센트 (p(90))577.36ms23.89ms95.9% 감소
응답 시간 95퍼센트 (p(95))734.42ms33.22ms95.5% 감소
대기 시간 평균 (http_req_waiting avg)238.45ms12.26ms94.9% 감소
최대 응답 시간 (http_req_duration max)5.27s979.22ms81.4% 감소

🔥 응답 시간 대폭 개선

  • 평균 응답 시간 238.6ms → 12.33ms로 94.8% 감소
  • 90% 이상 요청의 응답 시간 577.36ms → 23.89ms 95.9% 단축
  • 최대 응답 시간 5.27s → 979.22ms 81.4% 감소

🔥 서버 처리량 증가

  • 총 처리 요청 수가 29.5% 증가하면서도 응답 시간이 단축됨 → 서버의 부하 대응력 개선

🔥 대기 시간 최적화

  • 요청 대기 시간이 238.45ms → 12.26ms로 감소
profile
💻 💻 💻

0개의 댓글