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

._mung·2025년 3월 14일
0

MoodBuddy

목록 보기
7/9

📌 프로젝트 소개

팀원 : 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 테스트 결과

📍 주요 성능 지표 비교

지표1차 테스트2차 테스트변화
총 요청 수 (http_reqs)366,040474,188+29.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로 감소

관련 글

[[🔥TroubleShooting - MoodBuddy🔥] 조회 속도를 높이기 위한 캐싱, 과연 정답일까?]
https://velog.io/@_mung/TroubleShooting-MoodBuddy-%EA%B0%9C%EC%9D%B8-%EA%B3%B5%EA%B0%84%EC%97%90%EC%84%9C%EC%9D%98-%EC%A1%B0%ED%9A%8C-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C

[[🔥TroubleShooting - MoodBuddy🔥] 쿼리 수를 2번 -> 1번, 얼마나 달라진다고?!]
https://velog.io/@_mung/TroubleShooting-MoodBuddy-%EA%B0%9C%EC%9D%B8-%EA%B3%B5%EA%B0%84%EC%97%90%EC%84%9C%EC%9D%98-%EC%A1%B0%ED%9A%8C-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C-shken3hr


profile
💻 💻 💻

0개의 댓글

관련 채용 정보