Intro
지난 글에서는 IMDB(In-Memory DataBase)의 정의와 특성 그리고 종류에 대해 다뤄봤습니다. 이번 글에서는 Redis의 다양한 Operation Model 중 Stand Alone에 대해 글을 써보려 합니다.해당 글은 Ubuntu 18.04 및 Redis 5.x 버전에 맞게 작성되어있습니다.
Stand Alone 구조란?
Stand Alone 구조는 Redis의 가장 기본적인 Operation Model입니다. 단 하나의 Master 단일 노드로 구성됩니다.
설치 과정
- 설치를 위해 필요한 패키지 사전 설치
root@jsm-redisTechBlog:~# apt-get install build-essential pkg-config gcc tcl libsystemd-dev -y
- Redis 소스 다운로드 및 압축해제
root@jsm-redisTechBlog:~# wget https://download.redis.io/releases/redis-5.0.10.tar.gz root@jsm-redisTechBlog:~# tar xvzf redis-5.0.10.tar.gz
- Redis Make install
root@jsm-redisTechBlog:~# cd ./redis-5.0.10 root@jsm-redisTechBlog:~/redis-5.0.10# make distclean root@jsm-redisTechBlog:~/redis-5.0.10# make USE_SYSTEMD=yes root@jsm-redisTechBlog:~/redis-5.0.10# make install
- Redis dir 생성
root@jsm-redisTechBlog:~/redis-5.0.10# mkdir /etc/redis root@jsm-redisTechBlog:~/redis-5.0.10# mkdir /var/log/redis root@jsm-redisTechBlog:~/redis-5.0.10# mkdir /var/lib/redis root@jsm-redisTechBlog:~/redis-5.0.10# mkdir /var/run/redis
- redis.service 등록
root@jsm-redisTechBlog:~/redis-5.0.10# cat >> /etc/systemd/system/redis.service <<EOF [Unit] Description=KT CLOUD REDIS After=network.target [Service] Type=notify User=root Group=root LimitNOFILE=65536 ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf ExecStop=/usr/local/bin/redis-cli shutdown TimeoutStartSec=900 TimeoutStopSec=900 RestartSec=5s Restart=on-success [Install] WantedBy=multi-user.target EOF root@jsm-redisTechBlog:~/redis-5.0.10# systemctl daemon-reload
- redis.conf 이동 및 수정
root@jsm-redisTechBlog:~/redis-5.0.10# cp ~/redis-5.0.10/redis.conf /etc/redis/redis.conf root@jsm-redisTechBlog:~/redis-5.0.10# cat >> /etc/redis/redis.conf <<EOF bind 0.0.0.0 port 6379 supervised systemd daemonize no pidfile "/var/run/redis/redis.pid" logfile "/var/log/redis/redis.log" loglevel notice syslog-enabled yes syslog-ident "REDIS" rdbcompression yes dbfilename "dump.rdb" dir "/var/lib/redis" EOF
- redis.service 실행 및 자동 실행 설정
root@jsm-redisTechBlog:~/redis-5.0.10# systemctl start redis root@jsm-redisTechBlog:~/redis-5.0.10# systemctl enable redis
위의 과정으로 기본적인 Stand Alone 형태의 redis server 구축이 완료되었습니다.
Client 접속 방법
위의 구축된 서버에 접속하기 위한 방법으로 redis-cli를 활용하는 방법과, 다양한 언어의 redis client 라이브러리를 활용하는 방법이 있습니다. 각 언어별 지원하는 client 라이브러리는 공식 페이지에서 확인할 수 있습니다.
언어 별 Client Library 목록 >> https://redis.io/clients
Redis-cli 이용 방법
위에서 설치했던 redis-server에서 redis-cli 커맨드를 통해 서버에 직접 접속할 수 있습니다. 서버에 접속하여, redis-server의 정보를 확인하고, 가장 기본적인 CRUD를 수행하는 과정은 다음과 같습니다.
- 서버 접속
root@jsm-redisTechBlog:~# redis-cli -h localhost -p 6379
- redis info
localhost:6379> info # Server redis_version:5.0.10 ...생략... # Clients connected_clients:1 ...생략... # Memory used_memory:854472 ...생략... # Persistence loading:0 ...생략... # Stats total_connections_received:3 ...생략... # Replication role:master ...생략... # CPU used_cpu_sys:0.516337 ...생략... # Keyspace
- CREATE
localhost:6379> set kt cloud OK
- READ
localhost:6379> get kt "cloud"
- UPDATE (+READ)
localhost:6379> set kt techBlog OK localhost:6379> get kt "techBlog"
- DELETE (+READ)
localhost:6379> del kt (integer) 1 localhost:6379> get kt (nil)
관련 라이브러리 소개 - Lettuce Library (Java Spring Boot)
Redis를 지원하는 수많은 라이브러리 중 Spring Boot의 Lettuce Library를 활용하여 위에서 구축한 redis server에 접속하는 과정입니다. 해당 과정에는 Spring Boot 2.5와, gradle 7.0.2, openJDK 11 버전을 사용하였습니다.
아래의 소스는 https://github.com/jeonsmin9449/jsmKtTechBlogDemo 에서도 확인하실 수 있습니다.
- build.gradle
프로젝트에 data-redis 의존성을 추가합니다.
plugins { id 'org.springframework.boot' version '2.5.0' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.jsm.kt.techblog' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.boot:spring-boot-starter-data-redis' testImplementation 'org.springframework.boot:spring-boot-starter-test' } test { useJUnitPlatform() }
- Code 작성
간단한 Connection 및 Command만 테스트하기 위해서, 별도의 MVC 등을 구축하지 않고, 테스트코드에 작성하였습니다. 이에 대한 실행 결과는 다음과 같습니다.import io.lettuce.core.RedisClient; import io.lettuce.core.RedisURI; import io.lettuce.core.api.StatefulRedisConnection; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class JsmKtTechBlogDemoApplicationTests { private String ip = "yourIPHere"; private int port = 6379; @Test void redisConnectionTest(){ RedisURI redisURI = RedisURI.builder() .withHost(ip) .withPort(port) .build(); RedisClient redisClient = RedisClient.create(redisURI); StatefulRedisConnection<String, String> connection = redisClient.connect(); //redis-cli> info String info =connection.sync().info(); System.out.println(info); //redis-cli> set kt cloud String result1 = connection.sync().set("kt", "cloud"); System.out.println(result1); //redis-cli> get kt String result2 = connection.sync().get("kt"); System.out.println(result2); //redis-cli> set kt techBlog String result3 = connection.sync().set("kt", "techBlog"); System.out.println(result3); //redis-cli> get kt String result4 = connection.sync().get("kt"); System.out.println(result4); //redis-cli> del kt Long result5 = connection.sync().del("kt"); System.out.println(result5); //redis-cli> get kt String result6 = connection.sync().get("kt"); System.out.println(result6); } }
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.5.0) ... ... 2021-06-07 18:03:36.820 INFO 3769 --- [ Test worker] .k.t.j.JsmKtTechBlogDemoApplicationTests : Started JsmKtTechBlogDemoApplicationTests in 5.982 seconds (JVM running for 6.743) # Server redis_version:5.0.10 생략... 생략... 생략... # Keyspace db0:keys=4,expires=0,avg_ttl=0 OK cloud OK techBlog 1 null BUILD SUCCESSFUL in 13s
마무리
이번 글에서는 Redis의 가장 기본적인 Operation Model인 Stand Alone을 직접 설치해보고,
redis-cli 및 라이브러리를 활용하여 접속하는 과정을 알아보았습니다.다만 Stand Alone은 단일 노드인 만큼, 장애 발생시 원활한 대처가 어렵습니다. 다음에는 이러한 단점들을 보완한 Operation Model인 'Master-Replica' 구조를 알아보고 이후에는 'Cluster'구조까지 알아보도록 하겠습니다.
끝까지 읽어주셔서 감사합니다.
KT Cloud 상품 소개
오늘 소개드린 Redis와 관련해서 KT Cloud에서 제공중인 서비스가 있어 알려드립니다. 바로 DBaaS for Redis 서비스입니다. Cloud 환경안에서 Redis를 손쉽고 간편하게 구축/관리할 수 있는 편의성을 제공해 드립니다.
아래 링크 참조해 주세요
https://cloud.kt.com/product/db/dbaas-for-redis/
관련글
1. KT Cloud Dev Tools - IMDB 기술 소개 - https://tech.ktcloud.com/58
'Tech story > Cloud' 카테고리의 다른 글
9월 2주차 Cloud IT산업 동향 (뉴스 큐레이션) (0) | 2022.09.13 |
---|---|
‘3高 시대’, 엔터프라이즈 비용 절감 Tip (feat. 클라우드 더불어 HAC ) (0) | 2022.08.26 |
5분이면 따라하는 kt cloud Open API 활용 팁#2 (0) | 2021.10.18 |
관리형 메시지 브로커 서비스 - Message Queue 신규 출시 (0) | 2021.10.12 |
Cloud에 관한 거의 모든 지식#5 (Cloud와 레그 테크) (0) | 2021.09.24 |