AWS EC2에 Redis 생성 & Spring boot 연동법

EC2 우분투 22.04 버전으로 설치 된 가정하에 작성한다

 

우분투 apt-get을 업그레이드 해준다.

sudo apt-get update
sudo apt-get upgrade

 

Redis 설치를 해주자.

sudo apt-get install redis-server

# 설치확인
redis-server --version

이렇게 나오면 성공이다.

 

이제 Redis를 외부접속이 가능하게 설정해주자.

sudo vi /etc/redis/redis.conf

/bind
# 입력후 n 누르면 계속 찾기가 됨.
# i 누르면 입력으로 전환 됨
# 127.0.0.1 ::1 -> 0.0.0.0 ::1 바꾸기
# 바꿧다면 esc 누른다

/foobared
# 입력후 n 누르면 계속 찾기가 됨.
# requirepass foobared 에서 foobared 부분을 원하는 비밀번호로 바꿔주고 #을 없애준다

# 메모리 max 값 설정하기
/maxmemory
# 입력후 n 누르면 계속 찾기가 됨.
# maxmemory <bytes> 에서 # 제거 후 <bytes> 부분에 500mb라고 적자
# 프리티어 기준으로 1gb밖에 되지 않아 500mb로 설정해줬다

# 메모리 교체 알고리즘 변경
/maxmemory-policy
# 입력후 n 누르면 계속 찾기가 됨.
# maxmemory-policy noeviction 에서 # 제거 후 noeviction 부분을 allkeys-lru로 바꿔주자.

# 다 바꿧으면 esc 누르고 :wq! 입력하면 나오게 된다

메모리 교체 알고리즘은 위와 같이 필요한거 사용하면 된다.

 

 

밑으로 내리다보면

bind 127.0.0.1 ::1 이렇게 있을거다 이것을 bind 0.0.0.0 ::1 으로 바꿔준다.

i 누르면 수정 상태로 바뀌고

수정이 되었다면 esc 누른다음 :wq! 입력하면 된다.

 

이제 한번 접속을 해보자.

redis는 인 메모리 데이터베이스이기 때문에 실행중인 상태여야 접근이 가능하다

sudo systemctl start redis-server

 

이제 보안그룹에서 인바운드 규칙을 설정해줘야 한다

Redis 기본포트인 6379를 열어줘야 한다

 

이제 ec2 말고 로컬 컴퓨터로 접속해보자

 

로컬에 redis 설치가 되어 있어야 한다.

 

redis-cli -h {ec2 아이피} -p 6379 -a {설정한 비밀번호}

입력하면

아이피:포트> 이렇게 뜨면서 완료가 된다.

 


Spring boot 설정

build.gradle

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

 

application.properties

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=비밀번호

 

RedisConfig.class

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

@Configuration
public class RedisConfig {
    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private int port;
    
    @Value("${spring.redis.port}")
    private String password;

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
    	RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
        configuration.setHostName(host);
        configuration.setPort(port);
        configuration.setPassword(password);
        return new LettuceConnectionFactory(configuration);
        return new LettuceConnectionFactory();
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        return redisTemplate;
    }
}

 

Entity RefreshToken.class

package project1.OurFit.entity;

import lombok.Getter;
import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
import org.springframework.data.redis.core.index.Indexed;

@Getter
@RedisHash(value = "refreshToken", timeToLive = 1209600) // 2주
public class RefreshToken {

    @Id // Redis Key 값이 되며 null로 세팅하면 랜덤값으로 설정
    @Indexed // 이 값으로 데이터를 찾을 수 있게 설정  (findByEmail 처럼)
    private String email;
    private String refreshToken;

    public RefreshToken(String email, String refreshToken) {
        this.email = email;
        this.refreshToken = refreshToken;
    }
}

RefreshTokenRedisRepository.class

import org.springframework.data.repository.CrudRepository;
import project1.OurFit.entity.RefreshToken;

import java.util.Optional;

public interface RefreshTokenRedisRepository extends CrudRepository<RefreshToken, String> {
    Optional<RefreshToken> findByEmail(String email);
}

 

환경을 다 만들어줬으니 사용하면 된다

댓글

Designed by JB FACTORY