개발/REDIS

#1 Redis 시작하기: 설치·실행·첫 명령(PING)

cedis 2026. 3. 17. 20:38

🔥 들어가며 — "DB가 느려서 화면이 안 뜬다고요?"

쇼핑몰 이벤트 페이지를 클릭했는데 로딩 스피너가 3초, 5초 넘게 돌고 있다면 — 개발자 입장에서는 가슴이 내려앉는 순간입니다. 이 지연의 가장 흔한 주범은 데이터베이스(DB)입니다. 요청이 올 때마다 수백만 건 데이터를 디스크에서 긁어 오니 어쩔 수 없이 느립니다.

이럴 때 가장 자주 등장하는 해결사가 바로 Redis입니다. "자주 요청되지만 거의 안 바뀌는 데이터는 빠른 곳에 미리 꺼내놓자" — 이게 캐시(Cache)이고, Redis는 이 역할을 아주 잘합니다. 캐시 외에도 로그인 세션 저장, 실시간 알림 큐, 랭킹 처리 등 현대 웹 서비스 곳곳에 Redis가 쓰이고 있습니다.

한 줄 정의를 드리면: Redis는 메모리(RAM) 위에서 데이터를 저장하고 읽는 초고속 데이터 저장소입니다. 디스크 대신 메모리를 쓰기 때문에 일반 DB보다 수십~수백 배 빠릅니다.

오늘은 딱 세 가지만 합니다. 설치 → 실행 → 첫 명령(PING·SET·GET). 어떤 OS(Windows·macOS·Linux)를 쓰든 커버합니다. 가장 쉽고 실패 가능성이 낮은 방법은 Docker이며, 이유는 아래에서 설명합니다. 기준 버전은 Redis Open Source 8.6.1(2026년 2월 출시 최신 안정 버전)입니다.

💡 "PING을 쳤을 때 PONG이 돌아오면, 오늘 실습의 절반은 끝난 겁니다."
긴장 풀고, 명령어 한 줄씩 따라와 보세요.

🧠 핵심 개념 — Redis를 이해하는 3가지 포인트

1. Redis는 "데이터 구조 서버(Data Structure Server)"다

Redis를 그냥 "빠른 DB"라고만 생각하면 나중에 헷갈립니다. 공식 소개는 "data structure server"입니다. 단순히 데이터를 저장하는 게 아니라, 다양한 자료구조 형태로 메모리 위에서 데이터를 다룬다는 의미입니다.

비유를 들면 이렇습니다:

비유 설명
📊 일반 DB (MySQL 등) 거대한 엑셀 스프레드시트 — 행과 열로 정리된 창고
📋 Redis 화이트보드에 붙인 포스트잇 묶음 — 텍스트, 목록, 집합, 순위표 등 다양한 형태

그리고 이 화이트보드는 책상 서랍(디스크) 이 아니라 손 바로 닿는 책상 위(메모리) 에 있어서, 꺼내는 속도가 압도적으로 빠릅니다. Redis가 지원하는 자료구조는 Strings, Hashes, Lists, Sets, Sorted Sets, Streams 등 다양하며, 이 시리즈에서 하나씩 배웁니다.

2. Redis는 "앱과 DB 사이"에 놓인다

Redis가 실제 서비스에서 어떤 위치에 있는지 흐름을 보면 이해가 훨씬 빠릅니다.

👤 사용자 요청
[ 앱 서버 ]
↓   ↓
① Redis 먼저 조회
(메모리, 초고속 < 1ms)
캐시 HIT → 즉시 반환 ✅
② Redis에 없으면
(캐시 MISS)
DB 조회 → Redis 저장 후 반환
↓                        ↓
[ Redis ]
⚡ 메모리
[ DB ]
🐢 디스크

이 패턴을 Cache-Aside(또는 Look-Aside Cache)라고 부릅니다. 앱이 직접 캐시를 관리하는 가장 기본적인 방식이에요. 이 시리즈 3편에서 Python·Node.js 코드로 직접 구현하게 됩니다.

3. redis-cli가 뭔가요?

redis-cliRedis 서버에 명령을 직접 날리는 터미널 도구입니다. MySQL의 mysql 명령어처럼, Redis 서버가 잘 동작하는지 확인하고 데이터를 직접 조회·수정할 때 씁니다. 이 시리즈 12편 내내 가장 자주 등장할 도구이니 꼭 친해져 두세요!

ℹ️ 오해 방지! Redis는 "무조건 캐시 전용"이 아닙니다. 설정에 따라 디스크에 데이터를 저장(퍼시스턴스)할 수 있고, 메시지 큐, 실시간 랭킹, 분산 락 등 다양한 용도로 쓰입니다. "메모리 DB니까 껐다 켜면 다 날아간다"는 것도 오해입니다 — 9편에서 자세히 다룹니다.

⚙️ Lab 0 — 설치와 첫 연결

🎯 목표: 어떤 OS든 Redis 8.6.1을 실행하고 PING → PONG, SET/GET을 눈으로 확인한다.

🐳 방법 1: Docker (모든 OS 공통 — 가장 권장)

Docker를 왜 권장하냐고요? 내 컴퓨터 환경을 건드리지 않고, 명령어 두 줄로 Redis를 켜고 끌 수 있기 때문입니다. 실습이 끝나면 컨테이너를 삭제하면 흔적도 없어요. Docker Desktop이 설치되어 있다는 전제로 진행합니다.

1
Redis 컨테이너 실행
아래 명령어를 터미널(Mac/Linux) 또는 PowerShell(Windows)에 붙여넣으세요.
TERMINAL
# Redis 8.6.1 컨테이너를 백그라운드(-d)로 실행
# -p 6379:6379 : 내 컴퓨터의 6379 포트를 컨테이너와 연결
docker run -d --name redis -p 6379:6379 redis:8.6.1
2
redis-cli로 접속
TERMINAL
# 실행 중인 redis 컨테이너 안으로 들어가서 redis-cli 실행
docker exec -it redis redis-cli
3
첫 명령 실행 — 성공 기준 확인
REDIS-CLI
# 연결 확인: PONG이 나오면 성공!
127.0.0.1:6379> PING
PONG

# 데이터 저장: "hello" 키에 "world" 저장
127.0.0.1:6379> SET hello "world"
OK

# 데이터 조회: "hello" 키의 값을 꺼내기
127.0.0.1:6379> GET hello
"world"

# 현재 저장된 키 목록 조회 (실제 운영에선 쓰지 말 것!)
127.0.0.1:6379> KEYS *
1) "hello"
PONG이 보이면 완료! Redis 서버가 살아있고, 내 redis-cli가 정상 연결된 겁니다. SET/GET이 동작하면 오늘 실습의 핵심은 끝났습니다.

🖥️ OS별 설치 방법 (Docker 없이 직접 설치하고 싶다면)

🐧 Linux (Ubuntu/Debian)

TERMINAL
sudo apt-get install lsb-release curl gpg

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.list

sudo apt-get update
sudo apt-get install redis

redis-cli
PING

🍎 macOS (Homebrew)

TERMINAL
# Homebrew 탭 추가
brew tap redis/redis

# Redis 설치
brew install --cask redis

# Redis 서버 실행
redis-server \
  $(brew --prefix)/etc/redis.conf

# 새 터미널 탭에서 접속
redis-cli
PING

🪟 Windows (WSL2)

TERMINAL
# PowerShell (관리자)에서 실행
wsl --install

# 재부팅 후 WSL 터미널에서
# 위의 Linux APT 절차를 그대로 수행

# 또는 Docker Desktop 설치 후
# 방법 1(Docker)을 사용 (더 간단)

🚨 설치 후 PONG이 안 나온다면? — 흔한 실패 원인 5가지

① 포트 6379 충돌
다른 Redis 프로세스나 앱이 이미 6379 포트를 점유 중입니다.
lsof -i :6379 (Mac/Linux) 또는 netstat -ano | findstr 6379 (Windows)로 확인
② Docker가 실행 중이지 않음
Docker Desktop이 켜져 있는지 확인하세요. 트레이 아이콘에 고래🐳가 보여야 합니다.
③ 컨테이너 이름 중복
"redis"라는 이름의 컨테이너가 이미 있으면 오류 납니다.
docker rm -f redis로 기존 컨테이너 삭제 후 재시도
④ redis-cli 없음 (직접 설치 시)
Redis 설치가 완료되지 않은 경우입니다. 설치 단계를 처음부터 다시 진행하세요.
⑤ 방화벽/보안 프로그램 차단
윈도우 방화벽이나 보안 소프트웨어가 6379 포트를 막고 있을 수 있습니다.
→ Docker 방법 사용 시 Docker Desktop 네트워크 설정을 확인하세요.

🐍 Python으로 Redis 연결하기 (redis-py)

redis-cli로 동작을 확인했다면, 이제 코드로 연결해봅시다. Python에서는 redis-py 라이브러리를 사용합니다.

1
라이브러리 설치
TERMINAL
pip install redis
2
연결 및 기본 명령 실행
PYTHON
import redis

# Redis 서버에 연결 (기본 포트 6379)
# decode_responses=True : 바이트가 아닌 문자열로 받기
r = redis.Redis(host='localhost', port=6379, decode_responses=True)

# ① 연결 확인: True가 출력되면 성공
print(r.ping())  # 출력: True

# ② 데이터 저장: SET hello "world"와 동일
r.set('hello', 'world')

# ③ 데이터 조회: GET hello와 동일
value = r.get('hello')
print(value)  # 출력: world

# ④ TTL(만료 시간) 설정: 10초 후 자동 삭제
r.set('session:user1', 'logged_in', ex=10)
print(r.ttl('session:user1'))  # 출력: 10 (초 단위 남은 시간)
3
실행 방법
TERMINAL
# 파일 저장 후 실행
python redis_hello.py

# 기대 출력:
# True
# world
# 10
ℹ️ decode_responses=True를 꼭 넣어주세요. 이 옵션이 없으면 데이터가 b'world'처럼 바이트 형태로 반환되어 일반 문자열 비교 시 문제가 생깁니다.

🟢 Node.js로 Redis 연결하기 (node-redis)

Node.js에서는 node-redis 라이브러리를 사용합니다. ES Module(import 문법) 기준으로 작성합니다.

1
라이브러리 설치
TERMINAL
npm install redis
2
연결 및 기본 명령 실행 (redis_hello.mjs)
NODE.JS
import { createClient } from 'redis';

// Redis 서버에 연결 (기본 포트 6379)
const client = createClient({ url: 'redis://localhost:6379' });

// 에러 핸들러 등록 (필수!)
client.on('error', (err) => console.error('Redis 연결 오류:', err));

// 비동기로 연결
await client.connect();

// ① 연결 확인: PONG이 출력되면 성공
console.log(await client.ping()); // 출력: PONG

// ② 데이터 저장
await client.set('hello', 'world');

// ③ 데이터 조회
const value = await client.get('hello');
console.log(value); // 출력: world

// ④ TTL 설정: 10초 후 자동 삭제
await client.set('session:user1', 'logged_in', { EX: 10 });
console.log(await client.ttl('session:user1')); // 출력: 10

// 작업 완료 후 연결 종료
await client.disconnect();
3
실행 방법
TERMINAL
# .mjs 확장자 또는 package.json에 "type":"module" 설정 필요
node redis_hello.mjs

# 기대 출력:
# PONG
# world
# 10

💼 실무 팁 — 초심자가 꼭 알아야 할 3가지

✅ 팁 1: Redis 기본 포트 6379는 절대 외부에 열지 마세요

Redis는 기본적으로 인증 없이 누구나 접속 가능합니다. 클라우드 서버에서 6379 포트를 방화벽으로 막지 않으면, 외부에서 데이터를 통째로 읽거나 삭제할 수 있습니다. 로컬 실습 때는 괜찮지만, 서버에 올릴 때는 반드시 bind 127.0.0.1 설정 + 방화벽 차단을 해주세요. (12편에서 자세히 다룹니다)

✅ 팁 2: KEYS * 명령어는 운영 서버에서 절대 쓰지 마세요

학습용으로는 KEYS *가 편리하지만, 운영 서버에서는 Redis를 순간적으로 멈추게 만들 수 있습니다. 저장된 키가 수백만 개라면 전체를 스캔하느라 서버가 응답 불능 상태가 됩니다. 운영 환경에서는 SCAN 명령어를 사용하세요.

✅ 팁 3: Redis는 "캐시 전용"이 아닙니다

많은 분들이 Redis = 캐시라고만 알고 있는데, 실제로는 세션 저장소, 메시지 큐, 실시간 랭킹, 분산 락, pub/sub 메시징 등 다양하게 활용됩니다. 또한 RDB·AOF 설정으로 데이터를 디스크에도 저장할 수 있어서, "껐다 켜면 다 날아간다"는 것도 오해입니다.

📋 오늘의 핵심 요약 5줄

  1. Redis는 메모리 기반 초고속 데이터 구조 서버로, 캐시·세션·큐 등에 폭넓게 쓰인다.
  2. 일반 DB와 달리 디스크가 아닌 RAM에 데이터를 저장하므로 응답 속도가 압도적으로 빠르다.
  3. 설치는 Docker가 가장 쉽고 안전하며, Linux·macOS·Windows(WSL2) 직접 설치도 가능하다.
  4. redis-cliPING → PONG, SET/GET을 확인하면 연결 성공이다.
  5. Python은 redis-py, Node.js는 node-redis 라이브러리로 코드에서 바로 연결할 수 있다.

☑️ 오늘의 체크리스트

  • Redis 8.6.1이 내 환경(Docker 또는 OS 직접)에서 실행되고 있다
  • redis-cli에서 PINGPONG을 확인했다
  • SET hello "world" / GET hello가 정상 동작했다
  • Python 또는 Node.js 코드에서 r.ping() / client.ping()이 성공했다
  • Redis가 단순 캐시가 아닌 "Data Structure Server"임을 이해했다
  • 운영 서버에서 KEYS *를 쓰면 안 되는 이유를 알았다

🧩 확인 퀴즈 (직접 풀어보세요!)

  1. Redis가 일반 DB보다 빠른 근본적인 이유는 무엇인가요?
  2. SET name "철수" EX 60 명령을 실행하면 60초 후에 어떻게 될까요?
  3. Python에서 redis.Redis(..., decode_responses=True)decode_responses=True를 빼면 어떤 문제가 생기나요?
▶ 정답 확인 (클릭)
  1. 데이터를 디스크가 아닌 메모리(RAM)에 저장하기 때문입니다. 메모리 접근 속도는 디스크보다 수십~수백 배 빠릅니다.
  2. 해당 키(name)가 자동으로 삭제됩니다. GET name을 하면 nil이 반환됩니다.
  3. 데이터가 'world' 대신 b'world'처럼 바이트 형태로 반환됩니다. 일반 문자열 비교 시 의도치 않은 버그가 생길 수 있습니다.
📝 도전 과제 (다음 편 전까지 해보세요!)

1. redis-cli에서 SET name "당신의이름" EX 30 실행 후, 30초가 지난 뒤 GET name을 해보세요.
2. Python 코드에서 r.set('counter', 0)r.incr('counter')를 3번 호출하면 최종값이 얼마인지 확인해보세요.
3. Docker를 쓴다면 docker stop redis로 컨테이너를 멈추고, docker start redis로 다시 켜봅니다. 아까 저장한 데이터가 남아있나요? 없나요? (힌트: 기본 설정에서는 사라집니다. 이유는 9편에서!)
📚 Redis 입문 시리즈

#1 Redis 시작하기: 설치·실행·첫 명령(PING) ← 현재 글
⬜ #2 키·TTL·만료: 캐시의 핵심 규칙
⬜ #3 Strings: 카운터·간단 캐시 만들기
⬜ #4 Hashes: 세션·프로필 저장소 만들기
⬜ #5 Lists·Sets: 큐와 중복 방지
⬜ #6 Sorted Sets: 랭킹/리더보드
⬜ #7 Pub/Sub vs Streams: 실시간 메시징
⬜ #8 동시성 제어: 트랜잭션(MULTI/EXEC)·WATCH
⬜ #9 퍼시스턴스: RDB·AOF·복구 체크
⬜ #10 복제·고가용성: Replication·Sentinel
⬜ #11 클러스터: 샤딩·해시 슬롯·제약
⬜ #12 보안·성능·관측: ACL·eviction·latency
# Redis # Redis 입문 # Redis 설치 # Docker Redis # redis-cli # redis-py # node-redis # 캐시 # 백엔드 입문 # 비전공자 개발

📌 Redis 입문 시리즈 #1  |  난이도: ⭐☆☆☆☆ 입문  |  기준 버전: Redis Open Source 8.6.1