[Redis] Redis 개념, AWS EC2환경에서 설치하기

MyoungSeok Lee
11 min readJan 27, 2020

--

해당 게시물은 학습 및 기록 목적으로 작성되었습니다. 사실과 다른 내용이 있을 수 있으며, 오류가 있거나 궁금한 점은 댓글이나 dlaudtjr07@gmail.com 으로 메일 주시면 감사하겠습니다.

Redis 란?

레디스(Remote Dictionary Server)는 Key-Value의 비정형 데이터로 구성해 저장 , 관리하기 위한 오픈소스 비관계형 데이터베이스 관리 시스템입니다. 2015년부터 Redis Labs가 지원하고 있으며, 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 DBMS입니다. BSD 라이센스를 따르며, DB-Engines.com 월간 랭킹에 따르면 Redis는 가장 인기 있는 Key-Value 저장소입니다.

출처 : Wikipedia-Redis

관계형 데이터베이스는 SQL 쿼리를 사용해 테이블 간 데이터를 연결시키는 반면에 , Redis는 SQL이 없는 비 관계형 데이터베이스입니다. Redis에는 테이블이 없으며 Redis의 데이터를 Redis의 다른 데이터와 연결시키는 방법이 존재하지 않습니다.

Redis는 Memcached와 같은 인 메모리(In-Memory) 기반 솔루션인데, Memcached가 가지고 있는 장점만을 쏙쏙 뽑아 만든 소프트웨어입니다.

Redis는 두 가지 방식의 디스크 데이터 쓰기 기능을 지원하며, Memcached에서 서비스하는 일반 문자열 키 데이터 저장 방식을 포함한 5가지 구조의 데이터를 추가적으로 저장할 수 있습니다. 이러한 특징들로 광범위한 이슈들을 해결할 수 있으며, Redis를 기본 DB나 다른 저장 시스템과 함께 사용하는 보조 DB로 활용이 가능합니다.

간단하게 정리하자면, Redis는 메모리 기반 비 관계형 Key-Value 데이터베이스입니다.

Redis의 장점

Redis의 장점으로는 아래와 같습니다.

1. List , Array 데이터를 처리하는 데 효과적이다

String, List, Set, Hash , Sorted sets 등 여러 데이터 포맷을 지원함으로써 다양 방식의 데이터 활용이 가능합니다. 또한 MySQL에 비해 List형 데이터 CUD가 상당히 빠릅니다.

2. 원자성 보장을 위한 처리 함수를 제공한다

여러 프로세스에서 같은 데이터를 요청 시 , Atomic 처리를 하기 위한 전용 함수를 제공합니다. 데이터베이스 트랜잭션 특징 중 하나인 원자성(Atomicity)보장을 위한 기능이라고 생각하시면 됩니다.

3. 메모리를 활용하면서도 영속적인 데이터를 보존한다

스냅샷 기능을 제공하며, 메모리의 데이터를 rdb 확장자명 파일로 저장해 해당 시점으로 복구가 가능하며 명시적 삭제 요청이 없는 한 데이터가 삭제되지 않습니다.

4. Redis Server는 1개의 Single Thread로 수행된다

말 그대로 Redis 서버 하나당 1개의 쓰레드를 이용함으로써, 메인 서버 하나에 여러개의 Redis 서버를 서비스하는 것이 가능합니다. (Master Slave 형식으로 구성함으로써 데이터 분실 위험을 없애줍니다)

EC2 환경에서 Redis 설치 및 테스트하기

주의 ! 이번 단락은 AWS EC2의 기본 개념과 생성법을 알고 있다고 가정하고 설명합니다. EC2 기본 개념과 생성법을 모르는 분은 밑의 링크를 참고해 주시기 바랍니다.

바로 가기 : [Amazon Web Service] 웹 서비스 아키텍쳐 — EC2

사실 AWS에는 AWS 내부에서 Redis를 이용할 수 있게 하는 ElastiCache 라는 서비스가 존재합니다. 하지만 이번 게시물에서는 Linux 기반 EC2 환경 내부에서 직접 Redis를 설치해 보도록 합시다.

기본적으로 Redis는 Linux 환경에서 이용하는것을 권장하는데, Linux PC를 이용하거나, 가상 환경을 이용합니다. 하지만 보통 사람들은 Linux PC를 가지고 있지 않기 때문에, 우리는 가상 환경을 이용해야만 하는데, 그 중에서 아마존에서 서비스하는 EC2 서버를 이용해 볼 예정입니다. 이번 단락에서는 기본적으로 Linux 기반 EC2 환경이 구축되어져 있다는 가정 하에 실습합니다.(필자는 Ubuntu LTS 18.02 버전을 이용)

키 페어를 이용해 EC2 환경에 접속합니다. 접속이 정상적으로 이루어지면 아래 화면과 같이 리눅스 가상 환경에 진입한 것을 확인할 수 있습니다.

1. EC2를 이용한 Redis 설치

이제 우리가 수행할 과정은 다음과 같습니다.

  1. 저장소 업데이트 및 업그레이드

기본적으로 ubuntu 에서 패키지를 관리하는 방법은 apt 명령어를 이용합니다. (CentOS는 보통 yum을 이용) 기본적으로 다들 아실테지만,

sudo apt-get update

sudo apt-get upgrade

이 명령어를 이용해 패키지를 최신 버전으로 바꾸어 줍시다. 그 다음

sudo apt-get install redis-server

명령어로 Redis 서버를 설치합니다.

2. EC2를 이용한 Redis 설치

의존성 파일 설치 여부 확인입니다. Y를 누르고 진행합니다. (동의하지 않으면 설치가 되지 않음)

3. EC2를 이용한 Redis 설치

설치 완료 후 redis-server — version 명령어로 버전을 확인합니다. 필자의 Redis 버전은 4.0.9 입니다.

설치 후 Redis에서 메모리를 얼마나 이용할 지 설정을 해 주어야 합니다.

보통 AWS 프리 티어를 이용한다면 EC2 서버의 메모리 양은 1G입니다.

vmstat -s

로 확인해 봅니다.

4. EC2를 이용한 Redis 설치

다른거 다 제치고 맨위에 total memory를 확인하시면 1G로 할당되어져 있는 것을 확인하실 수 있습니다.

저 메모리를 다 이용하면 다른 작업을 수행할 수 없겠죠. Redis 할당량을 500mb로 설정해봅시다.

sudo vim /etc/redis/redis.conf

명령어로 conf 파일에 접근합니다.(vim 이 아닌 다른 텍스트 편집기 접근도 상관없습니다)

maxmemory (559 Line)

5. EC2를 이용한 Redis 설치

maxmemory-policy (590 Line)

6. EC2를 이용한 Redis 설치

이 부분을 수정해 주어야 합니다. (vim 기준 /찾을단어 입력 후 엔터-> n키로 찾기)

maxmemory는 최대 메모리 사용량을 지정해 주는 설정으로, 기본적으로 64bit 환경은 0, 32bit 환경은 3GB로 설정되어져 있습니다.

maxmemory-policy는 메모리 정책이며, 기본적으로 noeviction으로 설정되어져 있습니다. (캐시를 지우지 않는 정책)

559번 Line은 maxmemory 500m

7. EC2를 이용한 Redis 설치

590번 Line은 LRU 알고리즘(제일 오랫동안 사용하지 않은 데이터를 제거하는 알고리즘)을 기반으로 키를 삭제하는

maxmemory-policy allkeys-lru

8. EC2를 이용한 Redis 설치

정책으로 수정해 줍니다.

그 다음은 외부에서 접속을 허용하기 위해 bind 설정을 변경해 주어야 합니다.

bind (69번 Line)

9. EC2를 이용한 Redis 설치

지금은 실습 용이기 때문에 0.0.0.0으로 모든 접속을 허용해 주고, :wq 명령어로 저장 후 나가도록 합시다.

conf 수정이 완료되었습니다. redis 서버가 실행되고 있는지 확인 후 , redis를 재시작해 봅시다.

systemctl status redis-server.service

systemctl restart redis-server.service

11.EC2를 이용한 Redis 설치

다음은 다른 서버에서 redis에 접근해 봅시다. 필자는 EC2 인스턴스를 하나 더 생성해 접근하는 방식을 선택했습니다.

12. EC2를 이용한 Redis 설치

Redis 서버가 외부에서 접속 가능한지의 여부를 확인해야 합니다. 우선 redis.conf 파일을 다시 들어가 비밀번호를 설정하는 requirepass 설정을 수정해 주어야 합니다.

requirepass(500번 Line)

13.EC2를 이용한 Redis 설치

foobared라고 적혀져 있는 부분을 지우고, 사용할 비밀번호를 입력합니다.

14.EC2를 이용한 Redis 설치

저장 후 나옵니다.

netstat -nlpt

레디스 서버가 설치된 서버에 명령어를 입력해 6379 포트의 접속 권한을 확인합니다.

15.EC2를 이용한 Redis 설치

0.0.0.0로 활짝 열려져 있는 것을 확인했습니다. 이제 다른 서버에서 클라이언트로 접속해 봅시다. 기본적으로 클라이언트는 redis-server 혹은 redis-cli 가 설치 되어져 있어야 접근할 수 있습니다.

sudo apt-get install redis-tools

명령어로 redis-cli 를 설치합니다. 아, 설치 전에

sudo apt-get update

sudo apt-get upgrade

명령어로 패키지 최신화를 시켜줘야 명령어가 듣습니다. 패치 안하시면 명령어 안먹습니다.

redis-cli -h <접속할 서버 프라이빗ip> -p<설정 포트> -a <비밀번호>

명령어로 접속합니다.

16. EC2를 이용한 Redis 설치

프라이빗 아이디는 EC2 인스턴스 구성 설명에 나와있고, EC2 인스턴스 접근 시 초기 접속 화면에도 출력됩니다.

17. EC2를 이용한 Redis 설치

우측 하단에 IP address for eth0 이 프라이빗 IP입니다.

그 다음 비밀번호를 입력해 redis 서버에 접속합니다.

auth <Server 비밀번호>

18. EC2를 이용한 Redis 설치

Redis 서버 접속에 성공했습니다. 비밀번호를 치실 때 보셨겠지만 명령어 입력 시 그 다음 입력으로 무엇을 입력해야 하는지 가이드가 잡혀져 있습니다.

19. EC2를 이용한 Redis 설치

이렇게 회색 글씨로 가이드가 잡혀져 있는 것을 확인하실 수 있습니다.

기본 명령어를 타이핑해 제대로 동작하는지 테스트 해보겠습니다.

set <Key> <Value>

명령어를 통해 Key , Value 값을 넣어 봅시다.

20.EC2를 이용한 Redis 설치

다음, Key를 이용해 Value 값을 끄집어 내 봅시다.

get <Key>

명령어를 통해 값을 출력할 수 있습니다.

21. EC2를 이용한 Redis 설치

하나 더 넣어봅시다. Key나 Value값을 따옴표로 묶으면 띄어쓰기도 가능합니다. 다만 get으로 찾을 시에도 따옴표로 묶어 주어야 합니다.

22. EC2를 이용한 Redis 설치
23. EC2를 이용한 Redis 설치

모든 키를 찾아봅시다.

keys *<찾고자 하는 값>*

명령어로 찾을 수 있습니다. 모든 키를 찾을 시에는 *로 찾을 수 있습니다.

24. EC2를 이용한 Redis 설치
25. EC2를 이용한 Redis 설치

정상적으로 동작하네요. 이렇게 EC2에 Redis 설치가 완료되었습니다.

다음 게시물에서는 GUI 환경인 Redis Desktop Manager를 통해 Redis를 설치해 보겠습니다.

주의 !! EC2를 이용하면서 탄력적 IP가 2개 이상 설정되어져 있으면 반드시 1개를 제외한 모든 EIP는 릴리스(삭제)시켜 주어야 시간당 과금이 진행되지 않습니다. 이 점 참고해 주세요.

해당 글은 코드프레소 DevOps Roasting 코스를 수강하면서 작성한 글입니다.

--

--