개요
인프런 실전! Redis 활용 강의를 듣고 정리한 포스팅이다.
Redis의 개념과 특징, 설치, 간단한 사용법에 대해 정리한다.
해당 강의는 특정 프로그래밍 언어에 종속되는 것이 아니기에, spring boot에 redis를 사용하는 것은 후속편에서 포스팅할 예정이다.
Redis 알아보기
Remote Dictionary Server의 약자로, 다수의 서버가 공유하는 해시 테이블이다.
- Remote: Redis 서버는 각각의 서버 안에 로컬하게 존재하는 것이 아니라, 개별적인 원격상 존재해서 다수의 서버가 공통으로 사용할 수 있다.
- Dictionary: key-value 쌍으로, 상수의 시간 복잡도로 사용이 가능하다.
Redis 특징
- 표준 C로 작성된 오픈소스 인메모리 데이터 저장소이다.
- 백업을 제외한 모든 데이터를 램에 저장하기 때문에 RDBMS와 다른 구조를 가지며, 인메모리 데이터 스토어이다. (일반적으로 램은 디스크에 비해 매우 빠르다. )
- 싱글 스레드 기반이다. 멀티 스레드로 데이터베이스 엔진을 구성했을 때 장점이 분명히 존재하지만 프로그램의 복잡도를 증가시킬 수 있기에, 레디스는 과감하게 단일 스레드를 사용하여 단순한 디자인을 채택하였다. 따라서 개발자가 사용만 잘하면 사이드 이펙트가 거의 없는 매우 안정적인 기술이다.
- 클러스터 모드를 지원한다. 다중 노드에 데이터를 분산 저장하여 기본적으로 안정성∙고가용성을 제공한다.
- 인메모리 데이터베이스라는 특성상 주로 휘발성 데이터를 저장하지만 RDB와 AOF(Append Only File)이라는 특성을 통해 안전하게 영속적으로 관리할 수도 있다.
- Pub/Sub과 같은 기술이 자체적으로 구현되어 있어서 이를 활용하면 실시간 채팅이나 알림 서비스와 같은 어플리케이션을 손쉽게 개발할 수 있다.
Redis 장점
- 모든 데이터를 메모리에 저장하기 때문에 매우 빠른 읽기/쓰기 속도를 보장한다.
- 다양한 Data Type을 지원한다.
- 다양한 언어로 작성된 클라이언트 라이브러리를 지원한다. (백엔드와 연동이 쉽다.)
Redis 사용 사례
- Caching: 임시 비밀번호/로그인 세션과 같은 임시 데이터를 레디스에 캐싱하여 활용하는 사례가 많다.
- Rate Limiter(Fixed-Window/Sliding-Window Rate Limiter): 서버에서 특정 API에 대한 요청 횟수를 제한할 때 사용한다.
- Message Broker: 레디스의 리스트나 스트림지 같은 데이터 타입을 활용하여 메시지 브로커를 구현할 수 있다. 이를 통해 다양한 서비스 간의 커플링을 줄이는 곳에 사용한다.
- 실시간 분석 / 계산: 다양한 실시간 분석 및 계산이 가능하다.
- 실시간 채팅: 레디스의 Pub/Sub 패턴을 활용하여 실시간 채팅 기능을 구현할 수 있다.
Redis 영속성
레디스는 주로 캐시로 사용되지만 데이터 영속성을 위한 옵션을 제공한다. SSD와 같은 영구적인 저장 장치에 데이터를 저장하는 방식으로 구현된다.
- RDB(Redis Database)
- 특정 시간에 스냅샷을 생성하는 기술이다. 장애가 발생했을 때 특정 시점에 스냅샷으로 빠르게 캐시를 되돌리거나 동일한 데이터를 가진 캐시를 복제할 때 주로 사용된다.
- 스냅샷의 특성상 스냅샷이 생성되기 이전의 일부 데이터는 유실 위험이 있다.
- 스냅샷 생성 중에 전체적인 레디스 서버의 성능 저하가 발생하여 클라이언트 요청 처리에 지연이 발생할 수 있다.
- AOF(Append Only File)
- 레디스에 적용되는 Write 작업을 모두 log로 저장하는 방식이다.
- 데이터 유실 없이 거의 모든 데이터에 싱크를 맞출 수 있지만 장애상황 재난복구 시에 모든 로그를 다시 적용해야 하기 때문에, 스냅샷 방식보다 복구되는 속도가 느리다.
Caching
- CPU 캐시: CPU와 RAM 속도 차이로 발생하는 지연을 줄이기 위해 캐시 사용
- 웹 브라우저 캐싱: 웹 브라우저가 웹 페이지 데이터를 로컬 저장소에 저장하여 해당 페이지 재방문 시 사용
- DNS 캐싱: 이전에 조회한 도메인 이름과 해당 IP 주소를 저장하여 재요청 시 사용
- DB 캐싱: DB 조회나 계산 결과를 저장하여 재요청 시 사용
- CDN: 원본 서버의 컨텐츠를 PoP 서버에 저장하여 사용자와 가까운 서버에서 요청 처리
- 이미지/동영상 등 용량이 큰 파일을 PoP 서버에 저장해두고, 사용자가 요청을 보냈을 때 가장 가까운 PoP 서버에 있는 파일을 응답값으로 보내줌으로써 네트워크 지연 시간을 줄임
- 어플리케이션 캐싱: 어플리케이션에서 데이터나 계산 결과를 캐싱하여 반복 작업 최적화
Redis 설치 및 실행
- MacOS 기준
- HomeBrew 기준(없다면 설치)
- Redis 설치
brew install redis
정상적으로 설치가 되면 아래와 같이 restart at login 메시지가 뜬다.
- Redis 실행
brew services start redis
MacOS 유저는 brew 명령어를 통해 실행 가능하고, 백그라운드에서 실행된다.
- Redis 종료
brew services stop redis
- redis-cli를 통해 localhost 6379 포트를 열고, PING 날려보기
Redis를 실행하고 cli를 통해 로컬 테스트를 진행할 수 있다.
'DevOps > DevOps' 카테고리의 다른 글
[DevOps] 멀티모듈 프로젝트 CI/CD 적용 - 설계 구상 편 (3) | 2024.07.22 |
---|---|
[Redis] Redis 4편. 운영 방식과 호스팅 (0) | 2024.01.08 |
[Redis] Redis 3편. Spring Boot와 Redis | Lettuce, RedisTemplate, RedisRepository (1) | 2024.01.08 |
[Redis] Redis 2편. 기본 자료형 (0) | 2024.01.04 |