안녕하세요 Dev JaeIn 입니다.
이번 포스팅에서 다룰 주제는 Redis와 SpringBoot 를 통한 Redis 의 성능 테스트 입니다.
스프링 부트와 Redis 연동은 다음 포스팅을 참조하시면 됩니다.
우선 DB는 더미 테이블을 생성하여 준비하였습니다.
Dummy 데이터 및 테이블 구조
테이블 구조의 Primary key 가 1부터 순차적으로 증가하여 Random 한 숫자를 생성하면 접근 가능하도록 구성되어 있습니다.
테스트 툴은 Jmeter 를 활용했습니다.
제가 구성한 로직은 다음과 같이 구성했습니다.
서비스 로직에 DB에서 가져오는 로직과 Redis에서 가져오는 로직을 만들었습니다.
User class
Controller
Service
Dao
Redis Data Set
Redis에는 1만개 데이터를 미리 넣습니다. (Redis 서버가 꼭 실행중이여야 합니다.)
실제 Request 결과 페이지
jmeter 를 사용하여 Request 를 날려 분석해보겠습니다.
요청은 유저수 4천명 기준으로 잡고 진행했습니다. 동일한 유저수로 Redis,DB 요청을 진행한 결과를 보여드리겠습니다.
중점적으로 살펴본 것은 처리량 및 응답받은 데이터 입니다.
대략 50 정도에서 움직이는 것을 확인 할 수 있습니다. DB 에서 데이터를 가져오는 시간이 있기 때문에 요정도 수치가 나왔다고 생각합니다.
처리 가능한 시간 대비 사용자수가 급격히 증가하여 응답시간은 점점 늘어나는 것을 확인 할 수 있습니다.
쓰레드 수도 순차적으로 줄어드는것을 확인 할 수 있습니다.
이번에도 중점적으로 살펴본 것은 처리량 및 응답받은 데이터 입니다.
최대 800 이상까지 올라가는 것을 확인 할 수 있습니다. 아무래도 DB에 접근하지 않고 바로 가져오니 빠르게 처리하는 것을
확인 할 수 있습니다.
응답시간도 전체적으로 빠른편 입니다. TPS가 높다 보니 응답 데이터가 최대한 들어오는 대로 처리가 가능하다 보여집니다.
쓰레드 숫자도 누적되기 전에 처리되는 것을 확인 가능합니다.
전체적인 수치를 비교해 봤을 때
Throughput (MAX 기준)
DB : 43.5/sec
Redis : 568.8/sec
Redis가 압도적으로 빠른 처리량을 보입니다.
Transactions Per Second(TPS)
DB : 50
Redis : 800
TPS도 마찬가지로 Redis 가 빠른 처리량을 보입니다.
Response Times Over Time
DB : 가장 마지막에 들어온 사람은 최대 87초 동안 대기.
Redis : 가장 마지막에 들어온 사람은 2.3초 동안 대기
응답 시간도 매우 차이나는 것을 확인 가능합니다.
Redis가 매우 우세.
Active Threads Over Time
DB : Thread 갯수도 DB접근의 경우 요청이 계속 쌓여서 순차적으로 처리하여 점차 줄어드는 것으로 확인
Redis : Thread 갯수가 많이 쌓이지 않고 금방 처리가 되는것을 확인
이번 테스트를 통해 Redis 서버의 빠른 퍼포먼스를 알 수 있었습니다.
많은 대규모 서비스를 하는 기업들이 Redis를 왜 사용하는지 대규모 서비스에서 왜 빠른 응답이 가능 한지 알 수 있는 시간이였습니다.
소스코드는 압축하여 여기 에 올려두었습니다.
읽어주셔서 감사합니다.