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
반응형