zoaseo
To Infinity And Beyond
zoaseo
전체 방문자
오늘
어제
  • 분류 전체보기 (763)
    • 개발이 좋아서 (381)
      • SAP가 좋아서 (3)
      • Java가 좋아서 (42)
      • Spring이 좋아서 (50)
      • JPA가 좋아서 (0)
      • QueryDSL이 좋아서 (26)
      • Docker가 좋아서 (7)
      • Redis가 좋아서 (7)
      • AWS가 좋아서 (5)
      • CI/CD가 좋아서 (6)
      • Troubleshooting이 좋아서 (4)
      • Kotlin이 좋아서 (7)
      • SQL이 좋아서 (6)
      • HTTP가 좋아서 (21)
      • JavaScript가 좋아서 (30)
      • TypeScript가 좋아서 (6)
      • Vue가 좋아서 (21)
      • Flutter가 좋아서 (61)
      • React가 좋아서 (20)
      • Redux(React)가 좋아서 (2)
      • Angular가 좋아서 (22)
      • HTML이 좋아서 (9)
      • CSS가 좋아서 (15)
      • PHP가 좋아서 (9)
      • Illustrator가 좋아서 (2)
    • 노력이 좋아서 (169)
    • 결과물이 좋아서 (14)
    • 코딩연습이 좋아서 (168)
      • 이론이 좋아서 (62)
      • SQL이 좋아서 (90)
    • 유용한 사이트가 좋아서 (28)
    • Github (2)

인기 글

티스토리

hELLO · Designed By 정상우.
zoaseo
개발이 좋아서/Redis가 좋아서

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

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

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

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

 

성능 비교해보기

'개발이 좋아서 > 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
  • 부하 테스트를 위한 환경 세팅 (k6)
  • Redis를 적용하기 전/후 Throughput(처리량) 비교해보기

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.