DataBase/Redis

Redis 기본 개념

응애~ 개발자 2025. 5. 22. 16:25
728x90
반응형

Redis 기본 개념: 빠르고 효율적인 인메모리 데이터 저장소

Redis란 무엇인가?

Redis(Remote Dictionary Server)는 오픈 소스 기반의 인메모리 데이터 구조 저장소입니다. 메모리에 데이터를 저장하여 매우 빠른 읽기/쓰기 성능을 제공하며, 다양한 데이터 구조를 지원하는 NoSQL 데이터베이스입니다.

🚀 Redis의 주요 특징

1. 인메모리 저장

  • 모든 데이터를 RAM에 저장하여 디스크 I/O 없이 빠른 접근 가능
  • 밀리초 단위의 응답 시간 제공

2. 다양한 데이터 구조 지원

  • String: 가장 기본적인 키-값 저장
  • Hash: 필드-값 쌍의 컬렉션
  • List: 순서가 있는 문자열 리스트
  • Set: 중복되지 않는 문자열 집합
  • Sorted Set: 점수로 정렬된 집합
  • Bitmap, HyperLogLog 등 고급 데이터 구조

3. 영속성(Persistence)

  • RDB: 특정 시점의 스냅샷 저장
  • AOF: 모든 쓰기 작업을 로그로 기록

4. 고가용성

  • Master-Slave 복제 지원
  • Redis Sentinel을 통한 자동 장애 조치
  • Redis Cluster를 통한 수평 확장

📊 Redis의 주요 사용 사례

1. 캐싱(Caching)

# 자주 조회되는 데이터를 캐시에 저장
SET user:1000 "{'name': 'John', 'email': 'john@example.com'}"
GET user:1000

2. 세션 저장소

# 사용자 세션 정보 저장
HSET session:abc123 user_id 1000 login_time "2024-01-01T10:00:00"
EXPIRE session:abc123 3600  # 1시간 후 만료

3. 실시간 리더보드

# 게임 점수 저장 및 순위 조회
ZADD leaderboard 1500 "player1" 2000 "player2" 1800 "player3"
ZREVRANGE leaderboard 0 9  # 상위 10명 조회

4. 메시지 큐

# 작업 큐에 작업 추가
LPUSH task_queue "process_image:image123.jpg"
# 작업자가 작업 가져오기
BRPOP task_queue 0

🔧 기본 Redis 명령어

문자열 조작

SET key value          # 키에 값 설정
GET key                # 키의 값 조회
INCR counter           # 숫자 값 1 증가
EXPIRE key 300         # 5분 후 만료 설정

리스트 조작

LPUSH mylist "item1"   # 리스트 앞에 추가
RPUSH mylist "item2"   # 리스트 뒤에 추가
LRANGE mylist 0 -1     # 전체 리스트 조회

해시 조작

HSET user:1000 name "John" age 30
HGET user:1000 name    # "John" 반환
HGETALL user:1000      # 모든 필드-값 반환

⚡ Redis vs 다른 데이터베이스

특성  Redis  MySQL  MongoDB
저장 방식 인메모리 디스크 디스크
성능 매우 빠름 보통 빠름
데이터 구조 다양함 테이블 도큐먼트
영속성 옵션 기본 기본
사용 사례 캐시, 세션 OLTP NoSQL 앱

🛠️ Redis 설치 및 실행

Docker를 이용한 설치

# Redis 컨테이너 실행
docker run -d --name redis-server -p 6379:6379 redis:latest

# Redis CLI 접속
docker exec -it redis-server redis-cli

로컬 설치 (Ubuntu)

sudo apt update
sudo apt install redis-server
redis-server  # Redis 서버 시작
redis-cli     # Redis CLI 접속

📈 성능 최적화 팁

1. 메모리 관리

  • maxmemory 설정으로 메모리 사용량 제한
  • 적절한 maxmemory-policy 설정 (예: allkeys-lru)

2. 데이터 구조 선택

  • 용도에 맞는 적절한 데이터 구조 사용
  • 큰 키보다는 여러 개의 작은 키 사용 권장

3. 연결 관리

  • 연결 풀링 사용으로 연결 오버헤드 감소
  • 파이프라이닝을 통한 배치 처리

🔒 Redis 보안 고려사항

1. 인증 설정

# redis.conf에서 패스워드 설정
requirepass your_password_here

2. 네트워크 보안

# 특정 IP만 접근 허용
bind 127.0.0.1 192.168.1.100

3. 위험한 명령어 비활성화

# redis.conf에서 위험한 명령어 제거
rename-command FLUSHDB ""
rename-command FLUSHALL ""

마무리

Redis는 현대 웹 애플리케이션에서 필수적인 인프라 컴포넌트입니다. 빠른 성능과 다양한 데이터 구조 지원으로 캐싱, 세션 관리, 실시간 분석 등 다양한 용도로 활용할 수 있습니다.

Redis를 효과적으로 활용하기 위해서는 적절한 데이터 구조 선택, 메모리 관리, 그리고 보안 설정이 중요합니다. 프로젝트의 요구사항에 맞는 Redis 활용 방안을 찾아 성능과 확장성을 크게 개선할 수 있을 것입니다.

 

728x90
반응형