부하 테스트에서 서비스가 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
성능 비교해보기
'개발이 좋아서 > Redis가 좋아서' 카테고리의 다른 글
AWS ElasticCache 활용하기 (0) | 2025.01.31 |
---|---|
Docker Compose로 Redis + Spring Boot 띄우기 (0) | 2025.01.31 |
AWS EC2에서 Redis 활용하기 (0) | 2025.01.31 |
로컬 환경에서 Spring Boot + Redis로 구현하기 (0) | 2025.01.31 |
Redis 캐싱 전략 (0) | 2025.01.28 |