본문 바로가기
Development/DB

[DB] Redis란? 사용하는 이유

by 최호희 2024. 5. 12.

들어가며,

프로젝트에서 사용자 및 이메일 관련 로직을 담당하게 됬다.

구현을 하던 중, 이메일로 보낸 인증코드를 '검증' 하는 로직을 짜는데 Redis 라는 Nosql 비관계형 DB가 필요하게 되었다. 따라서 오늘은 Redis에 대하여 작성해 볼 것이다.


먼저 Cache의 개념부터 본 뒤, Redis로 넘어가자.

 

Cache 란?

캐시(Cache)란 한 번 처리된 데이터를 임시로 저장하고, 필요에 따라 전송, 갱신, 삭제하는 기술이다. 보통 서버의 메모리를 사용하는 경우가 많으며, 이를 통해 매번 디스크에서 데이터를 조회하는 것보다 훨씬 빠른 I/O 성능을 얻을 수 있다.

캐시는 메모리를 사용하기 때문에 서버가 다운되거나 재부팅되는 경우 데이터가 사라지는 휘발성의 성격을 갖고 있다. 따라서 영속적으로 보관할 수 없는 데이터를 임시로 보관하고, 빠르게 해당 정보에 접근하기 위한 용도로 사용된다.

 

Cache 장점

  • 웹 어플리케이션 서버의 부하를 감소시킨다.
  • 서버 간 불필요한 트래픽을 줄일 수 있다.
  • 어플리케이션의 빠른 처리 성능(조회)을 확보해 궁극적으로 고객에게 쾌적한 서비스가 되게 한다

 

Cache의 대상이 되는 데이터

  • 단순한 구조의 데이터
  • 반복적으로 동일하게 제공되어야 하는 데이터
  • 변경 주기가 빈번하지 않고 단위처리 시간이 오래걸리는 정보 : 높은 단위처리 비용
  • 정보의 최신화가 반드시 실시간으로 이루어지지 않아도 서비스 품질에 영향을 거의 주지 않는 정보

예시) 추천 수, 조회 수, 방문자 수, 1회성 인증정보. 이메일인증, SMS 본인인증 등

Cache 사용 시 주의할 점

  • 캐싱할 정보의 선택
  • 캐싱할 정보의 유효기간 (TTL, Time To Live) 설정
  • 캐싱할 정보의 갱신 시점

서비스 설계 시

특히 백엔드의 경우 API 설계 단계부터 Cache 정책을 수립해두는게 좋다.

어떤 정보를 Cache로 적용할지?, 해당 정보들을 어떤 시점에 어떤 주기로 갱신, 삭제할 지? ⇒ 캐싱 전략


 

📌Redis 란?

Redis는 Remote Dictionary Server의 약자로, 키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다.

 

📌 Redis를 사용한 이유

인메모리 데이터 저장소로 빠른 응답 시간, 데이터 만료 기능을 제공하기 때문에 제한된 시간 동안만 유효한 이메일 관련 데이터를 저장하기 적합하다고 판단하였다.

 

📌 그렇다면 Redis를 직접 사용해보자.

build.gradle 파일에 spring-boot-starter-data-redis 의존성을 추가해주었다.

implementation 'org.springframework.boot:spring-boot-starter-data-redis'

 

 

 

RedisUtil.java

package com.swyp.kiwoyu.global.util;

import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
public class RedisUtil {

    private final StringRedisTemplate redisTemplate;

    public RedisUtil(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void setDataExpire(String key, String value, long duration) {
        redisTemplate.opsForValue().set(key, value, duration, TimeUnit.MINUTES);
    }

    public String getData(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    public void deleteData(String key) {
        redisTemplate.delete(key);
    }
}

 

 

RedisUtil 클래스는 Redis와 상호 작용하기 위한 간단한 유틸리티 클래스로, 키-값 데이터를 저장, 조회, 삭제하는 기능을 제공함.

이 클래스는 StringRedisTemplate을 사용하여 Redis 서버와 연결하고, 데이터를 관리한다.

예를 들어 특정 데이터를 일정 시간 동안 캐시로 저장하거나, 필요할 때 데이터를 조회하고 더 이상 필요하지 않을 때 데이터를 삭제할 수 있다.

 

StingRedisTemplate 클래스 구조

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.springframework.data.redis.core;

import org.springframework.data.redis.connection.DefaultStringRedisConnection;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.RedisSerializer;

public class StringRedisTemplate extends RedisTemplate<String, String> {
    public StringRedisTemplate() {
        this.setKeySerializer(RedisSerializer.string());
        this.setValueSerializer(RedisSerializer.string());
        this.setHashKeySerializer(RedisSerializer.string());
        this.setHashValueSerializer(RedisSerializer.string());
    }

    public StringRedisTemplate(RedisConnectionFactory connectionFactory) {
        this();
        this.setConnectionFactory(connectionFactory);
        this.afterPropertiesSet();
    }

    protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) {
        return new DefaultStringRedisConnection(connection);
    }
}



 

 


참고 블로그 및 사이트

Redis 다운로드: https://github.com/microsoftarchive/redis/releases

 

Releases · microsoftarchive/redis

Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - microsoftarchive/redis

github.com

https://ittrue.tistory.com/318

 

[Redis] 윈도우10 환경에서 레디스 설치하기

Redis 설치 프로그램 다운로드 아래 링크에 접속하여 msi 확장자의 Redis 설치 프로그램을 다운로드한다. https://github.com/microsoftarchive/redis/releases Releases · microsoftarchive/redis Redis is an in-memory database that

ittrue.tistory.com

https://velog.io/@j3beom/SpringBoot-Redis-Redis%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-Caching-%EA%B8%B0%EB%B3%B8-%EB%B0%8F-%ED%99%9C%EC%9A%A9-%EC%98%88%EC%A0%9C

 

[SpringBoot, Redis] Redis를 활용한 Caching 기본 및 활용 예제

한번 읽은(처리된) 데이터를 임시로 저장하고, 필요에 따라 전송, 갱신, 삭제하는 기술이다.보통 서버의 메모리를 사용하는 경우가 많다.메모리를 사용하기 때문에 매번 Disk로부터 데이터를 조

velog.io