검증된 문서입니다
클라우드 서버를 생성하여 이 문서의 명령을 처음부터 끝까지 그대로 실행하고 확인한 문서입니다.
- 운영체제
- Ubuntu 24.04.5 LTS · x86_64
- 설치 버전
- Redis 8.10.2 (6:8.10.2-1rl1~noble1)
- 테스트 서버
- DigitalOcean · 1 vCPU / 1 GB RAM / 25 GB SSD (s-1vcpu-1gb, sgp1)
- 마지막 확인
- 2026-10-10
이 문서에는 제휴 링크가 포함되어 있습니다. 링크를 통해 가입하면 코드샌드가 일정 수수료를 받을 수 있으며, 문서 내용과 평가에는 영향을 주지 않습니다.
Ubuntu 24.04 서버에 Redis 공식 저장소를 추가해 Redis 8을 설치하고, 관리자 비밀번호와 애플리케이션 전용 사용자를 만든 뒤, 내 PC에서만 접속할 수 있게 외부 접속 설정과 방화벽까지 설정합니다.
1. 준비물
- Ubuntu 24.04 LTS 서버 1대 (메모리 1GB 이상 권장)
sudo권한이 있는 계정으로 SSH 접속- 외부에서 접속할 PC의 공인 IP 주소 (예:
203.0.113.10)
서버가 없다면 DigitalOcean의 가장 작은 Droplet(1 vCPU · 1GB)을 생성해 보세요. 이 Droplet으로도 충분히 Redis 8을 설치할 수 있습니다. 이 문서의 모든 과정은 Droplet(1 vCPU · 1GB 메모리 · 25GB SSD · Ubuntu 24.04 · 싱가포르)으로 서버를 생성해 확인했습니다.
2. Redis 공식 저장소 추가
Ubuntu 24.04 기본 저장소로 설치되는 Redis는 7.0입니다.
apt-cache policy redis-server | head -4redis-server:
Installed: (none)
Candidate: 5:7.0.15-1ubuntu0.24.04.4
Version table:Redis 8은 Redis 공식 저장소(packages.redis.io)를 추가해 설치합니다. 먼저 필요한 도구를 설치합니다. Ubuntu 24.04에는 대부분 이미 설치되어 있습니다.
sudo apt update
sudo apt install -y lsb-release curl gpg저장소 서명 키를 내려받아 저장하고, 저장소 주소를 등록합니다. 서명 키는 내려받는 패키지가 Redis에서 만든 것인지 확인하는 데 사용됩니다. $(lsb_release -cs)는 Ubuntu 24.04의 코드 이름인 noble로 바뀝니다.
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.listdeb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb noble main패키지 목록을 갱신한 뒤 설치될 버전을 다시 확인합니다. Candidate가 8로 시작하면 정상입니다.
sudo apt update
apt-cache policy redis-server | head -4redis-server:
Installed: (none)
Candidate: 6:8.10.2-1rl1~noble1
Version table:3. Redis 8 설치
redis 패키지를 설치하면 서버(redis-server)와 명령줄 도구(redis-tools)가 함께 설치됩니다.
sudo apt install -y redis설치가 끝나면 설치된 버전을 확인합니다.
redis-server --versionRedis server v=8.10.2 sha=00000000:1 malloc=jemalloc-5.3.0 bits=64 build=677c1e5d953828c44. 서비스 상태 확인
설치가 끝나면 redis-server 서비스가 자동으로 시작되고, 서버를 다시 시작해도 자동으로 실행되도록 등록됩니다.
sudo systemctl status redis-server --no-pager● redis-server.service - Advanced key-value store
Loaded: loaded (/usr/lib/systemd/system/redis-server.service; enabled; preset: enabled)
Active: active (running) since Sat 2026-10-10 08:03:21 UTC; 9s agoRedis에 접속되는지 확인합니다. PONG이 표시되면 정상입니다.
redis-cli pingPONG어느 주소에서 접속을 받고 있는지 확인합니다.
sudo ss -tlnp | grep 6379LISTEN 0 511 127.0.0.1:6379 0.0.0.0:* users:(("redis-server",pid=7586,fd=20))
LISTEN 0 511 [::1]:6379 [::]:* users:(("redis-server",pid=7586,fd=21))127.0.0.1과 [::1]만 표시되므로 지금은 서버 안에서만 접속할 수 있습니다. 이 동작은 설정 파일 /etc/redis/redis.conf의 아래 항목이 정합니다.
grep -n -E '^(bind|protected-mode|port|supervised|# requirepass|loadmodule)' /etc/redis/redis.conf88:bind 127.0.0.1 -::1
112:protected-mode yes
139:port 6379
389:supervised auto
1145:# requirepass foobared
2753:loadmodule /usr/lib/redis/modules/redisbloom.so
2754:loadmodule /usr/lib/redis/modules/redisearch.so
2755:loadmodule /usr/lib/redis/modules/rejson.so
2756:loadmodule /usr/lib/redis/modules/redistimeseries.sobind: 접속을 받을 서버의 주소입니다.127.0.0.1(IPv4)과::1(IPv6) 모두 서버 자신의 주소입니다. 앞의-는 해당 주소를 사용할 수 없어도 Redis가 오류 없이 시작한다는 뜻입니다.protected-mode: 기본 사용자에 비밀번호가 없을 때 외부 접속을 막는 기능입니다.requirepass: 비밀번호 설정입니다. 앞에#이 있어 비밀번호 없이 접속할 수 있는 상태입니다.loadmodule: Redis 8 공식 패키지에 함께 들어 있는 기능입니다. 확률형 자료구조(redisbloom), 검색(redisearch), JSON(rejson), 시계열(redistimeseries)을 Redis를 시작할 때 불러옵니다. 별도로 설치할 필요가 없습니다.
5. 기본 보안 설정 — 관리자 비밀번호
설치 직후의 Redis는 비밀번호 없이 모든 명령을 실행할 수 있습니다. 외부 접속을 열기 전에 기본 사용자(default)에 비밀번호를 설정합니다. default 사용자는 모든 명령을 실행할 수 있으므로 관리자 비밀번호로 사용합니다. 비밀번호는 반드시 직접 정한 값으로 바꾸세요.
sudo sed -i 's/^# requirepass foobared/requirepass change-this-admin-password/' /etc/redis/redis.conf
sudo grep -n '^requirepass' /etc/redis/redis.conf1145:requirepass change-this-admin-passwordRedis를 다시 시작한 뒤 비밀번호 없이 접속하면 명령이 거부됩니다.
sudo systemctl restart redis-server
redis-cli pingNOAUTH Authentication required.--askpass 옵션을 붙이면 비밀번호를 입력받은 뒤 명령을 실행합니다. 입력한 비밀번호는 *로 표시됩니다.
redis-cli --askpass pingPlease input password: **************************
PONG6. 전용 사용자 만들기
애플리케이션에서는 관리자 비밀번호 대신 권한을 줄인 전용 사용자로 접속하는 것이 안전합니다. ACL로 사용자 appuser를 만듭니다. Redis에는 MySQL·PostgreSQL처럼 데이터베이스를 따로 만드는 명령이 없으므로, 키 이름 앞부분(app:)으로 이 사용자가 쓸 수 있는 범위를 정합니다.
echo 'user appuser on >change-this-password ~app:* +@all -@dangerous' | sudo tee -a /etc/redis/redis.conf
sudo systemctl restart redis-serveruser appuser on >change-this-password ~app:* +@all -@dangerouson: 사용자를 사용할 수 있는 상태로 만듭니다.>change-this-password:>뒤의 값이 이 사용자의 비밀번호입니다.~app:*: 이름이app:으로 시작하는 키만 읽고 쓸 수 있습니다.+@all -@dangerous: 모든 명령을 허용한 뒤,FLUSHALL·CONFIG·KEYS·INFO처럼 서버 전체에 영향을 주는 명령 묶음(@dangerous)을 제외합니다.
사용자가 만들어졌는지 관리자 비밀번호로 확인합니다.
redis-cli --askpass ACL USERSPlease input password: **************************
1) "appuser"
2) "default"--user 옵션으로 appuser로 접속해 app:으로 시작하는 키를 저장하고 읽어 봅니다.
redis-cli --user appuser --askpass SET app:hello worldPlease input password: ********************
OKredis-cli --user appuser --askpass GET app:helloPlease input password: ********************
"world"허용하지 않은 키와 명령은 거부됩니다. 아래 두 오류가 표시되면 권한이 의도대로 적용된 것입니다.
redis-cli --user appuser --askpass SET other:hello worldPlease input password: ********************
(error) NOPERM No permissions to access a keyredis-cli --user appuser --askpass FLUSHALLPlease input password: ********************
(error) NOPERM User appuser has no permissions to run the 'flushall' command4단계에서 본 JSON 기능도 appuser로 사용할 수 있습니다. +@all에 JSON 명령도 포함되기 때문입니다. $는 JSON 문서 전체를, $.name은 name 항목을 뜻합니다.
redis-cli --user appuser --askpass JSON.SET app:user:1 '$' '{"name":"kim","age":30}'Please input password: ********************
OKredis-cli --user appuser --askpass JSON.GET app:user:1 '$.name'Please input password: ********************
"[\"kim\"]"7. 외부 접속 허용
기본 설정은 localhost 접속만 허용합니다. 외부 접속을 허용하려면 bind를 0.0.0.0으로 바꿉니다. 0.0.0.0은 서버의 모든 IPv4 주소에서 접속을 받는다는 뜻입니다.
sudo sed -i 's/^bind 127.0.0.1 -::1/bind 0.0.0.0/' /etc/redis/redis.conf
grep -n -E '^(bind|protected-mode)' /etc/redis/redis.conf88:bind 0.0.0.0
112:protected-mode yesprotected-mode yes는 그대로 둡니다. 5단계에서 기본 사용자에 비밀번호를 설정했기 때문에 이 설정을 켜 두어도 외부에서 접속할 수 있습니다.
Redis를 다시 시작하고 6379 포트가 외부 주소에서도 열렸는지 확인합니다. 0.0.0.0:6379가 보이면 정상입니다.
sudo systemctl restart redis-server
sudo ss -tlnp | grep 6379LISTEN 0 511 0.0.0.0:6379 0.0.0.0:* users:(("redis-server",pid=9065,fd=20))8. 방화벽(ufw) 설정
Redis 설정과 별도로 방화벽에서도 내 PC의 IP만 6379 포트에 접속할 수 있게 허용합니다. 방화벽을 켜기 전에 반드시 SSH를 먼저 허용하세요. SSH를 허용하지 않고 방화벽을 켜면 서버 접속이 끊어집니다.
sudo ufw allow OpenSSH
sudo ufw allow from 203.0.113.10 to any port 6379 proto tcp
sudo ufw --force enable
sudo ufw statusStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
6379/tcp ALLOW 203.0.113.10
OpenSSH (v6) ALLOW Anywhere (v6)9. 내 PC에서 접속 확인
PC에 redis-cli가 없다면 Docker로 Redis 클라이언트를 실행해 접속할 수 있습니다. 203.0.113.20은 서버의 IP로 바꾸세요. --rm 옵션을 붙였기 때문에 명령이 끝나면 컨테이너는 자동으로 삭제됩니다. -it는 비밀번호를 입력할 수 있도록 터미널을 연결하는 옵션입니다.
docker run --rm -it redis:8 redis-cli -h 203.0.113.20 --user appuser --askpass GET app:helloPlease input password: ********************
"world"6단계에서 저장한 값이 표시되면 외부 접속이 정상입니다. 비밀번호 없이 접속하면 명령이 거부되는 것도 확인합니다.
docker run --rm -it redis:8 redis-cli -h 203.0.113.20 PING(error) NOAUTH Authentication required.10. 문제 해결
Could not connect to Redis at 203.0.113.20:6379: Connection refused
Redis가 외부 주소에서 접속을 받지 않고 있다는 뜻입니다. bind를 바꾸기 전에 외부에서 접속하면 이 오류가 납니다. grep -n -E '^(bind|protected-mode)' /etc/redis/redis.conf로 bind 0.0.0.0인지 확인하고, 바꾼 뒤에 sudo systemctl restart redis-server를 실행했는지 확인하세요.
NOAUTH Authentication required.
비밀번호 없이 명령을 실행했다는 뜻입니다. requirepass를 설정한 뒤에는 redis-cli --askpass(관리자) 또는 redis-cli --user appuser --askpass(전용 사용자)로 접속하세요.
AUTH failed: WRONGPASS invalid username-password pair or user is disabled.
사용자 이름이나 비밀번호가 틀렸다는 뜻입니다. --user를 붙이지 않으면 default 사용자(관리자 비밀번호)로 확인합니다. appuser로 접속하려면 --user appuser를 붙이고 appuser의 비밀번호를 입력하세요. 이 오류 다음 줄에 (error) NOAUTH Authentication required.가 함께 표시됩니다.
(error) NOPERM No permissions to access a key
appuser에게 허용하지 않은 키를 사용했다는 뜻입니다. 이 문서에서는 ~app:*로 app:으로 시작하는 키만 허용했습니다. 다른 이름의 키도 허용하려면 redis.conf의 user appuser 줄에 ~로 시작하는 키 패턴을 추가하고 Redis를 다시 시작하세요.
NOPERM User appuser has no permissions to run the 'info' command
-@dangerous로 제외한 명령을 실행했다는 뜻입니다. FLUSHALL을 실행해도 같은 형식의 오류가 납니다. 이런 명령은 관리자 비밀번호로 접속해 실행하세요.
11. 삭제하기
Redis와 데이터를 모두 삭제하려면 아래 명령을 실행합니다. 저장된 데이터와 설정 파일까지 모두 삭제되므로 필요한 데이터는 먼저 백업하세요.
sudo apt purge -y redis redis-server redis-tools
sudo apt autoremove -y
sudo rm -rf /etc/redis /var/lib/redis /var/log/redis2단계에서 추가한 공식 저장소와 서명 키도 삭제하고 패키지 목록을 갱신합니다.
sudo rm /etc/apt/sources.list.d/redis.list /usr/share/keyrings/redis-archive-keyring.gpg
sudo apt update방화벽에 추가한 6379 포트 규칙도 삭제합니다.
sudo ufw delete allow from 203.0.113.10 to any port 6379 proto tcpRule deletedRedis 패키지가 남아 있지 않은지 확인합니다. 0이 표시되면 모두 삭제된 것입니다.
dpkg -l | grep -c redis0직접 해 보기
서버가 없다면 아래 업체에서 몇 분이면 Ubuntu 서버를 만들 수 있습니다. 이 문서는 DigitalOcean 에서 검증했습니다.
이 문서가 도움이 됐나요? 틀린 곳이나 바뀐 내용이 있으면 알려 주세요.
내용 정정 요청