SpringBoot 에 Redis 적용

twonezero·2024년 8월 7일
0

Redis

목록 보기
3/3
post-thumbnail

이전 글에서는 Redis 자체를 이용하는 방법을 설명했다. docker를 통해 redis 이미지로 설치하고, 인텔리제이에서 redis 를 연결 후 직접 콘솔에서 명령어들을 익혀보았다.

이번에는 SpringBoot 어떻게 Redis 를 활용하는지 살펴보자.

redis 관련 build.gradleapplication.yml 은 이전 글에서 작성했으니 생략하겠다.

Entity & Repository 작성

Item

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@RedisHash("item") <-- Hash 로 동작
public class Item {
    @Id
    private String id; //String 으로 id 타입을 지정하면 UUID 로 자동 저장된다.
    private String name;
    private String description;
    private Integer price;
}

ItemDto

@Getter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ItemDto implements Serializable{
    private String name;
    private String description;
    private Integer price;
}
  • Item 엔티티를 보면 @RedisHash 가 있는데, 이는 엔티티를 redis에 저장할 도메인으로써 사용한다는 뜻
  • "item" 은 hash 키-값 쌍이 담긴 공간의 키
  • 위와 같이 정의된 엔티티에 @Id 어노테이션을 통해 id 값이 redis에서 자동으로 저장됨
    • String : UUID 로 자동 저장

ItemRepository

public interface ItemRepository extends CrudRepository<Item, String> {
}

주로 RDB를 이용할 때 사용하던 JpaRepository 대신 CrudRepository 를 사용하여 Redis 데이터를 쉽게 다룰 수 있다.

  • CrudRepository 는 redis 용으로 사용하는 게 아니라 Repository 를 상속한 단순한 CRUD 용 repository 인터페이스

CRUD 테스트

@RedisHash 를 엔티티에 지정해줌으로써 간단하게 CRUD 동작을 수행할 수 있다.

import com.example.redis.repository.ItemRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
public class RedisRepositoryTest {

    @Autowired
    ItemRepository itemRepository;

    @Test
    public void createTest(){
        Item item = Item.builder()
                .name("keyboard")
                .description("very expensive")
                .price(100000)
                .build();

        itemRepository.save(item);
    }

    @Test
    public void readOneTest() {
        Item item = itemRepository.findById("24a6d54f-b10c-4afe-8981-6b4194cc6549").orElse(null);
        assert item != null;
        System.out.println(item.getDescription());
    }
	
    @Test
    public void updateOneTest() {
        Item item = itemRepository.findById("93277c69-95c8-4b29-b823-334dcec5b548").orElse(null);
        assert item != null;
        item.setDescription("chip");
        var updated = itemRepository.save(item);
        System.out.println(updated.getDescription());
    }

    @Test
    public void deleteOneTest() {
        itemRepository.deleteById("6ea60a49-783f-4e7b-b2d4-37514017785e");
    }
}

아래는 createTest 시 redis 의 담긴 데이터의 모습이다.

  • hash tables : Item 정보 자체가 field value로 저장.
  • sets : 실제로 사용되는 Item 의 key 값을 관리하기 위한 set (@Id 에 해당하는 field 의 value 만 저장됨 )

위와 같이 @RedisHash 를 사용하면 별 다른 설정 없이도 간단하게 CRUD 를 구현할 수 있다.
하지만, 실제로 redis 를 위 객체 데이터를 저장하는 데만 사용하지는 않기 때문에 RedisTemplate 을 이용해 보다 디테일한 기능 구현을 할 수 있다.

profile
소소한 행복을 즐기는 백엔드 개발자입니다😉

0개의 댓글