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

2023. 6. 28. 10:50·노트/F-lab
목차
  1. 들어가기 전에
  2.  
  3. 설치하기
  4. 프로젝트에 적용하기
  5. 간단히 테스트해보기
  6. 참고

출처 : 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

 

 

 

참고

  • Installing Redis on Linux
  • StringRedisTemplate 
  • 레디스 maxmemory-policy
  • Springboot redis 연동하기
  • EC2에서 Redis 설치 데이터 생성 및 조회 with BastionHost
  • Memcached vs. Redis - 특징 비교
저작자표시 (새창열림)

'노트 > F-lab' 카테고리의 다른 글

가변 인자를 다루기 위한 Functional Interface 활용  (0) 2023.07.01
동시성 제어와 DB 설계의 고민  (0) 2023.06.23
Github Actions: CI/CD 구축 (feat. Docker)  (0) 2023.06.21
RabbitMQ를 활용한 메시지 처리 방식 구현: 설치부터 적용까지  (0) 2023.06.17
Github Actions: CI/CD 구축 (feat.shell script) - 실전편  (3) 2023.06.04
  1. 들어가기 전에
  2.  
  3. 설치하기
  4. 프로젝트에 적용하기
  5. 간단히 테스트해보기
  6. 참고
'노트/F-lab' 카테고리의 다른 글
  • 가변 인자를 다루기 위한 Functional Interface 활용
  • 동시성 제어와 DB 설계의 고민
  • Github Actions: CI/CD 구축 (feat. Docker)
  • RabbitMQ를 활용한 메시지 처리 방식 구현: 설치부터 적용까지
soro.k
soro.k
  • soro.k
    일일소록
    soro.k
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Java
      • Spring
      • JavaScript
      • DB
      • Web
      • Computer Science
        • Operating System
        • Network
        • Data Structure
        • Algorithm
      • Git
      • 노트
        • F-lab
        • 회고
        • Review
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
soro.k
[Redis] 설치 및 간단한 테스트 해보기 (Ubuntu 18.04)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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