부하 테스트에서 서비스가 1초당 처리할 수 있는 작업량을 보고 Throughput이라고 부른다. 단위는 TPS(Transaction Per Seconds, 1초당 처리한 트랜잭션의 수)를 많이 활용한다.
만약 내가 만든 서비스가 1초에 최대 100개의 API 요청을 처리할 수 있다면, 이 서비스의 Throughput은 100 TPS라고 얘기한다.
환경 세팅 (k6)
부하 테스트의 기본 개념, Windows K6 설치 방법
❓ 부하 테스트란? > 부하 테스트란, 임계값 한계에 도달할 때까지 시스템의 부하를 지속적으로 꾸준히 증가시켜 시스템의 성능을 테스트하는 것이다. ✅ 부하 테스트에서 자주 사용하는 용어
velog.io
✅ API에 부하를 주기 위해 k6 스크립트 작성
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
http.get('http://{EC2 IP 주소}:8080/boards');
}
✅ 캐싱을 적용시키기 전의 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명으로 셋팅 (API 요청을 보내는 사용자가 30명인 것처럼 부하 생성)
- --duration 30s : 30초 동안 테스트를 유지
평균적으로 1초에 1개의 요청을 처리했다는 뜻이다. 즉, 이 서비스는 1초에 최대 처리할 수 있는 요청의 처리 개수가 385개라는 뜻이다. ‘현재 구축한 서비스에서 게시글 조회 API의 Throughput이 1이다’라고 얘기할 수 있다.
Redis를 적용한 결과 확연히 달라진 결과를 확인할 수 있다.
'🏛️Infra > Redis' 카테고리의 다른 글
AWS EC2에서 Redis 활용 (0) | 2025.03.15 |
---|---|
스프링부트 프로젝트에 적용해보기 (0) | 2025.03.15 |
Redis 캐싱 전략 (0) | 2025.03.15 |
Redis (0) | 2025.03.12 |