TIG 서비스에서는 사용자 별 검색 기록을 Redis 데이터베이스에 저장하여 관리한다.
단순히 MySQL 데이터베이스에 저장하여 관리하는 것도 개발자 입장에서 편리할 수 있지만, 인메모리 데이터베이스인 Redis 를 사용하면 어느정도의 성능 이득이 있을지 확인해보았다.

각 데이터베이스에 대한 설명은 스킵하고 가장 큰 차이만 설명해보려 한다.
이러한 이유 때문에 속도상의 차이가 생긴다고 알고 있었다. 실제로 유의미한 차이가 발생하는지 테스트 하기 위해 테스트코드를 작성하여 확인 해보았다.
@Test
public void testSavePerformance() {
// Redis 성능 테스트
long redisStart = System.currentTimeMillis();
for (int i = 0; i < TEST_CASE; i++) {
String keyword = "redisKeyword" + i;
SearchLogDto request = SearchLogDto.fromLog(keyword, LocalDateTime.now().toString());
redisSearchService.saveSearchLog(memberId, request);
}
long redisEnd = System.currentTimeMillis();
System.out.println("Redis Save Time: " + (redisEnd-redisStart) + " ms");
// MySQL 성능 테스트
long mysqlStart = System.currentTimeMillis();
for (int i = 0; i < TEST_CASE; i++) {
String keyword = "mysqlKeyword" + i;
SearchLogDto request = SearchLogDto.fromLog(keyword, LocalDateTime.now().toString());
mySQLSearchService.saveSearchLog(memberId, request);
}
long mysqlEnd = System.currentTimeMillis();
System.out.println("MySQL Save Time: " + (mysqlEnd-mysqlStart) + " ms");
}
간단하게 위와 같은 코드를 구현했다.
단순히 TEST_CASE 개수 만큼의 데이터를 입력할때 시간을 측정해보고 출력하는 형식으로 구현했다.

처음에는 100개의 데이터 부터 실행했지만 유의미한 차이가 발생하지 않아 데이터 개수를 늘려보았다.
결국 10만개의 데이터를 입력할때의 결과는 위와 같다.
궁금해서 100만개의 데이터를 입력해보았다.

차이는 더 유의미 하게 나는 것으로 확인 됐다.
일단 입력하는 부분만 해도 Redis 데이터베이스를 쓰는것이 좋다는 것이 확인되었다.

입력보다 중요한 로직은 이미 저장된 데이터를 조회하는 로직이다.
입력 하는 빈도수보다 조회하는 로직이 훨씬 많이 수행되기 때문에 이 부분에서 얼마나 차이가 나는지 확인 해보았다.
이전에 입력해둔 100만개의 데이터에 대한 조회 시간 차이는 다음과 같았다.

역시 유의미한 차이를 낸다.
단순한 테스트코드 작성을 통해서 확인해본 차이이지만 Redis 를 사용하는 것에 대한 의미를 찾아낸 것 같아서 뿌듯하다.
