잘못된 내용이나 의견 있다면 편하게 말씀해주세요.🙏🏻
개발/테스트 목적의 단일 노드 Redis(Remote Dictionary Server)를 구축하는 5가지 방법을 소개합니다.
(1. 로컬, 2. docker-compose, 3. Embedded Redis, 4. Testcontainers, 5. AWS ElastiCache, Terraform)
운영 목적의 아키텍처(Replication, Sentinel, Cluster)는 아닙니다.
글 목록
현재글 : [Redis] 레디스를 5가지 방법으로 설치/구축하기 : 로컬, docker-compose
[Redis] 레디스를 5가지 방법으로 설치/구축하기 : Embedded Redis, Testcontainers
[Redis] 레디스를 5가지 방법으로 설치/구축하기 : AWS ElastiCache
[Redis] 레디스를 5가지 방법으로 설치/구축하기 : Terraform + AWS ElastiCache
이번 글에서는
Redis Server와 Redis Client를 이해하고 로컬과 docker-compose를 활용하고자 합니다.
전체 소스 코드는 이곳을 참고해주세요.
0. Redis Server와 Redis Client
먼저 레디스 서버 구축에 앞서 Redis Server와 Redis Client를 정의하고자 합니다.
Redis Server
말 그대로 현재 구축하고자 하는 Redis입니다.
특정 컴퓨터 자원에 Redis Server를 설치하고 Redis Client를 활용하여 Redis Server에 접속하여 사용합니다.
Redis Server 구축 방법은 운영 방식에 따라 Single Node / Replication / Sentinel / Cluster 등의 방식이 있습니다.
Redis Client 종류
redis-cli : Redis가 제공하는 터미널 클라이언트 프로그램
openssh / telnet : 유명한 툴로도 Redis에 접속할 수 있습니다.
각 언어의 redis client 라이브러리 : Java의 경우 Jedis, Lettuce
그 외 ...
1. 로컬 Redis 구축
로컬에 Redis 구축하는 방법은 간단합니다.
Redis Server
1. Redis Source 다운로드 & 컴파일
2. Redis Server 실행
Redis는 ANSI C로 구현되어 있기 때문에 각 OS에 맞는 C 컴파일러를 설치하고 컴파일하면 됩니다. (Redis 저장소, Install Redis Docs)
Mac의 경우 Source를 직접 컴파일하거나 brew를 사용하여 설치할 수 있습니다. (Install Redis on macOS - Docs)
아래는 brew로 설치한 예 입니다.
# 1. Redis Source 다운로드 & 컴파일
# brew가 설치되어있다는 가정하에 brew install redis 명령어로 redis를 설치합니다.
## 해당 명령을 실행하면 brew가 redis source를 다운받아 컴파일합니다.
## 컴파일 결과인 redis-server 실행 프로그램을 /usr/local/bin/redis-server에 설정해줍니다.
## 우리는 이제 손쉽게 redis-server를 실행시킬 수 있습니다.
> brew install redis
> which redis-server
/usr/local/bin/redis-server
설치가 끝나면 redis-server 명령으로 Redis Server를 foreground로 실행할 수 있습니다.
# 2. Redis Server 실행
> redis-server
13319:C 08 Dec 2022 22:27:26.220 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
# 생략
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 7.0.5 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 13319
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
# 생략
13319:M 08 Dec 2022 22:27:26.224 * Ready to accept connections
백그라운드 실행하려면 서비스 관리하는 프로세스에 redis-server을 작동시키면 됩니다.
Linux의 경우 systemctl이나 mac의 경우 brew를 사용할 수 있습니다.
# brew에 서비스 등록
> brew services start redis
# redis 백그라운드 실행중 확인
> brew services info redis
redis (homebrew.mxcl.redis)
Running: ✔
Loaded: ✔
Schedulable: ✘
User: kukim
PID: 13973
# 서비스 종료
> brew services stop redis
Stopping `redis`... (might take a while)
==> Successfully stopped `redis` (label: homebrew.mxcl.redis)
Redis Client : redis-cli
brew나 source를 컴파일하여 redis를 설치하면 기본적으로 redis-cli가 함께 설치되어 있습니다.
Redis Server를 실행시키고, redis-cli를 통해 Redis에 접속하여 redis 명령어를 활용하여 redis를 사용할 수 있습니다.
# redis-server # 레디스 서버 실행후 cli로 연결
> redis-cli
127.0.0.1:6379> set name kukim
OK
127.0.0.1:6379> get name
"kukim"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
마치며
로컬에서 설치하면 비교적 간단합니다. 하지만 OS마다 구축해야 하고 레디스를 사용할 때마다 직접 레디서 서버를 실행시켜야 하는 단점이 있습니다. 이를 위해 os에 독립적이고 비교적 간단히 실행시킬 수 있는 docker-compose로 Redis에 대해 알아보고자 합니다.
2. docker, docker-compose
docker-compose를 활용하여 Redis Server를 구축하는 방법은 다음과 같습니다.
1. docker-compose yml 파일 작성
2. docker-compose 실행
1. docker-compose yml 파일 작성
docker 이미지 구축이 잘되어있기에 아래와 같이 이미지, port 번호 정도만 설정합니다. (추가적으로 redis conf 파일을 추가하려면 이곳 코드를 참고해주세요)
# redis.yml
version: "3"
services:
redis:
container_name: redis-server
image: redis:7.0.5 # https://hub.docker.com/_/redis
restart: always
ports:
- "6379:6379"
2. docker-compose 실행
docker-compose up으로 컨테이너를 실행시킵니다. Redis Client는 도커에 설치된 redis cli로 확인할 수 있습니다.
# 도커 컴포즈를 활용하여 redis 컨테이너 실행
## 백그라운드 실행 시 -d 옵션 추가
docker-compose -f ./container/redis.yml up # -d
## 실행된 도커 프로세스 확인
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97213b72da1e redis:7.0.5 "docker-entrypoint.s…" 6 seconds ago Up 4 seconds 0.0.0.0:6379->6379/tcp redis-server
# 레디스 컨테이너가 실행된 뒤 redis-cli를 통해 레디스에 접속
docker exec -it redis-server redis-cli
$127.0.0.1:6379>
+a) telnet으로 접속하기
현재 로컬 도커에 redis가 실행중입니다. (127.0.0.1:6379)
telnet를 Redis Client로 사용하여 접속할 수 있습니다.
+a) 현재 redis에 대해 암호가 지정되어있지 않습니다. 암호가 지정된 경우 redis 접속 후 auth 명령을 통해 암호를 입력해야 사용할 수 있습니다.
# telnet [ip] [port]
> telnet 127.0.0.1 6379
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set name kukim
+OK
get name
$5
kukim
마치며
Redis Server와 Redis Client를 이해하고 로컬과 docker-compose를 활용하여 구축해보았습니다.
다음 글에서 embedded redis (Java/Spring)와 testcontainers 라이브러리를 활용 (Java/Spring) 하여 Redis 구축하는 방법에 대해 알아보려 합니다. 감사합니다.
글 목록
[Redis] 레디스를 5가지 방법으로 설치/구축하기 : 로컬, docker-compose
다음글 : [Redis] 레디스를 5가지 방법으로 설치/구축하기 : Embedded Redis, Testcontainers
[Redis] 레디스를 5가지 방법으로 설치/구축하기 : AWS ElastiCache + AWS Console
[Redis] 레디스를 5가지 방법으로 설치/구축하기 : Terraform + AWS ElastiCache
Reference
- docker-compose를 활용하여 redis 컨테이너 사용
- https://github.com/ku-kim/springboot-redis-example/pull/4
- Install Redis on macOS - Docs
'🏢 DB > 1️⃣ Redis' 카테고리의 다른 글
[간단 장애 회고] Redis + @Transactional (트랜잭션에서 Redis Get은 항상 null을 리턴한다. 트랜잭션 없는 상위 메서드에서 트랜잭션 있는 하위 메서드 호출은 에러다.) (2) | 2022.12.18 |
---|---|
레디스를 5가지 방법으로 설치/구축하기 : AWS ElastiCache (0) | 2022.12.09 |
레디스를 5가지 방법으로 설치/구축하기 : Embedded Redis, Testcontainers (0) | 2022.12.09 |
레디스를 학습하며 도움 받았던 레퍼런스 링크 모음 (0) | 2022.12.08 |
댓글