[Spring][Redis] 스프링 부트 RedisRepository 사용법

2023. 7. 15. 12:00·공부/Spring
728x90

https://growth-coder.tistory.com/228

 

[Spring][Redis] 스프링 부트에서 redis 연동 및 RedisTemplate 사용법

이번 포스팅에서는 스프링 부트에서 redis와 연동하고 값을 저장해보려고 한다. 먼저 스프링 부트에 redis 관련된 의존성을 추가해준다. 만약 기존 진행 중인 프로젝트에 적용한다면 build.gradle에

growth-coder.tistory.com

위 링크의 RedisTemplate에 대한 설명을 보고 오는 것을 추천드립니다.

 

이전 포스팅에서 RedisTemplate을 사용하여 redis에 값을 저장해보았다.

 

단순 value를 저장한다고 하면 RedisTemplate을 통해 쉽게 저장할 수 있다.

 

그런데 단순 value가 아닌 복잡한 도메인 객체를 저장할 때는 RedisTemplate 보다는 RedisRepository를 사용하여 쉽게 구현할 수 있다.

 

먼저 엔티티를 만들어보자. 나는 다음과 같은 엔티티를 만들었다.

@RedisHash("token")
@AllArgsConstructor
public class Token {
    @Id
    private Long id;
    private String accessToken;
    private String refreshToken;
}

@RedisHash 어노테이션의 경우 key 중복을 방지하기 위함이다.

 

만약 Long 타입의 아이디를 key로 사용하는 두 개의 엔티티가 있을 때 key가 중복될 수 있기 때문에 @RedisHash를 통해 구분해주는 것이다.

 

만약 token의 id를 1로 지정해두고 저장한다면 실제 redis에는 "token:1"과 같은 형태로 key 값이 저장 된다. 

 

다음은 설정 파일이다. spring.redis.host와 spring.redis.port는 application.properties에 등록되어 있다.

 

RedisRepository를 사용하기 위해 @EnabledRedisRepositories 어노테이션을 붙여준다.

@Configuration
@EnableRedisRepositories
public class RedisConfiguration {
    @Value("${spring.redis.host}")
    private String redisHost;
    @Value("${spring.redis.port}")
    private int redisPort;

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory(redisHost, redisPort);
    }
    @Bean
    public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

        RedisTemplate<String, String> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
}

이제 CRUDRepository를 상속받은 인터페이스를 생성한다. 기본 CRUD 기능이 이미 구현되어있고 기본 생성 및 조회만 테스트 해 볼 예정이므로 따로 메소드를 작성하지는 않는다. 

@Repository
public interface TokenRepository extends CrudRepository<Token, Long> {
    
}

사용할 때는 TokenRepository를 주입받아서 사용하면 된다. 

 

저장은 save(entity), 아이디로 조회는 findById(id)를 사용하면 된다.

@Component
@RequiredArgsConstructor
public class JwtUtil {
    private final TokenRepository tokenRepository;
    
    public String createRefreshToken(Long id) {
	.
        .
        .
        Token token1 = new Token(id, "access", token);
        tokenRepository.save(token1);
	.
        .
       	.
    }
    public boolean validateRefreshToken(String refreshToken) {
    	.
    	.
        .
        String storedRefreshToken = tokenRepository.findById(pk).get().toString();
        System.out.println("storedRefreshToken = " + storedRefreshToken);
    	.
    	.
        .
    }

}

 

728x90

'공부 > Spring' 카테고리의 다른 글

[Spring] LocalDate, LocalDateTime의 serializer와 deserializer 커스텀하기 (Json과 LocalDate 혹은 LocalDateTime 변환)  (0) 2023.08.07
[Spring] 스프링 부트 Redis를 사용하여 refresh token 저장하기 (2) - docker-compose 사용법  (0) 2023.07.17
[Spring][Redis] 스프링 부트에서 redis 연동 및 RedisTemplate 사용법  (0) 2023.07.14
[Spring] 스프링 부트 Redis를 사용하여 refresh token 저장하기 (1)  (0) 2023.07.12
[Spring] 깃허브 액션(github action)과 도커(docker)를 사용하여 스프링 부트 서버 CI/CD 구축하기  (0) 2023.07.09
'공부/Spring' 카테고리의 다른 글
  • [Spring] LocalDate, LocalDateTime의 serializer와 deserializer 커스텀하기 (Json과 LocalDate 혹은 LocalDateTime 변환)
  • [Spring] 스프링 부트 Redis를 사용하여 refresh token 저장하기 (2) - docker-compose 사용법
  • [Spring][Redis] 스프링 부트에서 redis 연동 및 RedisTemplate 사용법
  • [Spring] 스프링 부트 Redis를 사용하여 refresh token 저장하기 (1)
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Merge
    다익스트라
    RNN
    parametric search
    파이썬
    푸쉬 알람
    binary search
    스택
    bfs
    influxDB CLI
    code tree
    openvidu 배포
    codetree
    embedding
    Vector Store
    스프링 OAuth2
    nn.RNN
    AWS Lambda
    ChatPromptTemplate
    ci/cd
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[Spring][Redis] 스프링 부트 RedisRepository 사용법
상단으로

티스토리툴바