개발이 좋아서/Redis가 좋아서

부하 테스트를 통해 Redis 적용 전 후 성능 비교하기

zoaseo 2025. 1. 31. 12:19

부하 테스트에서 서비스가 1초당 처리할 수 있는 작업량을 보고 Throughput이라고 부른다. 단위는 TPS(Transaction Per Seconds, 1초당 처리한 트랜잭션의 수)이다.

 

부하 테스트를 위한 환경 세팅 (k6)

k6란?

부하테스트 툴에는 k6 이외에도 ngrinder, jmeter, ab, locust 등 다양한 툴이 있다. 하지만 그 중에서 간단하고 빠르게 테스트 해볼 수 있는 툴인 k6를 활용하고자 한다. (실무에서도 많이 쓰임)

 

k6는 사용자인척 요청을 보내는 툴이다.

1. k6 설치하기

2. 터미널 창에서 잘 설치됐는 지 확인

$ k6

 

3. API에 부하를 주기 위해 k6 스크립트 작성

script.js

import http from 'k6/http';
import { sleep } from 'k6';

export default function () {
  http.get('http://{EC2 IP 주소}:8080/boards');
}

 

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

캐싱 적용 전 Throughput 측정

1. 캐싱코드 주석처리하기

@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();
  }
}

 

2. Spring Boot 서버 빌드 및 백그라운드 실행

# 스프링 프로젝트 경로로 들어가서 아래 명령어 실행
$ ./gradlew clean build -x test 

# 정확한 테스트를 위해 Spring Boot 서버를 백그라운드에서 실행시키자. 
$ cd build/libs
$ nohup java -jar -Dspring.profiles.active=prod {빌드된 jar 파일명} &

# 8080번 포트에 Spring Boot 서버가 잘 실행되고 있는 지 확인
$ lsof -i:8080

 

3. 로컬 환경에서 k6로 성능 테스트 해보기

# K6의 스크립트 파일이 위치한 경로에서 아래 명령어 실행시키기
$ k6 run --vus 30 --duration 10s script.js
  • --vus 30 : 가상 유저(Virtual Users)를 30명으로 세팅
  • --duration 30s : 30초 동안 테스트를 유지

캐싱 적용 후 Throughput 측정

1. 캐싱 코드 주석 해제하기

@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();
  }
}

 

2. Spring Boot 서버 빌드 및 백그라운드 실행

# 스프링 프로젝트 경로로 들어가서 아래 명령어 실행
$ ./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

 

3. 로컬 환경에서 k6로 성능 테스트 해보기

$ k6 run --vus 30 --duration 10s script.js

 

성능 비교해보기

댓글수1