본문 바로가기
노트/F-lab

[Redis] 설치 및 간단한 테스트 해보기 (Ubuntu 18.04)

by soro.k 2023. 6. 28.

출처 : https://kinsta.com/docs/redis-cache/

들어가기 전에

버즈덤 프로젝트에서는 Spring Security와 JWT를 통해 인증 및 인가 처리를 하는데 이때 Token 저장소로 Redis를 사용하기로 했다. 같이 하시는 팀원 분 파트였는데 하시는 데 어려움을 겪으셔서 내가 연결 정보만 넘겨드리기로 하면서 Redis를 조금이나마 경험할 수 있었다.

 

사실 설치하고 사용하는 과정까지는 크게 어렵지 않지만 혹시나 나처럼 실수를 겪는 분이 있을까봐 글을 작성하게 됐다. 공식 문서나 블로그 글이나 큰 차이가 없을 것이라고 생각해서 "Redis 설치"를 검색하고 상위에 뜨는 블로그 글들의 설치 방법을 그대로 따라했다가 계속 오류가 나서 생각보다 시간을 쏟게 되었었기 때문이다. 🥲

 

역시 올타임 교훈은 뭐다? 공식 문서를 참고하자!

 

설치하기

1. APT 인덱스에 Repository 를 추가한다.

curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list

 

2. 설치 가능한 패키지 리스트를 업데이트한 후 레디스를 설치한다.

sudo apt-get update
sudo apt-get install redis

 

설치 완료 후에는 아래 명령어로 버전 정보를 확인할 수 있다.

sudo redis-server --version

 

3. 설정 정보를 추가 및 변경한다.

1) 설정 파일을 연다.

sudo nano /etc/redis/redis.conf

 

2) 아래 키워드들을 찾아 주석을 풀고 내용을 입력한다.

bind 0.0.0.0 ::1
requirepass [비밀번호]
port 6379

maxmemory 500m
maxmemory-policy allkeys-lru
  • bind : IP 접근에 대한 설정으로 모든 IP에 대한 접근을 허용한다.
  • requirepass : 설정 정보에 사용할 비밀번호를 설정한다.
  • port : 포트 번호는 6379번으로 지정하면 된다.
  • maxmemory : 최대 메모리를 설정한다.
  • maxmemory-policy : Data eviction 전략을 선택한다.

 

 

Data eviction 전략

출처 : https://zetawiki.com/wiki/%EB%A0%88%EB%94%94%EC%8A%A4_maxmemory-policy

 

3) 레디스를 재실행한다.

sudo systemctl restart redis-server.service

 

 

프로젝트에 적용하기

1. 의존성을 추가한다.

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

 

2. 연결 정보를 추가한다.

spring:
  redis:
    port: 6379
    host: [Public IP]
    password: [비밀번호]

비밀번호는 Redis 설정 정보에 추가했던 정보를 기입하면 된다.

 

3. 설정 클래스를 생성한다.

@Configuration
public class RedisConfig {
 
    @Value("${spring.redis.host}")
    private String redisHost;
	
    @Value("${spring.redis.port}")
    private String redisPort;
	
    @Value("${spring.redis.password}")
    private String redisPassword;
	
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName(redisHost);
        redisStandaloneConfiguration.setPort(Integer.parseInt(redisPort));
        redisStandaloneConfiguration.setPassword(redisPassword);
        LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);
        return lettuceConnectionFactory;
    }
 
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

 

간단히 테스트해보기

redis-cli로 값을 저장하고 그 값을 확인하는 API를 생성해보자.

 

1. redis-cli로 서버에 접속한다.

reids-cli

 

2. 키-값을 설정한다.

set [key] [value]
set test test-value

 

3. 추가된 Key의 Value를 가져오기 위한 Controller와 Service 코드를 작성한다.

 

RedisSampleController

@Controller
@RequiredArgsConstructor
public class RedisSampleController {

    private final RedisSampleService redisSampleService;

    @GetMapping(value = "/redis/{key}")
    public String getRedisStringValue(@PathVariable String key) {
        return redisSampleService.getRedisStringValue(key);
    }
}

 

RedisSampleService

@Service
@RequiredArgsConstructor
public class RedisSampleService {

    private final StringRedisTemplate stringRedisTemplate;

    public String getRedisStringValue(String key) {
        ValueOperations<String, String> stringValueOperations = 
                                stringRedisTemplate.opsForValue();

        return stringValueOperations.get(key);
    }
}
  • StringRedisTemplate : Redis의 Template 중 문자열 중심으로 확장된 템플릿이다.
  • StringRedisTemplate.opsForValue() : 문자열 값에 대해 수행된 작업 결과를 반환한다.
  • ValueOperations : 문자열 값을 위한 Redis의 작업 클래스이다. (그외에는 ListOperations, SetOperations 등이 있다.)

 

4. API 테스트를 해서 반환되는 값을 확인한다.

localhost:8080/redis/test

반환 데이터

test-value

 

 

 

참고