소개
이 실습에서는 Redis의 기본적인 데이터 관리 기술을 살펴봅니다. 먼저 카운터나 속도 제한(rate limiter) 구현에 적합한 원자적(atomic) 명령어인 INCR과 DECR을 사용하여 숫자 값을 증가시키고 감소시키는 방법을 배웁니다. 터미널에서 redis-cli를 통해 Redis 서버에 접속한 뒤, 초기값을 설정하고 값을 증감시키며 GET 명령어로 결과를 확인하게 됩니다.
또한, KEYS 명령어를 사용하여 Redis에 저장된 모든 키를 검색하는 방법도 학습합니다.
INCR/DECR을 이용한 값 증가 및 감소
이 단계에서는 INCR 및 DECR 명령어를 사용하여 Redis에 저장된 숫자 값을 증가시키고 감소시키는 방법을 배웁니다. 이 명령어들은 원자적(atomic)으로 동작하므로 다른 클라이언트의 간섭 없이 안전하게 실행이 보장됩니다. 따라서 카운터나 속도 제한과 같은 작업에 매우 유용합니다.
먼저 터미널에서 redis-cli 명령어를 사용하여 Redis 서버에 접속합니다:
redis-cli
이제 mycounter라는 키를 생성하고 초기값을 10으로 설정합니다. 이는 Redis 데이터베이스에 키-값 쌍을 생성하는 과정입니다. 여기서 키는 mycounter이고 값은 10입니다.
SET mycounter 10
키가 성공적으로 설정되었다면 다음과 같은 출력이 나타납니다:
OK
INCR 명령어는 키의 값을 1만큼 증가시킵니다. mycounter를 증가시켜 보겠습니다:
INCR mycounter
증가된 값이 출력됩니다:
(integer) 11
값을 확인하려면 GET 명령어를 사용합니다:
GET mycounter
출력 결과는 다음과 같습니다:
"11"
DECR 명령어는 키의 값을 1만큼 감소시킵니다. mycounter를 감소시켜 보겠습니다:
DECR mycounter
감소된 값이 출력됩니다:
(integer) 10
다시 GET으로 값을 확인합니다:
GET mycounter
출력 결과는 다음과 같습니다:
"10"
키가 존재하지 않는 경우, INCR과 DECR은 해당 키의 값을 0으로 간주하고 연산을 수행합니다. 존재하지 않는 newcounter라는 키를 증가시켜 보겠습니다:
INCR newcounter
출력 결과는 다음과 같습니다:
(integer) 1
이제 newcounter의 값을 확인합니다:
GET newcounter
출력 결과는 다음과 같습니다:
"1"
마찬가지로, 존재하지 않는 키를 감소시키면 0에서 시작하여 -1이 됩니다.
DECR anothercounter
출력 결과는 다음과 같습니다:
(integer) -1
GET anothercounter
출력 결과는 다음과 같습니다:
"-1"
마지막으로 redis-cli를 종료합니다:
exit
명령어 기록이 제대로 저장될 수 있도록 작업을 마친 후에는 반드시 redis-cli를 종료하는 것이 좋습니다.
KEYS를 이용한 모든 키 검색
이 단계에서는 KEYS 명령어를 사용하여 Redis에 저장된 모든 키를 검색하는 방법을 배웁니다. KEYS는 개발 및 디버깅 시 유용하지만, 데이터셋이 큰 운영 환경에서는 모든 키를 순회하는 동안 서버를 차단(block)할 수 있으므로 일반적으로 권장되지 않습니다.
먼저 redis-cli를 사용하여 Redis 서버에 접속합니다:
redis-cli
이전 단계에서 mycounter, newcounter, anothercounter와 같은 키들을 생성했습니다. 예제를 더 풍부하게 만들기 위해 몇 가지 키를 추가해 보겠습니다.
SET user:1000:name "John"
SET user:1000:age 30
SET user:1001:name "Jane"
이제 * 패턴과 함께 KEYS 명령어를 사용하여 데이터베이스의 모든 키를 검색합니다:
KEYS *
모든 키의 목록이 출력됩니다:
1) "anothercounter"
2) "user:1000:age"
3) "user:1001:name"
4) "mycounter"
5) "newcounter"
6) "user:1000:name"
키의 순서는 다를 수 있습니다.
특정 패턴과 일치하는 키를 검색할 수도 있습니다. 예를 들어, user:로 시작하는 모든 키를 검색하려면 다음 명령어를 사용합니다:
KEYS user:*
출력 결과는 다음과 같습니다:
1) "user:1000:age"
2) "user:1001:name"
3) "user:1000:name"
또 다른 예로, counter가 포함된 모든 키를 검색하려면 다음 명령어를 사용합니다:
KEYS *counter*
출력 결과는 다음과 같습니다:
1) "anothercounter"
2) "mycounter"
3) "newcounter"
대규모 데이터베이스에서 KEYS *를 사용하면 성능에 영향을 줄 수 있음을 기억하세요. 운영 환경에서는 차단 없이 키 공간을 순회할 수 있는 SCAN 명령어를 사용하는 것을 고려해야 합니다.
마지막으로 redis-cli를 종료합니다:
exit
TYPE을 이용한 데이터 타입 확인
이 단계에서는 TYPE 명령어를 사용하여 Redis에 저장된 키의 데이터 타입을 확인하는 방법을 배웁니다. Redis는 문자열(string), 리스트(list), 세트(set), 정렬된 세트(sorted set), 해시(hash) 등 다양한 데이터 타입을 지원합니다. 키에 적절한 작업을 수행하려면 해당 키의 데이터 타입을 이해하는 것이 중요합니다.
먼저 redis-cli를 사용하여 Redis 서버에 접속합니다:
redis-cli
이전 단계에서 다양한 값을 가진 여러 키를 생성했습니다. 이들의 데이터 타입을 확인해 보겠습니다.
먼저 mycounter 키의 데이터 타입을 확인합니다:
TYPE mycounter
출력 결과는 다음과 같습니다:
string
이는 mycounter가 숫자 값을 포함하고 있음에도 불구하고 문자열로 저장되었음을 나타냅니다. Redis는 SET을 사용할 때 숫자 값을 자동으로 문자열로 변환합니다.
다음으로 user:1000:name 키의 데이터 타입을 확인합니다:
TYPE user:1000:name
출력 결과는 다음과 같습니다:
string
이 역시 user:1000:name이 문자열로 저장되었음을 보여줍니다.
이제 존재하지 않는 키인 nonexistentkey의 데이터 타입을 확인해 보겠습니다:
TYPE nonexistentkey
출력 결과는 다음과 같습니다:
none
이는 해당 키가 데이터베이스에 존재하지 않음을 의미합니다.
데이터 타입을 더 자세히 알아보기 위해 리스트를 생성해 보겠습니다:
LPUSH mylist "item1"
LPUSH mylist "item2"
이제 mylist의 데이터 타입을 확인합니다:
TYPE mylist
출력 결과는 다음과 같습니다:
list
mylist가 리스트로 저장되었음을 확인할 수 있습니다.
마찬가지로 세트, 정렬된 세트, 해시와 같은 다른 데이터 타입을 생성하고 TYPE 명령어로 타입을 확인할 수 있습니다. 예시:
SADD myset "member1"
SADD myset "member2"
TYPE myset
출력 결과는 다음과 같습니다:
set
ZADD mysortedset 1 "element1"
ZADD mysortedset 2 "element2"
TYPE mysortedset
출력 결과는 다음과 같습니다:
zset
HSET myhash field1 "value1"
HSET myhash field2 "value2"
TYPE myhash
출력 결과는 다음과 같습니다:
hash
마지막으로 redis-cli를 종료합니다:
exit
FLUSHDB를 이용한 데이터 삭제
이 단계에서는 FLUSHDB 명령어를 사용하여 현재 선택된 Redis 데이터베이스의 모든 데이터를 삭제하는 방법을 배웁니다. 이 명령어는 개발이나 테스트 중에 데이터베이스를 초기화할 때 유용합니다. 운영 환경에서는 데이터베이스의 모든 데이터가 영구적으로 삭제되므로 이 명령어를 사용할 때 각별히 주의해야 합니다.
먼저 redis-cli를 사용하여 Redis 서버에 접속합니다:
redis-cli
데이터베이스를 비우기 전에 키가 존재하는지 확인합니다. KEYS * 명령어를 사용하세요:
KEYS *
이전 단계에서 생성한 mycounter, newcounter, user:1000:name, mylist 등의 키 목록이 보일 것입니다.
이제 FLUSHDB 명령어를 실행합니다:
FLUSHDB
출력 결과는 다음과 같습니다:
OK
이는 데이터베이스가 성공적으로 비워졌음을 나타냅니다.
데이터베이스가 비어 있는지 확인하기 위해 다시 KEYS * 명령어를 사용합니다:
KEYS *
출력 결과는 빈 목록입니다:
(empty array)
모든 키가 데이터베이스에서 제거되었음을 확인할 수 있습니다.
FLUSHDB는 현재 선택된 데이터베이스만 비운다는 점을 이해하는 것이 중요합니다. Redis는 여러 데이터베이스를 지원합니다(기본적으로 0번부터 15번까지). 모든 데이터베이스를 비우려면 FLUSHALL 명령어를 사용할 수 있습니다. 하지만 의도치 않은 데이터 손실을 방지하기 위해 이 실습에서는 FLUSHALL을 사용하지 않습니다.
마지막으로 redis-cli를 종료합니다:
exit
요약
이번 실습에서는 Redis의 기본적인 데이터 관리 기술을 배웠습니다. 특히 카운터나 속도 제한 구현에 유용한 원자적 명령어인 INCR과 DECR을 사용하여 숫자 값을 증가시키고 감소시키는 방법을 연습했습니다. 또한 키가 존재하지 않을 경우 이 명령어들이 해당 값을 0으로 간주한다는 점도 확인했습니다.
더불어 Redis에 저장된 모든 키를 검색하는 KEYS 명령어에 대해서도 배웠습니다. 이는 개발 및 디버깅에는 유용하지만, 대규모 데이터셋을 다루는 운영 환경에서는 권장되지 않습니다. 마지막으로 데이터 타입을 확인하고 데이터베이스를 비우는 방법까지 학습했습니다.


