JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

Redis를 적용하기 전·후 Throughput(처리량) 비교해보기

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Redis
createdAt
Dec 6, 2025
series
비전공자도 이해할 수 있는 Redis 입문/실전
slug
redis-throughput-before-after-test
type
post
updatedAt
Dec 6, 2025 04:33 AM

✅ 캐싱을 적용시키기 전의 Throughput 측정

  1. 캐싱 코드 주석처리하기
    1. BoardService
      @Service public class BoardService { ... // @Cacheable(cacheNames = "getBoards", key = "'boards:page:' + #page + ':size:' + #size", cacheManager = "boardCacheManager") public List<Board> getBoards(int page, int size) { Pageable pageable = PageRequest.of(page - 1, size); Page<Board> pageOfBoards = boardRepository.findAllByOrderByCreatedAtDesc(pageable); return pageOfBoards.getContent(); } }
       
  1. Spring Boot 서버 빌드 및 백그라운드 실행
    1. # 스프링 프로젝트 경로로 들어가서 아래 명령어 실행 $ ./gradlew clean build -x test # 정확한 테스트를 위해 Spring Boot 서버를 백그라운드에서 실행시키자. $ cd build/libs $ nohup java -jar -Dspring.profiles.active=prod {빌드된 jar 파일명} & # 8080번 포트에 Spring Boot 서버가 잘 실행되고 있는 지 확인 $ lsof -i:8080
       
  1. 로컬 환경에서 K6로 성능 테스트 해보기
    1. 더 정확한 성능 측정 방법이 있지만 성능 테스트에 초점을 맞춘 강의가 아니기 때문에 간편한 방법으로 측정하고자 한다.
      # K6의 스크립트 파일이 위치한 경로에서 아래 명령어 실행시키기 $ k6 run --vus 30 --duration 10s script.js
      • --vus 30 : 가상 유저(Virtual Users)를 30명으로 셋팅 (API 요청을 보내는 사용자가 30명인 것처럼 부하 생성)
      • --duration 30s : 30초 동안 테스트를 유지
       
      notion image
      평균적으로 1초에 1.6개의 요청을 처리했다는 뜻이다. 즉, 이 서비스는 1초에 최대 처리할 수 있는 요청의 처리 개수가 1.6개라는 뜻이다. 개발자답게 표현하자면 ‘현재 구축한 서비스에서 게시글 조회 API의 Throughput이 1.6 TPS다’라고 얘기할 수 있다.
 
 

✅ 캐싱을 적용시킨 후에 Throughput 측정

  1. 캐싱 코드 주석 해제하기
    1. BoardService
      @Service public class BoardService { ... @Cacheable(cacheNames = "getBoards", key = "'boards:page:' + #page + ':size:' + #size", cacheManager = "boardCacheManager") public List<Board> getBoards(int page, int size) { Pageable pageable = PageRequest.of(page - 1, size); Page<Board> pageOfBoards = boardRepository.findAllByOrderByCreatedAtDesc(pageable); return pageOfBoards.getContent(); } }
       
  1. Spring Boot 서버 빌드 및 백그라운드 실행
    1. # 스프링 프로젝트 경로로 들어가서 아래 명령어 실행 $ ./gradlew clean build -x test # 기존 서버 종료 $ lsof -i:8080 $ kill {PID 값} # 정확한 테스트를 위해 Spring Boot 서버를 백그라운드에서 실행시키자. $ cd build/libs $ nohup java -jar -Dspring.profiles.active=prod {빌드된 jar 파일명} & # 8080번 포트에 Spring Boot 서버가 잘 실행되고 있는 지 확인 $ lsof -i:8080
       
  1. 로컬 환경에서 K6로 성능 테스트 해보기
    1. $ k6 run --vus 30 --duration 10s script.js
       
      notion image
      평균적으로 1초에 385개의 요청을 처리했다는 뜻이다. 즉, 이 서비스는 1초에 최대 처리할 수 있는 요청의 처리 개수가 385개라는 뜻이다. 개발자답게 표현하자면 ‘현재 구축한 서비스에서 게시글 조회 API의 Throughput이 385이다’라고 얘기할 수 있다. Throughput이 385라는 뜻은 1초에 385개 이하의 요청까지는 견딜 수 있는 서비스라고도 해석할 수 있다.
 

✅ 성능 비교

Redis의 캐싱을 활용하니 성능이 약 240배(= 385 / 1.6) 향상되었다.
author
category
Redis
createdAt
series
비전공자도 이해할 수 있는 Redis 입문/실전
slug
type
series-footer
updatedAt
Dec 6, 2025 04:33 AM
📎
이 글은 비전공자도 이해할 수 있는 Redis 입문/실전 (조회 성능 최적화편) 강의의 수업 자료 중 일부입니다.