민프

[Redis] Redis란 무엇인가 – 초보부터 실무자까지 이해하는 인메모리 데이터베이스의 모든 것 본문

Backend/[Redis]

[Redis] Redis란 무엇인가 – 초보부터 실무자까지 이해하는 인메모리 데이터베이스의 모든 것

민프야 2025. 6. 30. 21:05

 

결론부터...

결론부터 말씀드리자면 

Redis는 “단순 캐시”가 아닙니다.

복잡한 데이터를 빠르게 처리할 수 있는 실시간 인메모리 데이터베이스입니다.

Salvatore가 겪은 문제는 오늘날 수많은 서비스들이 마주하는 문제이기도 하고, Redis는 그 해결책이 되어 왔습니다.


1. Redis란?

Redis는 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어입니다.

Redis는 다양한 인 메모리 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성할 수 있습니다. 주요 Redis 사용 사례로는 캐싱, 세션 관리, pub/sub 및 순위표를 들 수 있습니다.

Redis는 현재 가장 인기 있는 키 값 스토어로서, BSD 라이선스가 있고, 최적화된 C 코드로 작성되었으며, 다양한 개발 언어를 지원합니다. Redis는 
REmote 
DIctionary 
Server의 약어입니다.

-AWS

https://aws.amazon.com/ko/elasticache/what-is-redis/

 

정리를 해보자면  Redis는 Remote Dictionary Server의 약자로, 오픈 소스 인메모리 키-값(Key-Value) 저장소입니다.

주로 캐시(Cache), 세션(Session), 큐(Message Queue), 실시간 순위/통계 시스템 등에 사용됩니다.

  • 속도: 모든 데이터를 메모리(RAM)에 저장하고, 필요에 따라 디스크에 백업.
  • 자료구조 지원: 단순한 key-value뿐 아니라 리스트(List), 해시(Hash), 셋(Set), 정렬된 셋(Sorted Set), 비트맵(Bitmap) 등 다양한 구조 지원.
  • Atomic: 명령어 단위로 원자적 실행.
  • Pub/Sub: 메시지 브로커 역할도 가능.
“Redis는 단순한 캐시 서버를 넘어, 실시간 처리의 핵심 인프라입니다.”

 

1-2. 왜 만들어졌을까?

https://github.com/antirez/lloogg

 

GitHub - antirez/lloogg: LLOOGG realtime web log analyzer

LLOOGG realtime web log analyzer. Contribute to antirez/lloogg development by creating an account on GitHub.

github.com

 

Redis는 2009년, 이탈리아 개발자 Salvatore Sanfilippo(a.k.a. antirez)에 의해 만들어졌습니다.

처음에는 Redis가 무슨 ‘오픈소스 프로젝트’로 태어난 게 아니라, 자신의 스타트업의 성능 병목 문제를 해결하기 위한 ‘개인용 도구’였습니다.

 

Salvatore는 당시 ‘LLOOGG’라는 실시간 웹 애널리틱스 서비스를 개발하고 있었는데, 이 서비스의 핵심은 바로 방문자 데이터의 실시간 분석이었습니다.

 

개발 중 문제가 발생하였습니다.

  • MySQL에 실시간 데이터를 쏟아붓다 보니 성능 병목이 발생
  • 매번 디스크 I/O를 일으키며 SELECT/INSERT를 반복하니 응답 지연
  • 복잡한 데이터 구조 (리스트, 집합, 랭킹 등) 저장이 불편하고 비효율적

그래서 직접 만들기 시작한 것이 Redis (REmote DIctionary Server)입니다.


2. Redis는 어떻게 동작하는가?

- 메모리 기반 저장

 

  • 모든 데이터를 메모리(RAM)에 저장되고, 디스크에는 비동기로 백업(AOF, RDB)하여 속도와 영속성을 모두 챙겼습니다.
  • SET, GET 명령어로 데이터 읽기/쓰기 (최소 1ms 내외)
SET user:1:name "minseok"
GET user:1:name

 

 

- 싱글 쓰레드 구조

 

  • 단일 쓰레드 기반으로 경쟁 조건(Race Condition)이 없음
  • 빠르고 안정적인 구조 (단, CPU 스케일링에는 한계)

- DataType

자료구조
설명 예시
String 기본 타입 "user:1:name" → "민석"
List FIFO 구조 채팅 메시지, 큐
Set 중복 없는 값들 태그 시스템
Sorted Set 순위 기반 실시간 랭킹
Hash 필드-값 쌍 사용자 객체 저장
Bitmap/HyperLogLog 비트 연산, 유니크 카운트  

 

- 백업 옵션

 

  • AOF(Append Only File): 모든 명령어를 로그로 저장
  • RDB(Snapshot): 주기적으로 메모리 상태를 디스크에 저장

옵션과 관련 된 부분들은 따로 정리해서 올려야할 것 같네요.

 


3. 설치 방법

AWS EC2 - Ubuntu 22.04에서 진행하였습니다.

3-1. 시스템 패키지 업데이트

sudo apt update && sudo apt upgrade -y

 

3-2. Redis 설치

sudo apt install redis-server -y

 

3-3. Redis 서비스 상태 확인

sudo systemctl status redis

3-4. Redis CLI 테스트

redis-cli ping

출력이 "PONG"이면 정상

 

3-5. 외부접근허용 (옵션)

sudo nano /etc/redis/redis.conf   
-> 설정 파일

기본적으로 Redis는 localhost(127.0.0.1)에서만 접근 가능하게 되어 있는데 

만약 다른 외부 서버에서 접속하려면 아래와 같이 설정해야합니다.
(저는 ECS 서버에서 사용되어서 설정하였습니다.)

수정할 부분

bind 127.0.0.1 ::1
이걸 주석처리 하시거나

bind 0.0.0.0
로 변경해주시면 됩니다.

 

이렇게 하였을 때에는

특히 AWS 보안 그룹에서 6379 포트ECS 서버 IP만 허용하도록 제한하여야 합니다.

 

3-6. Redis 재시작

sudo systemctl restart redis

 


4. 로컬에서 EC2 - Redis Server 연결 테스트 (Docker Compose)

- 로컬

version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: test-redis
    environment:
      - NODE_ENV=development
      - REDIS_HOST=EC2 IP
      - REDIS_PORT=6379
    env_file:
      - .env
    volumes:
      - .:/app # 코드 변경 실시간 반영
      - /app/node_modules # node_modules는 컨테이너 내부 것을 유지
    command: npm run start:dev
    ports:
      - '3000:3000'

 

- EC2 (Redis - server)

로컬에서 잘 접근되었는지 
CLIENT LIST를 통하여 보겠습니다. 

sudo redis-cli
CLIENT LIST

 

로컬의 외부 IP가 잘 출력되는 것을 보아하니 

정상적으로 잘 접근한 것 같습니다.


 

참고링크

https://redis.io/docs/latest/develop/data-types/

 

Understand Redis data types

Overview of data types supported by Redis

redis.io

https://velog.io/@banggeunho/%EB%A0%88%EB%94%94%EC%8A%A4Redis-%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90.-%EC%A0%95%EC%9D%98-%EC%A0%80%EC%9E%A5%EB%B0%A9%EC%8B%9D-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%9C%A0%ED%9A%A8-%EA%B8%B0%EA%B0%84

 

[Redis] 레디스 알고 쓰자. - 정의, 저장방식, 아키텍처, 자료구조, 유효 기간

레디스(Redis)는 메모리 기반의 데이터 저장소이다. 키-밸류(key-value) 데이터 구조에 기반한 다양한 형태의 자료 구조를 제공하며, 데이터들을 저장할 수 있는 저장소이다. 최신 버전의 레디스는 PU

velog.io

https://aws.amazon.com/ko/elasticache/what-is-redis/

 

Redis란 무엇입니까? – Amazon Web Services(AWS)

Redis 개발자는 백 개가 넘는 오픈 소스 클라이언트를 사용할 수 있으며, Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go를 비롯한 다수의 언어가 지원됩니다.

aws.amazon.com

https://github.com/antirez/lloogg

 

GitHub - antirez/lloogg: LLOOGG realtime web log analyzer

LLOOGG realtime web log analyzer. Contribute to antirez/lloogg development by creating an account on GitHub.

github.com

 

Comments