[내일배움캠프 사전캠프] 21회차 TIL(7/23 목) - Redis

2026. 7. 23. 15:31·심화_AI를 활용한 백엔드 아키텍처 심화 과정

Redis란?

Redis(Remote Dictionary Server)는 Key-Value 기반의 NoSQL 데이터베이스이다.

가장 큰 특징은 데이터를 디스크가 아닌 메모리(RAM)에 저장하는 In-Memory Database라는 점이다.
메모리에서 데이터를 읽고 쓰기 때문에 일반적인 데이터베이스보다 매우 빠른 속도를 제공한다.

Redis의 특징

  • In-Memory Database
    • 데이터를 메모리(RAM)에 저장하여 매우 빠른 조회 및 저장이 가능하다.
    • 기본적으로 메모리에 저장되므로 휘발성이지만, 필요에 따라 디스크에 데이터를 저장(Persistence)할 수도 있다.
  • Key-Value 구조
    • Key를 통해 데이터를 저장하고 조회한다.
    • SQL을 사용하지 않고 Key를 이용해 데이터를 관리한다.
  • 다양한 자료구조 지원
    • 단순 문자열(String)
    • List
    • Set
    • Sorted Set
    • Hash
    • Stream 등 다양한 자료구조를 제공하여 상황에 맞게 사용할 수 있다.
  • 빠른 데이터 처리
    • 메모리 기반으로 동작하기 때문에 읽기(Read)와 쓰기(Write) 속도가 매우 빠르다.
    • 데이터 변경이 자주 발생하는 기능에 적합하다.

Redis를 사용하는 이유

Redis는 빠른 속도가 필요한 기능이나 자주 변경되는 데이터를 처리할 때 많이 사용된다.

대표적인 활용 사례는 다음과 같다.

  • 캐싱(Cache) : 자주 조회되는 데이터를 메모리에 저장하여 DB 부하 감소
  • 세션 관리(Session Clustering) : 로그인 세션 저장 및 서버 간 세션 공유
  • 리더보드(Leaderboard) : 게임 랭킹, 점수 순위 관리
  • 방문자 수(Visitor Tracking) : 실시간 방문자 수 및 조회수 관리
  • 실시간 데이터 처리 : 채팅, 알림, 실시간 통계 등

Redis 명령어

String

  • SET <key> <value>: key에 value 문자열 데이터를 저장
  • SET user:email djaxodbs0101@naver.com
  • GET <key>: key에 저장된 문자열 반환
  • GET user:email
  • INCR key: key에 저장된 데이터를 1 증가
  • INCR user:count
  • DECR key: key에 저장된 데이터를 1 감소
  • decr user:count
  • MSET: key value의 형태로 주어진 인자들을 각 key에 value를 저장함. 여러 개 가능
  • MGET: 주어진 모든 key에 해당하는 데이터 반환.

List

  • LPUSH, RPUSH: 리스트 왼쪽으로/ 리스트 오른쪽으로  value를 저장
  • LPUSH user:list bred
    RPUSH user:list chad
  • LPOP, RPOP: key에 저장된 리스트 앞쪽 / 뒷쪽에서 값을 반환 및 제거
  • LPOP user:list
    RPOP user:list
  • LLEN: key에 저장된 리스트의 길이를 반환
  • LRANGE key start end: key의 start부터 end까지의 원소를 반환
  • LLEN user:list
    LRANGE user:list 0 3
    LRANGE user:list 0 -1

Set: 문자열의 집합으로, 중복 허용x, 순서 존재 x

  • SADD: key에 저장된 집합에 value를 추가
  • SREM: key에 저장된 집합의 value를 제거
  • SMEMBERS: key에 저장된 집합의 모든 원소 반환
  • SISMEMBER: key에 저장된 집합에 value가 존재하는지 확인(true/false)
  • SCARD: key에 저장된 집합의 크기를 반환
  • SADD user:java alex  # [alex]
    SADD user:java brad  # [alex, brad]
    SADD user:java chad  # [alex, brad, chad]
    SREM user:java alex  # [brad, chad]
    
    SMEMBERS user:java        # [alex, brad, chad]
    SISMEMBER user:java brad  # true
    SISMEMBER user:java dave  # false

합집합, 교집합

  • SINTER key1 key2: key1와 key2에 저장된 집합들의 교집합 원소 반환
  • SUNION key1 key2: key1와 key2에 저장된 집합들의 합집합 원소 반환
  • SINTERCARD number key1 [key2 ...]: number개의 key에 저장된 집합들의 교집합 크기 반환
  • SINTER user:java user:python        # [alex]
    SUNION user:java user:python        # [alex, brad, chad, dave]
    SINTERCARD 2 user:java user:python  # 1

Hash: field - value 쌍으로 이루어진 자료형  // Map<String, Map<String, String>> 형식

  • HSET key field value [field value]: key의 Hash에 field에 value를 넣는다. 한번에 여러 개도 가능
  • HSET user:alex name alex age 25
    HSET user:alex major CSE
  • HGET: key에 저장된 Hash의 field에 저장된 value를 반환. 없는 field의 경우 null 반환
  • HGET user:alex name
    HGET user:alex age
  • HMGET: key에 저장된 Hash에서 복수의 field 에 저장된 value  반환
  • HGETALL: key에 저장된 Hash 전부 반환
  • HMGET user:alex age major
    HGETALL user:alex
  • HKEYS: key에 저장된 Hash에 저장된 field를 전부 반환
  • HLEN: key에 저장된 Hash에 저장된 field 개수 반환
  • HKEYS user:alex
    HLEN user:alex
    

Sorted Set: 정렬된 집합으로 중복되지 않은 데이터 + 점수로 저장함.

  • ZADD key score member [score member ...]: key의 Sorted Set에 score를 점수로 가진 member를 추가, 이미 있는member의 경우 새로운 score를 설정
  • ZADD user:ranks 10 alex
    ZADD user:ranks 9 brad 11 chad
  • ZRANK: Set의 member 순위를 오름차순 기준으로 0부터 세서 반환
  • ZRANGE key start stop: Set의 member들을 Start부터 stop 순위까지 오름차순 기준으로 반환
  • ZREVRANK : Set의 member 순위를 내림차순으로 내림차순 기준으로 0에서 부터 세서 반환
  • ZREVRANGE key start stop: Set의 member 들을 start 부터 stop 순위까지 내림차순으로 반환
  • ZINCRBY key increment member: member의 score를 increment만큼 증가(음수 전달 시 감소)
  • ZRANK user:ranks alex
    ZRANGE user:ranks 0 3
    ZREVRANK user:ranks alex
    ZREVRANGE user:ranks 0 4

그 외 공통 명령

DEL key: key 제거

DEL user:list
DEL user:email
DEL user:count

EXPIRE key seconds: key의 TTL을 seconds로 설정, seconds 초가 지나면 key 제거

EXPIRETIME key: key가 만료되는 시각을 Unix Timestamp로 반환

SET expirekey "to be expired"
EXPIRE expirekey 5
EXPIRETIME expirekey

KEYS * : 모든 Key 확인

FLUSHDB: 모든 Key 제거


RedisTemplate

Key를 직접 설정하고 자료형도 직접 선택해 가면서 Redis를 활용하기 위해서는 RedisTemplate을 사용하면 된다. 

@Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void stringOpsTest(){
        ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
        //지금 RedisTemplate에 설정된 타입을 바탕으로 문자열 조작을 하기위한 메서드 설정
        // ValueOperations<String, String> 은 자바에서 key를 전달 할 때 문자열 타입으로

        ops.set("simplekey", "simplevalue");
        System.out.println(ops.get("simplekey"));

        SetOperations<String, String> setOps = stringRedisTemplate.opsForSet();
        //Redis에서는 set 이지만, Java로 넘어올 때는 String 사용
        setOps.add("hobbies", "games");
        setOps.add("hobbies", "coding", "alcohol", "games");
        System.out.println(setOps.size("hobbies"));

        stringRedisTemplate.expire("hobbies", 10, TimeUnit.SECONDS);
        stringRedisTemplate.delete("simplekey");
    }

RedisTemplate을 Bean으로 등록하는 이유

테스트에서 RedisTemplate<String, ItemDto>를 사용하려고 했는데 다음과 같은 오류가 발생했다.

No qualifying bean of type
'RedisTemplate<String, ItemDto>' available
 

원인

Spring Boot는 기본적으로 RedisTemplate<Object, Object> 또는 StringRedisTemplate만 자동으로 생성한다.

하지만 내가 사용하려는 타입은

 
RedisTemplate<String, ItemDto>
 

이므로 해당 Bean이 존재하지 않아 직접 등록해야 한다.


RedisConfig

 
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, ItemDto> itemRedisTemplate(
            RedisConnectionFactory connectionFactory) {

        RedisTemplate<String, ItemDto> template = new RedisTemplate<>();

        template.setConnectionFactory(connectionFactory);
        template.setKeySerializer(RedisSerializer.string());

        return template;
    }
}
 

코드 설명

@Configuration

  • Spring 설정 클래스임을 의미한다.
  • 애플리케이션 실행 시 Spring이 읽어 Bean을 등록한다.

@Bean

  • 메서드가 반환하는 객체를 Spring Bean으로 등록한다.
  • 따라서 RedisTemplate<String, ItemDto>를 @Autowired로 주입받을 수 있다.

RedisConnectionFactory

  • Redis 서버와 연결 정보를 관리한다.
  • application.yml의 host, port, password 설정을 사용한다.

RedisTemplate<String, ItemDto>

  • Redis와 통신하는 객체이다.
  • String은 Key 타입, ItemDto는 Value 타입을 의미한다.

KeySerializer

 
template.setKeySerializer(RedisSerializer.string());
 
  • Key를 문자열 형태로 저장한다.
  • 설정하지 않으면 JDK 직렬화가 사용되어 사람이 읽기 어려운 형태로 저장될 수 있다.

'심화_AI를 활용한 백엔드 아키텍처 심화 과정' 카테고리의 다른 글

[내일배움캠프 사전캠프] 23회차 TIL(7/27 월) - 대규모 시스템 설계  (0) 2026.07.27
[내일배움캠프 사전캠프] 22회차 TIL(7/24 금) - Spring Session, Redis Cache  (0) 2026.07.24
[내일배움캠프 사전캠프] 20회차 TIL(7/22 수) - Docker, Docker-Compose  (0) 2026.07.22
[내일배움캠프 사전캠프] 19회차 TIL(7/21 화) - Docker Image, Container  (0) 2026.07.21
[내일배움캠프 사전캠프] 18회차 TIL(7/16 목) - 스프링 컨테이너  (0) 2026.07.16
'심화_AI를 활용한 백엔드 아키텍처 심화 과정' 카테고리의 다른 글
  • [내일배움캠프 사전캠프] 23회차 TIL(7/27 월) - 대규모 시스템 설계
  • [내일배움캠프 사전캠프] 22회차 TIL(7/24 금) - Spring Session, Redis Cache
  • [내일배움캠프 사전캠프] 20회차 TIL(7/22 수) - Docker, Docker-Compose
  • [내일배움캠프 사전캠프] 19회차 TIL(7/21 화) - Docker Image, Container
taeyoon2
taeyoon2
taeyoon2 님의 블로그 입니다.
  • taeyoon2
    taeyoon2 님의 블로그
    taeyoon2
  • 전체
    오늘
    어제
    • 분류 전체보기 (36)
      • 심화_AI를 활용한 백엔드 아키텍처 심화 과정 (24)
      • MSA (11)
      • Study (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    til
    심화_AI를 활용한 백엔드 아키텍처 심화 과정
    내일배움캠프
    JWT
    spring cloud config
    서킷 브레이커
    보안구성
    MSA
    RabbitMQ
    Resilience4j
    api gateway
    사전캠프
    Zipkin
    내일배움캠프 #사전캠프 #til
    Config
    이벤트 드리븐
    OAuth2
    spring cloud
    분산추적
    로드 밸런싱
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
taeyoon2
[내일배움캠프 사전캠프] 21회차 TIL(7/23 목) - Redis
상단으로

티스토리툴바