23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
레디스 공부를 위해 자료를 찾다보면 항상 거쳐가는 https://redis.io/에서는 레디스를 오픈소스, 인메모리 데이터 저장소라고 정의하고 있습니다.
용도로 정리해보면 데이터베이스, 캐시, 스트리밍엔진, 메시지브로커로 사용됩니다.
인메모리 데이터 저장소라고 보기에는 용도가 너무 많아 보입니다.
심지어 각 용도별로 전혀 접점이 없어보이기도 하고 너무 성격이 다르기도 합니다.
감이 잘 안집힐 때 가장 쉽게 접근하는 방법은 씹고 뜯고 맛보는(?).
즉, 스스로 이것저것 만져보면서 지지고 볶아보는게 가장 빠른 지름길입니다.
그럼 출발합니다.
레디스를 설치하는 방법은 크게 소스코드를 직접 컴파일하여 설치하는 방법과 패키지 관리자를 통해 설치하는 방법이 있습니다.
물론 레디스를 설치할 운영체제에 따라 설치 방법이 조금씩 다릅니다.
이 포스팅에서는 리눅스 운영체제중 하나인 CentOS 7에 레디스를 컴파일하여 설치하는 방법을 알아보도록 하겠습니다.
레디스를 설치하기 위해 필요한 사전 작업을 확인하겠습니다.
레디스를 설치할 운영체제 선택 : 이미 Centos 7 선택
레디스 버전선택 : 7.0.2, 6.2.12 (이미 받아둔..)
레디스 소스코드 다운로드 : https://redis.io/download/에서 원하는 버전 선택.
리눅스 커널 설정 : 먼저 설치를 진행할 예정이며 커널 설정은 설치 후 진행해도 무방하므로 다음 포스팅에서 자세히 알아보겠습니다.
레디스는 구성에 따라 단일모드, Master-Slave 복제모드, Cluster 모드로 구분할 수 있습니다.
간단한 설치 및 개발에는 단일모드로 사용하고 읽기 성능 확장이 필요할 때는 Master-Slave 복제모드, 대규모 데이터를 운용하기 위한 Cluster 모드입니다.
각 구성별로 레디스 노드의 개수가 달라지는데 세부 내용은 아래 표를 참고시면 됩니다.
모드 | 최소 노드 개수 | 노드 증설개수 | 주 용도 |
|---|---|---|---|
Single | 1 | - | 개발환경 |
Master-slave | 2 | 1 | Read 부하 분산 |
Cluster | 6 | slave node(여기서는 3) | Read 부하 분산, Auto HA |
아래와 같이 애플리케이션이 하나의 Redis에 데이터를 읽고 쓰게 됩니다.
이해하기에도 큰 무리가 없고 생각하는 것과 동일하게 동작합니다.
두개의 레디스 노드가 필요하며 하나는 Master, 다른 하나는 Slave로 구성됩니다.
데이터를 쓸 때는 Master를 사용하고 데이터를 읽을 때는 Slave를 사용합니다.
상황에 따라 읽기 성능을 늘리기 위해서 Slave 노드를 더 추가하기도 합니다.
물론 대부분 라이브러리는 알아서 Master slave 를 Detect하여 읽기와 쓰기를 구분하여 명령을 전달합니다.
라이브러리가 해당 기능을 지원하지 않는다면 데이터를 읽을때는 Slave, 데이터를 쓸때는 Master로 명령을 전달하도록 하는 로직이 들어가야 합니다.
아. 물론 Springboot같은 경우는 알아서 처리해줍니다.
레디스 클러스터는 기본 6개의 노드로 구성됩니다. 즉, 클러스터 구성을 위한 최소 단위는 6개 입니다.
클러스터 내부적으로는 3개의 Master와 마스터에 각각 연결된 3개의 Slave로 구성됩니다.
이때 클러스터를 지원하는 라이브러리를 사용하면 위 Master-Slave구성과 같이 자동으로 Master와 Slave에 데이터를 읽고 쓸수 있습니다.
물론 지원하지 않는다면 해당 기능도 직접 구현해야 합니다만 Springboot같은 경우는 알아서 처리해줍니다.
SpringBoot 만세.
레디스 설치를 위한 Centos7은 이미 설치되어 있는걸 사용하므로 건너뛰도록 하고
레디스 설치를 위한 파일을 다운로드 받도록 하겠습니다.
참고로 필자는 Virtualbox, Vagrant를 사용하여 Centos를 구성했습니다.
https://download.redis.io/releases/redis-6.2.12.tar.gz 파일을 내려 받으면 되는데 터미널에서 wget 명령어를 사용하여 내려받을 수 있습니다.
[vagrant@localhost work]$ wget https://download.redis.io/releases/redis-6.2.12.tar.gz
--2023-06-04 14:34:43-- https://download.redis.io/releases/redis-6.2.12.tar.gz
Resolving download.redis.io (download.redis.io)... 45.60.125.1
Connecting to download.redis.io (download.redis.io)|45.60.125.1|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2494460 (2.4M) [application/octet-stream]
Saving to: ‘redis-6.2.12.tar.gz’
100%[======================================>] 2,494,460 1.85MB/s in 1.3s
2023-06-04 14:34:46 (1.85 MB/s) - ‘redis-6.2.12.tar.gz’ saved [2494460/2494460]파일을 내려받았다면 tar 명령으로 압축을 풀어줍니다.
[vagrant@localhost install]$ tar xvf redis-6.2.12.tar.gz
redis-6.2.12/
redis-6.2.12/.github/
redis-6.2.12/.github/ISSUE_TEMPLATE/
redis-6.2.12/.github/ISSUE_TEMPLATE/bug_report.md
redis-6.2.12/.github/ISSUE_TEMPLATE/crash_report.md
redis-6.2.12/.github/ISSUE_TEMPLATE/feature_request.md
redis-6.2.12/.github/ISSUE_TEMPLATE/other_stuff.md
...압축이 해제 되었으면 다음으로 컴파일을 수행하여 redis-server 실행파일을 만들어줍니다.
혹시라도 컴파일이 진행되지 않으면 gcc가 설치되어 있는지 확인하면 됩니다. 제 Centos7에는 4.8.5-44가 설치되어 있네요.
먼저 설치된 GCC 버전을 확인해 봅시다.
참고로 레디스 6.2.X 이상이면 gcc 4.8로 컴파일 가능합니다.
[vagrant@localhost work]$ gcc --version <== GCC 버전확인
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.컴파일을 수행하기 위해 압축이 해제된 폴더로 이동합니다.
컴파일을 수행하는 명령은 make입니다.
GCC 버전이 확인되었으니 GCC를 사용하여 컴파일을 수행해 봅시다.
[vagrant@localhost install]$ cd redis-6.2.12/ <== 압축 해제 폴더로 이동
[vagrant@localhost redis-6.2.12]$ make <== 컴파일 수행
cd src && make all
make[1]: Entering directory `/work/install/redis-6.2.12/src'
CC Makefile.dep
make[1]: Leaving directory `/work/install/redis-6.2.12/src'
make[1]: Entering directory `/work/install/redis-6.2.12/src'
rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-rdb red
...
...
CC cli_common.o
LINK redis-cli
CC redis-benchmark.o
LINK redis-benchmark
INSTALL redis-check-rdb
INSTALL redis-check-aof
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory `/work/install/redis-6.2.12/src'컴파일이 정상적으로 완료되면 위와 같이 make test 명령을 수행해보라는 가이드가 출력됩니다.
이로써 레디스를 설치할 준비가 완료되었습니다. 다음으로 각 모드별 구성을 진행해보겠습니다.
먼저 모드별 구성을 위해 각각의 구성을 수행할 폴더를 만들어줍니다.
[vagrant@localhost work]$ mkdir redis-single <== 단일모드
[vagrant@localhost work]$ mkdir redis-master <== Master-Slave 모드
[vagrant@localhost work]$ mkdir redis-cluster <== 클러스터 모드
[vagrant@localhost work]$ ll
total 0
drwxrwxr-x. 3 vagrant vagrant 53 Jun 4 14:40 install
drwxrwxr-x. 2 vagrant vagrant 6 Jun 4 14:50 redis-cluster <== 클러스터 버전 설치
drwxrwxr-x. 2 vagrant vagrant 6 Jun 4 14:50 redis-master <== Master, slave 버전 설치
drwxrwxr-x. 2 vagrant vagrant 6 Jun 4 14:50 redis-single <== 단일노드 버전 설치레디스를 설치하기 위해 먼저 파일을 복사해오도록 하겠습니다.
레디스 실행에 필요한 최소 파일은 redis-server, redis-cli, redis.conf 세개 입니다.
redis.conf 파일을 제외한 파일은 컴파일을 완료하면 생성되며 생성 위치는 src 폴더입니다.
bin폴더를 생성하고 세 파일을 복사하도록 하겠습니다.
[vagrant@localhost redis-6.2.12]$ mkdir bin
[vagrant@localhost redis-6.2.12]$ cp redis.conf bin/
[vagrant@localhost redis-6.2.12]$ cp src/redis-server src/redis-cli bin/
[vagrant@localhost redis-6.2.12]$ ll bin
total 14308
-rwxrwxr-x. 1 vagrant vagrant 5004288 Jun 4 15:17 redis-cli
-rw-rw-r--. 1 vagrant vagrant 93849 Jun 4 15:16 redis.conf
-rwxrwxr-x. 1 vagrant vagrant 9547872 Jun 4 15:17 redis-serverbin 폴더의 세 파일을 이전에 생성한 redis-single, redis-master, redis-cluster 폴더에 복사해줍니다.
레디스 단일구성 서버를 실행시키는 가장 간단한 방법은 아래와 같이 redis-server명령을 실행시키는 것입니다.
[vagrant@localhost redis-single]$ ./redis-server
24787:C 04 Jun 2023 15:21:11.506 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
24787:C 04 Jun 2023 15:21:11.506 # Redis version=6.2.12, bits=64, commit=00000000, modified=0, pid=24787, just started
24787:C 04 Jun 2023 15:21:11.506 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf
24787:M 04 Jun 2023 15:21:11.507 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
24787:M 04 Jun 2023 15:21:11.507 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted.
24787:M 04 Jun 2023 15:21:11.507 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
24787:M 04 Jun 2023 15:21:11.507 * monotonic clock: POSIX clock_gettime
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 6.2.12 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 24787
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | https://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
24787:M 04 Jun 2023 15:21:11.508 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
24787:M 04 Jun 2023 15:21:11.508 # Server initialized
24787:M 04 Jun 2023 15:21:11.508 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
24787:M 04 Jun 2023 15:21:11.508 * Ready to accept connections이 상태로는 상용 서비스의 데이터 저장용 레디스로 사용하기 어렵습니다.
현재 상태는 설정파일 없이 레디스가 제공하는 기본값으로 실행되었기 때문입니다.
또한 이 구성으로는 원격지에서 레디스에 접속할 수 없으며 포트는 기본포트인 6379를 사용합니다.
단, 레디스가 실행중인 서버에서는 접속할 수 있습니다.
먼저 설정파일을 적용하고 원격에서 레디스에 접속할 수 있도록 설정을 변경해보겠습니다.
먼저 redis.conf 파일을 열어봅시다.
[vagrant@localhost redis-single]$ vi redis.conf
# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# ./redis-server /path/to/redis.conf
# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.
################################## INCLUDES ###################################
# Include one or more other config files here. This is useful if you
# have a standard template that goes to all Redis servers but also need주석이 잔뜩 나오고 실제 적용되는 라인은 찾기가 어렵습니다.
우리는 모두 귀차니즘의 노예이니 필요한 라인만 추출한 설정파일을 만들어서
원격에서 접속 가능하고 접속 포트를 17890으로 바꾸도록 적용해 봅시다.
그 전에 Centos가 실행중인 서버의 IP를 확인해야 합니다.
[vagrant@localhost redis-single]$ ifconfig | grep inet
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::5054:ff:fe4d:77d3 prefixlen 64 scopeid 0x20<link>
inet 192.168.56.104 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::a00:27ff:fe98:b824 prefixlen 64 scopeid 0x20<link>제가 사용중인 Centos의 IP는 192.168.56.104로 나오네요.
먼저 redis-new.conf 파일을 vi로 열어서 아래와 같은 두 줄을 추가해줍니다.
추가가 완료되었으면 파일을 저장하고 vi를 빠져 나옵니다.
[vagrant@localhost redis-single]$ vi redis-new.conf
bind 192.168.56.104
port 17890설정파일이 만들어졌으니 redis-new.conf 설정파일을 이용해서 레디스를 다시 구동해 봅시다.
[vagrant@localhost redis-single]$ ./redis-server ./redis-new.conf
[vagrant@localhost redis-single]$ ./redis-server ./redis-new.conf
25186:C 04 Jun 2023 15:34:10.353 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
25186:C 04 Jun 2023 15:34:10.353 # Redis version=6.2.12, bits=64, commit=00000000, modified=0, pid=25186, just started
25186:C 04 Jun 2023 15:34:10.353 # Configuration loaded
25186:M 04 Jun 2023 15:34:10.354 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
...
...
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 17890
| `-._ `._ / _.-' | PID: 25186로그를 통해서 위 설정파일에서 지정한 포트를 사용하고 있는것이 보입니다.
redis 클라이언트를 사용하여 해당 서버에 접속하고 서버 정보를 확인해 봅시다.
[vagrant@localhost redis-single]$ ./redis-cli -p 17890 <== 17890포트로 접속 시도
Could not connect to Redis at 127.0.0.1:17890: Connection refused <== 접속실패
not connected>
[vagrant@localhost redis-single]$ ./redis-cli -p 17890 -h 192.168.56.104 <== ip와 포트를 같이 지정하여 접속시도
192.168.56.104:17890> <== 접속성공
192.168.56.104:17890> info server <== 서버 정보
# Server
redis_version:6.2.12
...
...
os:Linux 3.10.0-1160.83.1.el7.x86_64 x86_64
arch_bits:64
...
...
executable:/work/redis-single/./redis-server <== 실행파일 정보
config_file:/work/redis-single/./redis-new.conf <== 설정파일 정보
io_threads_active:0첫 번째 접속에서 실패 메시지가 출력되었고 아이피를 지정하여 접속을 시도하여 성공 했습니다.
접속에 성공하면 접속한 레디스의 IP와 포트가 출력된 프롬프트가 나타납니다.
접속된 레디스의 서버 정보를 확인하기 위해 아래 명령어를 입력 했습니다.
info server
레디스 버전과 운영체제 정보, CPU 아키텍처, 실행파일 정보와 설정파일 정보가 출력됩니다.
정상적으로 설치 되었으며 잘 동작하는것 같습니다.
이제 레디스 단일노드의 구성이 완료되었습니다.
추가적으로 필요한 설정이 있다면 redis.conf 파일을 참조하여 redis-new.conf 파일에 기술하고 재시작하면 됩니다.
다음으로 레디스 master-slave 구성을 진행해 봅시다.
레디스 Master와 Slave 구성을 위해 레디스 최소 파일을 두개의 폴더에 복사해줍니다.
Master 노드와 Slave 노드에 해당되는 폴더를 만들고 해당 파일을 복사하겠습니다.
[vagrant@localhost redis-master]$ mkdir master-node slave-node
[vagrant@localhost redis-master]$ cp ../install/redis-6.2.12/bin/* master-node/
[vagrant@localhost redis-master]$ cp ../install/redis-6.2.12/bin/* slave-node/레디스 Master Slave 노드를 실행할 master-node, slave-node폴더를 만들고 세 개의 필수 파일을 복사했습니다.
이제 설정 파일을 수정해 보도록 하겠습니다. 먼저 Master노드 설정입니다.
Master 노드를 실행할 폴더인 master-node로 이동하여 새로운 redis-new.conf 파일을 생성합니다.
[vagrant@localhost master-node]$ vi redis-new.conf
bind 192.168.56.104
port 27890Master 노드는 단일노드와 동일하게 외부 접속 아이피와 포트만 지정했습니다.
포트는 단일노드 설정과 분리하기 위해서 27890으로 설정 했습니다.
이제 redis-new.conf 설정으로 Master 노드를 시작시키고 로그를 확인합니다.
[vagrant@localhost master-node]$ ./redis-server redis-new.conf
13568:C 06 Jun 2023 09:08:22.576 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
13568:C 06 Jun 2023 09:08:22.576 # Redis version=6.2.12, bits=64, commit=00000000, modified=0, pid=13568, just started
...
...
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 27890
| `-._ `._ / _.-' | PID: 13568
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | https://redis.io Master 노드가 정상 동작하는지 접속해서 확인해봅시다.
[vagrant@localhost master-node]$ ./redis-cli -p 27890 -h 192.168.56.104
192.168.56.104:27890> info server
# Server
redis_version:6.2.12
...
...
redis_mode:standalone
...
...
tcp_port:27890Master 노드는 27890포트로 정상 작동 하는군요.
다음으로 Slave 노드를 구성해 봅시다.
Slave 노드를 실행할 폴더인 master-node로 이동하여 새로운 redis-new.conf 파일을 생성합니다.
[vagrant@localhost slave-node]$ vi redis-new.conf
bind 192.168.56.104
port 27891
replicaof 192.168.56.104 27890위 설정은 Master 구성과 두 부분이 다른데 하나는 port 부분이고 나머지는 replicaof 설정입니다.
포트는 Slave 노드가 사용할 포트와 Master 포트를 구분하기위해서 다르게 지정했고 replicaof 설정은 내가 바라볼 Master 노드의 정보입니다. 즉, Slave 노드는 '192.168.56.104아이피의 27890포트에서 동작중인 마스터노드의 복제 노드다'라는 의미입니다.
설정이 완료되었으면 Slave 노드를 시작해 봅시다.
[vagrant@localhost slave-node]$ ./redis-server ./redis-new.conf
14312:C 06 Jun 2023 09:40:31.538 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
14312:C 06 Jun 2023 09:40:31.538 # Redis version=6.2.12, bits=64, commit=00000000, modified=0, pid=14312, just started
14312:C 06 Jun 2023 09:40:31.538 # Configuration loaded
14312:S 06 Jun 2023 09:40:31.538 # You requested maxclients of 10000 requiring at
...
...
14312:S 06 Jun 2023 09:40:31.539 * Ready to accept connections
14312:S 06 Jun 2023 09:40:31.541 * Connecting to MASTER 192.168.56.104:27890
14312:S 06 Jun 2023 09:40:31.541 * MASTER <-> REPLICA sync started다른 레디스 노드가 시작할 때와 마찬가지로 레디스 로고가 올라가고 "Ready to accept connection"이 출력됩니다. 그 이후에 "Connecting to MASTER 192.168.56.104:27890"로그가 출력되면서 Master 노드에 접속하여 데이터를 복제하기 시작한다는 로그가 출력됩니다.
이제 다음으로 Master 노드의 로그를 확인합시다.
13568:M 06 Jun 2023 09:40:31.541 * Replica 192.168.56.104:27891 asks for synchronization
13568:M 06 Jun 2023 09:40:31.541 * Full resync requested by replica 192.168.56.104:27891
13568:M 06 Jun 2023 09:40:31.541 * Replication backlog created, my new replication IDs are 'a79ac5cf53c892e8fa5c8449e17df9d2ff8f1015' and '0000000000000000000000000000000000000000'
13568:M 06 Jun 2023 09:40:31.541 * Starting BGSAVE for SYNC with target: disk
13568:M 06 Jun 2023 09:40:31.542 * Background saving started by pid 14317
14317:C 06 Jun 2023 09:40:31.542 * DB saved on disk
14317:C 06 Jun 2023 09:40:31.543 * RDB: 4 MB of memory used by copy-on-write
13568:M 06 Jun 2023 09:40:31.597 * Background saving terminated with success
13568:M 06 Jun 2023 09:40:31.597 * Synchronization with replica 192.168.56.104:27891 succeededSlave 노드가 시작되면 Master 노드에 위와 같이 동기화가 시작된다는 로그가 출력됩니다. 그리고 접속을 요청한 Slave 노드의 정보가 출력됩니다. 여기서 Master에 접속하여 데이터를 하나 생성해 봅시다. 그리고 Slave에 접속하여 동일 데이터를 조회봅니다.
Master - Slave 모드로 레디스가 시작되었으니 데이터가 잘 복제되는지 확인해볼 차례입니다.
먼저 Master 노드에 레디스 클라이언트로 접속하여 set 명령어로 데이터를 넣어봅시다.
[vagrant@localhost master-node]$ ./redis-cli -h 192.168.56.104 -p 27890
192.168.56.104:27890> set hello world
OK[vagrant@localhost master-node]$ ./redis-cli -h 192.168.56.104 -p 27891
192.168.56.104:27891> get hello
"world"이쯤에서 앞서 살펴본 그림을 다시 살펴봅시다.
Master 노드와 Slave 노드를 각각 하나씩 생성했고 그림처럼 데이터 복제가 진행됩니다.
Slave 노드를 하나 더 생성해보는건 독자분들에게 양보하겠습니다.
포스팅이 너무 길어지는 관계로 클러스터 모드에 대한 구성은 다음 포스팅에서 다루도록 하겠습니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.