민프
[Redis] Redis란 무엇인가 – 초보부터 실무자까지 이해하는 인메모리 데이터베이스의 모든 것 본문
결론부터...
결론부터 말씀드리자면
Redis는 “단순 캐시”가 아닙니다.
복잡한 데이터를 빠르게 처리할 수 있는 실시간 인메모리 데이터베이스입니다.
Salvatore가 겪은 문제는 오늘날 수많은 서비스들이 마주하는 문제이기도 하고, Redis는 그 해결책이 되어 왔습니다.
1. Redis란?
Redis는 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어입니다.
Redis는 다양한 인 메모리 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성할 수 있습니다. 주요 Redis 사용 사례로는 캐싱, 세션 관리, pub/sub 및 순위표를 들 수 있습니다.
Redis는 현재 가장 인기 있는 키 값 스토어로서, BSD 라이선스가 있고, 최적화된 C 코드로 작성되었으며, 다양한 개발 언어를 지원합니다. Redis는
REmote
DIctionary
Server의 약어입니다.
-AWS
정리를 해보자면 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
[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