Redis
Redis(레디스)는 데이터를 메모리에 올려 두고 키 이름으로 아주 빨리 꺼내 주는 저장소예요. 주로 캐시·로그인 세션·순위표에 쓰고, 원본은 일반 데이터베이스에 둬요.
목차 보기
Redis(레디스)는 데이터를 컴퓨터 메모리에 올려 두고 이름표(키)로 아주 빨리 꺼내 주는 저장소예요. 자주 찾는 서류를 창고 대신 책상 위에 꺼내 두는 것과 비슷해요.
글 서순명(솔리드그루 이사 · 퓨쳐인프라 운영) · 2026-10-29 작성 · 예시는 2026-10-29 Windows 11 에서 직접 실행 · 캐시 원리는 Python 3.12.8 로 흉내(Redis 서버 미설치)
3줄 요약
Redis는 어떻게 동작하나요?
Redis는 이름 그대로 원격 사전(REmote DIctionary Server)이에요. 사전처럼 "단어(키) → 뜻(값)" 짝을 저장하고, 키를 대면 값을 바로 돌려줘요. 값으로는 글자뿐 아니라 목록, 묶음, 점수 순서가 있는 목록 같은 자료 모양도 쓸 수 있어요.
빠른 이유는 데이터를 메모리에 두기 때문이에요. 대신 데이터 전체가 메모리 크기를 넘을 수 없어요. 꺼지면 다 사라지는 건 아니에요. RDB(정해진 때 찍는 스냅숏)와 AOF(바뀐 내용을 이어 적는 기록) 두 방식으로 디스크에도 남겨요(Redis 공식 FAQ).
같은 FAQ에 따르면 Redis는 살바토레 산필리포가 실시간 기록 분석 도구를 더 크게 키우려고 만들기 시작했고, 이후 오픈소스로 공개했어요.
Redis는 어디에 쓰나요?
공식 문서는 Redis를 데이터베이스, 캐시, 스트리밍 엔진, 메시지 브로커 등으로 쓸 수 있다고 소개해요(Redis 시작하기). 작은 앱에서 자주 만나는 쓰임은 이 정도예요.
| 쓰임 | 예 | Redis가 맞는 이유 |
|---|---|---|
| 캐시 | 인기 상품 목록, 오늘 매출 합계 | 같은 답을 여러 번 빨리 줘야 해요 |
| 로그인 세션 | "이 사람은 로그인한 상태" 표시 | 요청마다 확인해서 빨라야 하고, 시간이 지나면 지워야 해요 |
| 순위표 | 게임 점수 상위 10명 | 점수 순서가 있는 목록을 기본으로 지원해요 |
| 횟수 세기 | 1분에 요청 몇 번 했는지 | 숫자를 하나씩 올리는 명령이 따로 있어요 |
| 작업 대기열 | 메일 보내기 줄 세우기 | 목록에 넣고 꺼내는 일이 빨라요 |
일반 데이터베이스와 뭐가 달라요?
둘은 경쟁 관계라기보다 함께 쓰는 짝이에요. 원본은 데이터베이스에, 자주 꺼내는 사본은 Redis에 두는 식이에요.
| 구분 | Redis | 일반 데이터베이스(PostgreSQL·MySQL) |
|---|---|---|
| 주로 두는 곳 | 메모리 | 디스크 |
| 꺼내는 방법 | 키 이름으로 바로 | SQL로 조건을 걸어 찾기 |
| 잘하는 일 | 짧고 잦은 읽기·쓰기 | 복잡한 검색·합계·여러 표 잇기 |
| 담을 수 있는 양 | 메모리 크기까지 | 디스크 크기까지 |
| 흔한 역할 | 캐시·세션·임시 값 | 원본 기록 보관 |
자주 쓰는 명령은 뭐가 있어요?
명령 이름과 뜻만 정리했어요. 이 글을 쓴 PC에는 Redis 서버가 없어서(아래 "Connection refused" 참고) 이 명령들을 돌린 결과는 싣지 않았어요. 자세한 동작은 공식 명령 문서(SET, EXPIRE)에서 볼 수 있어요.
| 명령 | 뜻 |
|---|---|
| SET 키 값 | 키에 값을 저장해요. 뒤에 EX 60을 붙이면 60초 뒤 사라지게 해요 |
| GET 키 | 키에 저장된 값을 꺼내요 |
| EXPIRE 키 초 | 이미 있는 키에 유효 시간을 걸어요. 시간이 지나면 키가 자동으로 지워져요 |
| TTL 키 | 지워지기까지 몇 초 남았는지 알려 줘요 |
| DEL 키 | 키를 바로 지워요 |
| INCR 키 | 숫자 값을 1 올려요. 방문 수·요청 수 세기에 써요 |
캐시 원리를 직접 흉내 내 보면 어떻게 나오나요?
먼저 밝혀 둘게요. 아래는 Redis 실행 결과가 아니에요. 2026-10-29 Windows 11 PC(Python 3.12.8)에는 Redis가 설치돼 있지 않아서, Redis를 캐시로 쓸 때 흔히 쓰는 "캐시 어사이드" 방식을 파이썬 사전(딕셔너리)으로 흉내 냈어요.
캐시 어사이드 순서는 단순해요. ① 먼저 캐시에서 찾아요. ② 있으면 그걸 돌려줘요. ③ 없으면 데이터베이스에서 계산하고, 그 답에 유효 시간을 붙여 캐시에 넣어요.
# Redis 가 쓰이는 대표 방식(캐시 어사이드)을 파이썬 딕셔너리로 흉내 낸 연습 코드예요. Redis 자체는 아니에요.
import sqlite3, time
db = sqlite3.connect("shop_copy.db") # 앞의 데이터베이스 글에서 만든 주문 20만 건(색인 지운 복사본)
db.execute("DROP INDEX IF EXISTS idx_phone")
cache = {} # Redis 자리. 실제로는 SET key value EX 60 처럼 유효 시간을 둬요
TTL = 60
def menu_sales(menu):
hit = cache.get(menu)
if hit and hit[1] > time.time():
return hit[0], "캐시"
total = db.execute("SELECT SUM(price) FROM orders WHERE menu = ?", (menu,)).fetchone()[0]
cache[menu] = (total, time.time() + TTL)
return total, "DB"
for i in range(3):
t = time.perf_counter(); v, src = menu_sales("라떼"); ms = (time.perf_counter() - t) * 1000
print(f"{i+1}번째: 라떼 매출 {v:,}원 / {src}에서 / {ms:.3f}ms")
$ python cache_aside.py
1번째: 라떼 매출 321,624,500원 / DB에서 / 12.951ms
2번째: 라떼 매출 321,624,500원 / 캐시에서 / 0.003ms
3번째: 라떼 매출 321,624,500원 / 캐시에서 / 0.001ms
- 첫 번째는 캐시가 비어 있어서 데이터베이스가 주문 20만 건을 다 훑어 합계를 냈어요. 12.951ms가 걸렸어요.
- 두 번째부터는 같은 답을 캐시에서 바로 꺼냈어요. 합계(321,624,500원)는 그대로예요.
- 실제 Redis는 앱과 다른 프로그램이라 요청을 주고받는 시간이 더 들어요. 그래서 0.003ms는 "계산을 건너뛰는 효과"를 보는 숫자로 읽어 주세요. Redis 속도는 아니에요.
"Connection refused"가 뜨면 무슨 뜻이에요?
Redis를 처음 붙일 때 자주 만나는 오류예요. 같은 PC의 WSL(윈도우 안의 리눅스)에는 Redis에 접속하는 프로그램(redis-cli)만 있고 서버는 없어서, 이 오류를 그대로 볼 수 있었어요. 2026-10-29 직접 실행한 결과예요.
$ wsl -d Ubuntu -- redis-cli --version
redis-cli 7.0.15
$ wsl -d Ubuntu -- redis-cli -h 127.0.0.1 ping (서버가 안 떠 있을 때)
Could not connect to Redis at 127.0.0.1:6379: Connection refused
"연결 거절"은 주소(127.0.0.1)의 6379번 포트에서 아무도 기다리고 있지 않다는 뜻이에요. 6379는 Redis가 기본으로 쓰는 포트예요. 앱에서 이 오류가 나면 세 가지를 차례로 봐요.
- Redis 서버가 실제로 켜져 있나요?
- 앱이 가리키는 주소·포트가 맞나요? 호스팅에서는 localhost 대신 환경변수에 든 주소를 써야 해요.
- 비밀번호가 걸려 있다면 접속 정보에 비밀번호가 들어갔나요?
메모리는 얼마나 써요?
모든 데이터를 메모리에 두니까 크기를 미리 가늠해 두면 좋아요. 공식 FAQ가 64비트 환경 기준으로 든 예는 이래요.
| 담은 것 | 메모리(공식 FAQ 예시) |
|---|---|
| 빈 Redis | 약 3MB |
| 짧은 키-글자 값 100만 개 | 약 85MB |
| 항목 5개짜리 묶음(해시) 100만 개 | 약 160MB |
짧은 값 1만 개라면 위 비율로 쳐서 1MB도 안 돼요(빈 상태 약 3MB는 별도). 그래도 캐시에 유효 시간을 걸지 않으면 쌓이기만 하니, 처음부터 시간을 정해 두세요.
자주 하는 오해와 주의할 점
- "Redis 하나면 데이터베이스는 필요 없다" 데이터가 메모리 크기를 넘을 수 없고, 디스크 저장 설정에 따라 재시작 때 최근 변경이 빠질 수 있어요. 잃으면 안 되는 원본은 일반 데이터베이스에 둬요.
- 메모리가 꽉 찰 수 있어요. 공식 FAQ에 따르면 메모리 한도(maxmemory)에 닿으면 쓰기 명령에 오류를 내거나, 설정에 따라 오래된 키를 내보내요. 캐시에는 꼭 유효 시간을 걸어 두세요.
- 캐시가 낡을 수 있어요. 원본이 바뀌어도 캐시는 유효 시간이 끝날 때까지 옛날 값을 줘요. 가격처럼 바로 바뀌어야 하는 값은 원본을 고칠 때 캐시 키도 같이 지워요(DEL).
- "작은 앱에도 무조건 필요" 방문자가 적으면 데이터베이스 하나로 충분할 때가 많아요. 느려진 곳을 확인한 뒤 붙여도 늦지 않아요.
바이브코딩으로 만든 앱이 느려졌다면 클로드 코드에 "느린 요청을 찾아서, 자주 같은 답을 주는 곳만 Redis 캐시로 바꿔 줘. 유효 시간은 60초로"처럼 범위와 시간을 같이 말해 주세요.
퓨쳐인프라에서는 어떻게 쓰나요?
퓨쳐인프라 앱 호스팅에서는 앱에 데이터베이스를 붙일 때 MariaDB·MySQL·PostgreSQL·Redis 중에서 고를 수 있어요. 비밀번호는 서버가 만들어 보관하고, 접속 정보는 앱 환경변수로 자동으로 들어가요. 붙인 데이터베이스는 그 앱 안에서만 보여요.
요금은 앱 하나 월 5,500원에 데이터베이스 월 2,200원을 더한 월 7,700원이에요(부가세 포함, 분 단위 계산). 원클릭 앱으로 PostgreSQL·Redis·MongoDB를 버튼으로 띄워 개발이나 시연에 써 볼 수도 있어요.
자주 묻는 질문
Redis는 무료로 쓸 수 있어요?
직접 설치해서 쓰는 판이 있어서 내 서버에 깔아 쓸 수 있어요. 다만 라이선스 조건이 판마다 달라 회사 서비스에 쓰기 전에는 redis.io 에서 지금 조건을 확인하는 게 안전해요. 호스팅 회사가 띄워 주는 Redis는 그 회사 요금을 따라요.
Redis와 Memcached는 뭐가 달라요?
둘 다 메모리에 두는 캐시로 많이 써요. Memcached는 글자 값 위주로 간단하고, Redis는 목록·묶음·순위 목록 같은 자료 모양과 디스크 저장까지 지원해서 쓰임이 더 넓어요.
Redis에 비밀번호나 개인정보를 넣어도 돼요?
세션처럼 잠깐 쓰는 값은 넣어도 되지만, 바깥에서 접속하지 못하게 막고 접속 비밀번호를 걸어야 해요. 오래 보관할 개인정보 원본은 일반 데이터베이스에 두는 편이 안전해요.
캐시 유효 시간은 몇 초로 잡아요?
값이 얼마나 자주 바뀌는지에 맞춰요. 매출 합계처럼 1분 늦어도 괜찮으면 60초, 공지 목록처럼 거의 안 바뀌면 몇 분 이상도 괜찮아요. 가격처럼 바로 맞아야 하는 값은 원본을 고칠 때 캐시를 지워요.
관련 용어
- 캐시는 자주 쓰는 답을 잠깐 보관해 빨리 주는 방법이에요.
- 데이터베이스는 원본 데이터를 오래 보관하는 곳이에요.
- 세션은 로그인 상태를 기억하는 정보예요. Redis에 자주 둬요.
- PostgreSQL은 Redis와 짝으로 자주 쓰는 데이터베이스예요.
- 백엔드는 Redis를 불러 쓰는 서버 쪽 코드예요.
- 글쓴이는 서순명(솔리드그루 이사)이에요. 솔리드그루는 국내 IDC 에서 클라우드 서버·앱 호스팅·AI API 서비스 퓨쳐인프라를 운영해요. 2026-10-29에 썼어요.
- 운영사는 솔리드그루예요. 사업자등록번호 875-44-00335 · 서울특별시 구로구 디지털로29길 38, 7층 707호 · 전화 02-6933-6229 · support@futureinfra.ai · 고객센터 · 이용약관
- 한계도 있어요. 이 글을 쓴 PC에는 Redis가 없어서, 실행 결과는 캐시 원리를 파이썬 사전으로 흉내 낸 것이에요. 실제 Redis 속도와 다르고, Redis 명령은 공식 문서 기준 이름과 뜻만 적었어요. 요금은 2026-10-29 퓨쳐인프라 공개 요금표 기준이에요.
- 이해관계를 밝혀 둬요. 퓨쳐인프라(솔리드그루) 블로그예요. 글 안에 자사 앱 호스팅·데이터베이스(Redis 포함) 안내가 있어요.
연관 서비스
많이 본 글
-
블로그
도메인 구매 사이트 추천 2026 — 가비아·후이즈 등 15곳 갱신·이전비 비교
같은 .co.kr 도 등록업체 15곳의 3년 값이 3.8만~8.6만 원이에요(11월 3일 KRNIC 표). 갱신가·이전비·해외 업체 조건, 11월 인상 뒤 가비아 실제 화면, 구매처 확인과 기관이전까지 정리했어요. -
블로그
무료 도메인 사이트 추천 2026 — 내도메인.한국·DuckDNS 발급 방법
내도메인.한국·DuckDNS 처럼 계속 무료인 주소 10곳을 11월 3일 서울에서 다시 재고(6곳 6ms 안), 발급 순서·구글·네이버 무료 주소·'첫해 무료'의 2년째 값까지 정리했어요. -
블로그
클로드 MCP·Gemini MCP 연동 방법 2026, MCP 서버 9곳
클로드 MCP(데스크톱·Claude Code)와 Gemini MCP 연동(Gemini CLI·안티그래비티·Gemini 앱·API) 등 9곳의 MCP 서버 연결법을 공식 문서로 정리했어요. 원격 57ms 실측과 오류 해결까지. -
블로그
Gemini 3.9 Flash 나왔나요? 지금 최신은 3.8 Flash — 3.7과 직접 잰 속도·비용
2026년 9월 22일 기준 Gemini 3.9 Flash는 미출시입니다. 최신 3.8 Flash의 사양·가격(2027년 2배 인상)과, 3.7 Flash와 같은 과제로 직접 잰 속도·비용·JSON 형식 준수 차이를 정리했습니다. -
블로그
서버비 한 달 얼마? 방문자 10만 명도 월 3만 2천 원(2026 계산)
월 방문자 1천·1만 명은 1만 4천 원, 10만 명은 3만 2천 원이에요. 요금제별 트래픽 기본 제공량까지 넣어 다시 계산하고 AWS·카페24·가비아·네이버클라우드 값과 숨은 비용을 비교했어요(2026-10-26 확인).
댓글
로그인하면 댓글을 남길 수 있습니다.