소개
이 실습에서는 Redis의 고급 키 관리 기법을 살펴봅니다. 먼저 redis-cli를 통해 Redis 서버에 연결하고, 키-값 쌍을 설정한 뒤 RENAME 명령어를 사용하여 키 이름을 변경하고 변경 사항을 확인하는 방법을 배웁니다.
다음으로 MOVE 명령어를 사용하여 서로 다른 Redis 데이터베이스 간에 키를 이동하는 방법을 알아봅니다. 이 실습을 통해 Redis 인스턴스 내에서 한 데이터베이스에서 다른 데이터베이스로 키를 전송하는 과정을 안내합니다. 또한 여러 키를 설정 및 조회하고, 효율적으로 키를 반복 탐색하는 방법도 다룹니다.
RENAME을 사용한 키 이름 변경
이 단계에서는 RENAME 명령어를 사용하여 Redis에서 키 이름을 변경하는 방법을 배웁니다. 키 이름 변경은 오타 수정, 데이터 재구성, 또는 애플리케이션 변경 사항을 반영하기 위해 키 이름을 업데이트하는 등 다양한 상황에서 유용합니다.
먼저 Redis 명령줄 인터페이스(redis-cli)를 사용하여 Redis 서버에 연결합니다. ~/project 디렉토리에서 터미널을 열고 다음 명령어를 입력하세요.
redis-cli
Redis 프롬프트 127.0.0.1:6379>가 나타날 것입니다.
이제 이름을 변경할 수 있는 키-값 쌍을 설정해 보겠습니다. SET 명령어를 사용하여 mykey라는 이름의 키에 myvalue라는 값을 생성합니다.
SET mykey myvalue
OK라는 출력이 표시될 것입니다.
키가 올바르게 설정되었는지 확인하려면 GET 명령어를 사용하세요.
GET mykey
"myvalue"라는 출력이 표시될 것입니다.
이제 RENAME 명령어를 사용하여 mykey의 이름을 newkey로 변경해 보겠습니다.
RENAME mykey newkey
OK라는 출력이 표시될 것입니다.
키 이름이 변경되었는지 확인하기 위해 이전 키(mykey)의 값을 가져와 봅니다.
GET mykey
(nil)이라는 출력이 표시될 텐데, 이는 해당 키가 더 이상 존재하지 않음을 의미합니다.
이제 새 키(newkey)의 값을 가져와 봅니다.
GET newkey
"myvalue"라는 출력이 표시되며, 키 이름이 성공적으로 변경되었음을 확인할 수 있습니다.
마지막으로, 다음 단계를 위해 newkey의 이름을 다시 mykey로 변경하겠습니다.
RENAME newkey mykey
OK라는 출력이 표시될 것입니다.
키 이름이 다시 변경되었는지 확인합니다.
GET mykey
"myvalue"라는 출력이 표시될 것입니다.
exit를 입력하거나 Ctrl+D를 눌러 redis-cli를 종료합니다.
exit
이제 RENAME 명령어를 사용하여 Redis에서 키 이름을 성공적으로 변경했습니다.
MOVE를 사용한 데이터베이스 간 키 이동
이 단계에서는 MOVE 명령어를 사용하여 Redis의 한 데이터베이스에서 다른 데이터베이스로 키를 이동하는 방법을 배웁니다. Redis는 단일 인스턴스 내에서 여러 논리적 데이터베이스를 지원합니다. 기본적으로 0부터 15까지 번호가 매겨진 16개의 데이터베이스가 있습니다. MOVE 명령어를 사용하면 현재 선택된 데이터베이스에서 다른 데이터베이스로 키를 전송할 수 있습니다.
먼저 Redis 명령줄 인터페이스(redis-cli)를 사용하여 Redis 서버에 연결되어 있는지 확인합니다. ~/project 디렉토리에서 터미널을 열고 다음 명령어를 입력하세요.
redis-cli
Redis 프롬프트 127.0.0.1:6379>가 나타날 것입니다. 기본적으로 데이터베이스 0에 연결되어 있습니다.
이전 단계에서 데이터베이스 0에 mykey라는 키와 myvalue라는 값이 이미 설정되어 있습니다. 이를 확인해 보겠습니다.
GET mykey
"myvalue"라는 출력이 표시될 것입니다.
이제 MOVE 명령어를 사용하여 데이터베이스 0에 있는 mykey를 데이터베이스 1로 이동해 보겠습니다.
MOVE mykey 1
(integer) 1이라는 출력이 표시되며, 이는 키가 성공적으로 이동되었음을 의미합니다.
키가 이동되었는지 확인하기 위해 데이터베이스 0에서 mykey의 값을 가져와 봅니다.
GET mykey
(nil)이라는 출력이 표시되며, 이는 데이터베이스 0에 키가 더 이상 존재하지 않음을 의미합니다.
이제 SELECT 명령어를 사용하여 데이터베이스 1로 전환합니다.
SELECT 1
OK라는 출력이 표시될 것입니다.
이제 데이터베이스 1에서 mykey의 값을 가져와 봅니다.
GET mykey
"myvalue"라는 출력이 표시되며, 키가 데이터베이스 1로 성공적으로 이동되었음을 확인할 수 있습니다.
마지막으로, 다음 단계를 위해 mykey를 다시 데이터베이스 0으로 이동하겠습니다. 먼저 데이터베이스 0으로 다시 전환합니다.
SELECT 0
OK라는 출력이 표시될 것입니다.
이제 데이터베이스 1에서 데이터베이스 0으로 mykey를 이동해 봅니다.
MOVE mykey 0
(error) ERR source and destination objects are the same이라는 출력이 표시될 것입니다.
이 오류는 같은 세션에서 SELECT 0을 수행한 후 MOVE mykey 0을 실행했기 때문에 발생합니다. MOVE 명령어는 현재 키가 위치한 데이터베이스와 동일한 데이터베이스로 키를 이동할 수 없습니다.
키를 다른 데이터베이스로 이동하려면 먼저 대상 데이터베이스를 선택한 다음 MOVE 명령어를 사용해야 합니다.
예를 들어, 먼저 데이터베이스 1을 선택합니다.
SELECT 1
OK라는 출력이 표시될 것입니다.
이제 데이터베이스 1에서 데이터베이스 0으로 mykey를 이동합니다.
MOVE mykey 0
(integer) 1이라는 출력이 표시되며, 이는 키가 성공적으로 이동되었음을 의미합니다.
이제 데이터베이스 0으로 다시 전환합니다.
SELECT 0
키가 데이터베이스 0으로 돌아왔는지 확인합니다.
GET mykey
"myvalue"라는 출력이 표시될 것입니다.
exit를 입력하거나 Ctrl+D를 눌러 redis-cli를 종료합니다.
exit
이제 MOVE 명령어를 사용하여 Redis 데이터베이스 간에 키를 성공적으로 이동했습니다.
MSET을 사용한 여러 키 설정
이 단계에서는 Redis의 MSET 명령어를 사용하여 한 번의 명령으로 여러 키와 해당 값을 설정하는 방법을 배웁니다. 이는 여러 개의 SET 명령어를 사용하는 것보다 Redis 서버와의 왕복 횟수를 줄여주므로 훨씬 효율적입니다.
먼저 Redis 명령줄 인터페이스(redis-cli)를 사용하여 Redis 서버에 연결되어 있는지 확인합니다. 아직 연결되어 있지 않다면 ~/project 디렉토리에서 터미널을 열고 다음 명령어를 입력하세요.
redis-cli
Redis 프롬프트 127.0.0.1:6379>가 나타날 것입니다.
이전 단계에서 데이터베이스 0에 mykey라는 키와 myvalue라는 값이 이미 설정되어 있습니다. 이제 MSET 명령어를 사용하여 key1과 key2라는 두 개의 키를 각각 value1과 value2라는 값으로 설정해 보겠습니다.
MSET key1 value1 key2 value2
OK라는 출력이 표시되며, 이는 키들이 성공적으로 설정되었음을 의미합니다.
키들이 올바르게 설정되었는지 확인하려면 각 키에 대해 GET 명령어를 사용하세요.
GET key1
"value1"이라는 출력이 표시될 것입니다.
GET key2
"value2"라는 출력이 표시될 것입니다.
이제 MSET을 사용하여 mykey를 포함한 세 개의 키를 설정해 보겠습니다.
MSET mykey newvalue key3 value3 key4 value4
OK라는 출력이 표시될 것입니다.
값들을 확인합니다.
GET mykey
"newvalue"라는 출력이 표시될 것입니다.
GET key3
"value3"이라는 출력이 표시될 것입니다.
GET key4
"value4"라는 출력이 표시될 것입니다.
exit를 입력하거나 Ctrl+D를 눌러 redis-cli를 종료합니다.
exit
이제 MSET 명령어를 사용하여 여러 키를 성공적으로 설정했습니다.
MGET을 사용한 여러 키 조회
이 단계에서는 Redis의 MGET 명령어를 사용하여 한 번의 명령으로 여러 키의 값을 조회하는 방법을 배웁니다. 이는 여러 개의 GET 명령어를 사용하는 것보다 Redis 서버와의 왕복 횟수를 줄여주므로 훨씬 효율적입니다.
먼저 Redis 명령줄 인터페이스(redis-cli)를 사용하여 Redis 서버에 연결되어 있는지 확인합니다. ~/project 디렉토리에서 터미널을 열고 다음 명령어를 입력하세요.
redis-cli
Redis 프롬프트 127.0.0.1:6379>가 나타날 것입니다.
이전 단계에서 다음과 같은 키와 값들이 설정되어 있습니다.
mykey:newvaluekey1:value1key2:value2key3:value3key4:value4
이제 MGET 명령어를 사용하여 key1, key2, mykey의 값을 조회해 보겠습니다.
MGET key1 key2 mykey
다음과 같은 출력이 표시될 것입니다.
1) "value1"
2) "value2"
3) "newvalue"
이 출력은 MGET 명령어에 지정된 순서대로 키의 값들을 보여줍니다.
이제 MGET 명령어를 사용하여 key3, key4 및 존재하지 않는 키인 key5의 값을 조회해 보겠습니다.
MGET key3 key4 key5
다음과 같은 출력이 표시될 것입니다.
1) "value3"
2) "value4"
3) (nil)
존재하지 않는 키인 key5의 값은 (nil)로 표시되는 것을 확인할 수 있습니다.
exit를 입력하거나 Ctrl+D를 눌러 redis-cli를 종료합니다.
exit
이제 MGET 명령어를 사용하여 여러 키를 성공적으로 조회했습니다.
SCAN을 사용한 효율적인 키 반복 탐색
이 단계에서는 SCAN 명령어를 사용하여 Redis에서 키를 효율적으로 반복 탐색하는 방법을 배웁니다. 대규모 데이터베이스에서 사용 시 서버를 차단할 수 있는 KEYS 명령어와 달리, SCAN은 커서 기반 반복자로 키를 배치 단위로 가져오므로 성능에 미치는 영향을 최소화합니다.
먼저 Redis 명령줄 인터페이스(redis-cli)를 사용하여 Redis 서버에 연결되어 있는지 확인합니다. ~/project 디렉토리에서 터미널을 열고 다음 명령어를 입력하세요.
redis-cli
Redis 프롬프트 127.0.0.1:6379>가 나타날 것입니다.
이전 단계에서 다음과 같은 키들이 있습니다.
mykeykey1key2key3key4
SCAN 명령어는 일반적으로 0인 초기 커서 값이 필요합니다. 이 명령어는 다음 반복을 위한 새로운 커서 값과 현재 반복에서 발견된 키 목록을 반환합니다.
커서 0으로 반복을 시작해 보겠습니다.
SCAN 0
다음과 유사한 출력이 표시될 것입니다.
1) "0"
2) 1) "key2"
2) "key3"
3) "key4"
4) "key1"
5) "mykey"
출력의 첫 번째 요소("0")는 커서 값입니다. 두 번째 요소는 이번 반복에서 발견된 키들의 배열입니다. 반환된 커서가 0이므로, 이는 반복이 완료되었으며 단일 스캔으로 모든 키를 가져왔음을 의미합니다.
MATCH 옵션을 사용하여 패턴에 따라 키를 필터링할 수도 있습니다. 예를 들어, key로 시작하는 모든 키를 찾으려면 다음 명령어를 사용하세요.
SCAN 0 MATCH key*
다음과 유사한 출력이 표시될 것입니다.
1) "0"
2) 1) "key2"
2) "key3"
3) "key4"
4) "key1"
커서가 "0"이므로 반복이 완료되었으며, "key*" 패턴과 일치하는 키들만 반환된 것을 볼 수 있습니다("mykey"는 제외됨).
COUNT 옵션을 사용하여 한 번의 호출로 가져올 요소의 개수를 Redis에 힌트로 줄 수도 있습니다. 이는 단지 힌트일 뿐이며, Redis는 이보다 많거나 적은 요소를 반환할 수 있다는 점에 유의하세요. 예:
SCAN 0 COUNT 3
다음과 유사한 출력이 표시될 것입니다.
1) "6"
2) 1) "key2"
2) "key3"
3) "key4"
이 경우 "6"이라는 새로운 커서 값을 얻게 되며, 이는 스캔할 키가 더 남아 있음을 나타냅니다. 커서 값이 "0"이 될 때까지 이 새로운 커서 값을 사용하여 반복을 계속해야 합니다.
exit를 입력하거나 Ctrl+D를 눌러 redis-cli를 종료합니다.
exit
이제 SCAN 명령어를 사용하여 Redis에서 키를 성공적으로 반복 탐색했습니다.
요약
이 실습에서는 Redis에서 고급 키 관리 작업을 수행하는 방법을 배웠습니다. 구체적으로 RENAME 명령어를 사용하여 키 이름을 변경하고, 연결된 값은 유지하면서 식별자만 변경하는 방법을 익혔습니다. 또한 이전 키 이름과 새 키 이름을 모두 사용하여 값을 조회함으로써 성공적인 이름 변경을 확인하고, 작업 후 키의 존재 여부와 값을 검증하는 연습을 했습니다. 마지막으로 다음 단계를 위해 키 이름을 원래대로 되돌렸습니다.
또한 Redis 데이터베이스의 개념과 단일 Redis 인스턴스 내의 논리적 데이터베이스 간에 키를 전송할 수 있는 MOVE 명령어를 소개했습니다. MSET 명령어를 사용하여 여러 키를 한 번에 효율적으로 설정하는 방법과 MGET 명령어를 사용하여 해당 값들을 조회하는 방법도 배웠습니다. 마지막으로, 서버를 차단하지 않고 대규모 데이터베이스의 키를 반복 탐색할 수 있는 강력한 도구인 SCAN 명령어를 살펴보았습니다.


