성장일기

내가 보려고 정리하는 공부기록

데이터베이스/Redis

[Redis] Redis 알아보기

와나나나 2025. 10. 28. 17:13
728x90

프로젝트에서 쓸 일이 있어서 Redis 강의를 들으면서 간단하게 정리해보려고 한다. 강의는 아래 유튜브 강의를 참고했다! (kafka 강의 듣고 간단하게 입문용으로 듣기 좋았어서 redis도 들어보려 한다)

https://www.youtube.com/watch?v=4PQs57cq84U&list=PLtUgHNmvcs6qoVrxB5jzZ4meINz_KL-Bl&index=2

 

 


1. Redis란?

Redis는 key-value 구조의 비정형데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 DBMS이다. 쉽게 말하면 데이터 처리 속도가 빠른 NoSQL인 것이다!

NoSQL?
NoSQL은 Mysql이나 MariaDB처럼 관계형 데이터베이스의 테이블 구조에 의존하지 않고 데이터를 저장하는 비관계형 데이터베이스 시스템을 의미한다. RDBMS에 비해서 유연하고 속도가 빠르다는 특징이 있다.

 

Redis는 데이터를 메모리에 저장하는 인메모리 DB이며, 캐시 서버로 이용할 수 있다! 그래서 데이터 처리 성능이 굉장히 좋다.

 

 

# 인메모리 (In-Memory)

기존 데이터베이스는 디스크에 데이터를 저장하고 자주 불러오는 일부 데이터만 메모리에 저장하는 구조이다. 그러나 실시간 데이터분석처럼 마이크로초의 응답시간이 요구되거나, 트래픽이 큰 폭으로 급증하는 애플리케이션의 경우 부하가 발생하는 등 불편을 겪을 수 있다.

이를 해결하기 위해 나온 인메모리 DB는 디스크가 아닌 메모리에 데이터를 업로드해서 사용하는 방식이다. 데이터 갱신 자체를 메모리를 사용하고, 백업은 디스크를 이용하는 방식이다.

더 빠른 트래픽 처리에는 인메모리 DB가 용이하며, 다만 메모리가 다운될 경우 데이터가 사라지기 때문에 백업이 필요하다 !

 

 

 

# 캐시서버 (Cache Server)

캐시는 한 번 읽은 데이터를 임의의 공간에 저장해 다음에 읽을 때는 빠르게 결괏값을 받을 수 있게 하는 공간이다. 같은 요청이 여러 번 들어올 때 캐시서버를 이용하면 요청마다 DB를 거치는 것이 아닌 캐시서버에서 바로 값을 받을 수 있기 때문에 DB 부하를 줄이고, 속도도 올릴 수 있다!

✅ 캐시서버의 패턴

  1. Look aside cache
    클라이언트가 데이터 요청 → 웹 서버에서 데이터가 존재하는지 여부를 Cache 서버에서 확인
    → 있으면 DB 조회 없이 결과값을 클라이언트에 반환 - Cache Hit
    → 없으면 DB에 데이터를 저장해 Cache 서버에 저장하고 결과값을 클라이언트에 반환 - Cache Miss

  2. Write Back
    웹 서버는 모든 데이터를 Cache 서버에 저장
    → Cache 서버에 특정 시간동안 데이터 저장됨
    → Cache 서버에 있는 데이터를 DB에 저장
    → DB에 저장된 Cache 서버의 데이터를 삭제

DB에 날리기 전에 서버에 장애가 생기면 데이터가 손실되므로 주의 !

 

 

 

레디스의 특징을 정리하면 다음과 같다.

  1. 인메모리 데이터 저장소라서 속도가 빠름, redis가 다운되면 데이터가 사라지는데, 이런 문제를 해결하기 위해 데이터 지속성을 위한 옵션을 제공함
  2. Key, Value 구조를 사용함 → 쿼리를 사용할 필요 없음
    • Strings, Lists, Sets, Stored Sets, Hashs 등의 데이터 구조 지원
      • String : 일반적인 key - value 구조
      • Sets : String의 집합. 여러 개의 값을 하나의 value에 넣을 수 있음
      • Sorted Sets : 중복된 데이터를 담지 않는 Set 구조에 정렬 Sort를 적용한 구조로 랭킹보드 서버같은 구현에 사용
  3. 싱글 스레드
    • 한 번에 하나의 명령만 처리할 수 있음
  4. Pub/Sub 메시징
    • 게시/구독 메시징에 대한 지원이 포함됨 → 실시간 통신 패턴 구현 가능

 


2. Redis 주요 사용 사례

Redis는 다양한 곳에 많이 사용된다!

  • 캐싱 (Caching)
  • 세션 관리 (Session Management)
  • 실시간 분석 및 통계
  • 메시지 큐 (MQ)
  • 지리공간 인덱싱 (Geospatial Indexing)
  • 실시간 채팅 및 메시징
  • 등등...

해당 강의에서는 캐싱에 대해서만 알아본다고 한다! redis의 기본적인 부분을 공부하는 게 목표니까 좋다. 다른 부분들은 기본부터 쌓고 혼자 해볼 예정이다.

 


3. Redis 사용 방식

☑️ RedisRepository 사용

JpaRepository처럼 interface로 구성 가능. Redis의 Hash를 이용해 crud 수행함

hash타입만 이용할 수 있다는 단점이 있음

@Getter
@RedisHash(value = "member")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class Member {

	@Id
	private Long id;
	
	private String name;
}

 

@RedisHash

엔티티에 해당 어노테이션을 붙여줘야함. value에는 어떤 prefix를 가질 것인지 결정함

@Id

prefix 뒤에 붙음 ( {prefix} : {Id} ) → 객체를 판별할 수 있도록 해줌

Repository는 jpa와 마찬가지로 작업하되 CrudRepository를 확장하는 형태로 구성됨

public interface MemberRepository extends CrudRepository<Member, Long> {}

→ Hash 외 다른 타입을 사용해야 할 경우에는 맞지 않아보임

 

 

☑️ RedisTemplate 사용

RedisRepository와 달리 다양한 자료구조를 사용할 수 있다. 아래는 그를 위한 메소드이다.

메서드 설명

opsForValue Strings를 쉽게 Serialize / Deserialize 해주는 interface
opsForList List를 쉽게 Serialize / Deserialize 해주는 interface
opsForSet Set을 쉽게 Serialize / Deserialize 해주는 interface
opsForZSet ZSet을 쉽게 Serialize / Deserialize 해주는 interface
opsForHash Hash를 쉽게 Serialize / Deserialize 해주는 interface

 

// 예시
@Autowired
RedisTemplate<String, Member> jsonRedisTemplate;

ValueOperations<String, Member> valueOps = jsonRedisTemplate.opsForValue();

 

이 외에도 RedisTemplate을 이용하면 키를 예쁘게 만든다거나, value값을 원하는 형태로 커스텀 할 수 있다는 장점이 있다!