1. Redis란 무엇인가
정의
- Remote + Dictionary + Server
- Memory DB+NoSQL DB
- In-Memory Database(Cache): Database보다 빠른 Memory에 더 자주 접근하고 덜 자주 바뀌는 데이터를 저장
- 보편적인 메모리 기반의 Key-Value 형태인 데이터 관리
- 시스템, 비 관계형 데이터베이스
특징
- 자바 자료구조와 유사한 영속적인 자료구조를 제공한다.
- 성능은 서버에 따라 다르나 초당 2만-10만 회 수행한다.
- 데이터베이스로 사용될 수 있으며, cache로도 사용될 수 있는 기술이다.
- Cache: 나중에 요청 결과를 미리 저장했다가 빠르게 서비스해주는 것을 의미
- 여러 대의 서버 구성이 가능하다.
- 페이스북, 인스타그램, 네이버 LINE 서비스 , StackOverflow 등 대형 서비스 업체들이 사용자들의 대규모 메시지를 실시간으로 처리하기 위하여 사용하고 있다.
장점
- 리스트, 배열 데이터를 처리하는데 유용하며, 리스트 형 데이터 입력/삭제가 MySQL보다 훨씬 빠르다.
- 영속적인 데이터 보존이 가능하다.
- 단순한 구조의 데이터 모델인 key-value기반이기 때문에 쿼리를 따로 할 필요 없이 결과를 바로 가져올 수 있다
- 디스크에 데이터 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠르다.
- 다양한 API 지원한다.
Data Type
Strings | 기본적인 데이터형 Key에 하나의 데이터 저장 문자열 뿐만 아니라 이진 데이터 저장 가능 Set <Key> <Value> |
Lists | 배열, 링크드 리스트 |
Sets | 정렬되지 않은 집합형 한 Key에 중복된 데이터는 존재X |
Hashes | 객체를 나타내는데 사용하는 타입 필드명, 필드값의 연속으로 이루어짐 |
(Sorted) sets | Sets의 각 요소마다 Score 실수 값(숫자) 존재 한 Key에 중복된 데이터는 존재 X |
Redis 구성하는 방법
- Read 분산과 데이터 이중화를 위한 Master/Slave 구조
- Master 노드: 쓰기/읽기를 전부 수행, Slave는 읽기만 가능
- Replication: Master에 있는 데이터를 복제해서 Slave로 옮기는 작업이다.
2. 설치(In Ubuntu)
1) apt-get 업데이트
$ sudo apt-get update
$ sudo apt-get upgrade
2) 아래의 명령어로 설치
$ sudo apt-get install redis-server
3) 버전 확인
$ redis-server --version
4) redis.conf 파일에서 Redis가 사용할 수 있는 최대 메모리 사용량과 최대 사용 메모리를 초과 시 데이터 삭제 방법 정의하기
$ sudo nano /etc/redis/redis.conf
5) 설정 파일에서 maxmemory와 maxmemory-policy를 찾아서 다음과 같이 바꾼다.
최대 사용 메모리양: 1G
최대 사용 메모리를 초과할 시 가장 오래된 데이터 지우고 메모리 확보하여 가장 최근에 저장된 데이터 사용으로 설정
maxmemory 1g
maxmemory-policy allkeys-lru
6) 설정이 적용되도록 Redis를 재시작한다.
$ sudo systemctl restart redis-server.service
7) Redis의 기본포트는 6379이다. Redis가 6379 포트를 쓰고 있는지 확인한다.
$ netstat -nlpt | grep 6379
8) Redis 서버 접속
$ redis-cli
9) set을 사용해서 key - value로 데이터 입력
set [key] [value]
10) get [key]로 데이터 값을 찾아온다.
get [key]
11) 저장된 key 검색
keys *검색어*
12) 전체 key 조회
keys *
3. 보안관점
1) 인증 패스워드 설정
cat /etc/redis/redis.conf | grep -i requirepass
방법: 주석 해제하여 인증 패스워드 설정
2) 인가된 IP만 접근할 수 있도록 Binding 설정
cat /etc/redis/redis.conf | grep -i bind
방법: 필요한 IP를 bind에 등록하여 사용한다.
3) Slave 읽기 권한만 설정
cat /etc/redis/redis.conf | grep -i slave-read-only
cat /etc/redis/redis.conf | grep -i slave-read-only (redis 5.X 이상)
방법: yes로 설정, Default 설정이 yes이다.
4) rename-command CONFIG 설정
공유되는 환경에서는 위험한 command 이름을 변경할 수 있기 때문에 안전한 command를 사용하도록 해야 한다.
CONFIG가 빈칸이거나 이름을 변경하여 사용하고 있는 경우 안전하다.
cat /etc/redis/redis.conf | grep –i rename-command
방법: 주석으로 되어있는 경우, 설정이 안 되어있는 것이다. 주석 해제하기
"" 의미: CONFIG 명령을 사용할 수 없도록 설정
어려운 문자열 의미: CONFIG 명령을 예측하기 어려운 문자열로 변경한 것
5) 권한 설정
5-1) 데이터 디렉터리 권한 설정
데이터 디렉터리의 Other 권한이 부여되어 있는지 확인한다.
cat /etc/redis/redis.conf | grep -v "^#" | grep "^dir"
방법: 권한 750으로 변경
5-2) 설정 파일 권한 설정
설정파일이 소유자에게만 권한이 설정되어 있는지 확인한다.
ls -al /etc/redis/redis.conf
방법: 소유자(redis)에게만 권한 설정 부여
6) 로그 활성화
로그를 정기적으로 살펴보면서 침입 유무를 파악하기 위해서 로그를 활성화시켜야 한다.
slowlog-log-slower-than: 슬로우 로그 쿼리 수행 시간, Default은 10000
참고
https://codingmania.tistory.com/18
https://velog.io/@ayoung0073/database-redis
설치
'OS > Database' 카테고리의 다른 글
[DBMS] CouchDB 정의 및 특징 (552) | 2022.01.13 |
---|---|
[DBMS] PostgreSQL 정의 및 설치방법, 보안관점 (1715) | 2021.11.25 |
[DBMS] Oracle 정의 및 특징 (426) | 2021.06.15 |
[DBMS] SQLite 정의 및 사용법(with Docker) (303) | 2021.06.15 |
[DBMS] InfluxDB 정의 및 사용법(with Docker) (450) | 2021.06.02 |