REDIS · EASY DEMO

같은 데이터를 두 번 읽어보세요.

첫 요청은 DB까지 가지만, 다음 요청은 Redis에 저장된 값을 바로 사용합니다.

Redis의 핵심 장점더 빠르게 읽고
DB 요청은 줄이기

두 번만 눌러보기

상품 정보를 불러오면 어디서 올까요?

1 처음에는 DB에서 읽어요.2 같은 데이터를 다시 읽어요.3 Redis가 바로 응답해요.
웹 서비스상품 정보 요청
먼저 확인Redis 캐시아직 비어 있음
캐시에 없을 때만원본 DB상품 데이터 보관

응답 시간은 원리를 보여주기 위한 예시이며 실제 측정값이 아닙니다.

이번 요청 결과

아직 요청하지 않았어요.버튼을 누르면 첫 요청과 캐시 요청의 차이를 보여드립니다.
전체 요청0버튼을 누른 횟수
원본 DB 읽기0캐시가 없을 때만
Redis 캐시 적중0DB 요청을 줄인 횟수

한 단계 더 · 오래된 값

DB 가격이 바뀌면 캐시는 어떻게 될까요?

빠른 응답이 항상 최신 응답은 아닙니다. 원본과 캐시를 나란히 비교해 보세요.

원본 DB · 최신 값89,000원DB 쓰기 0
Redis 캐시 · 저장된 값비어 있음첫 조회 뒤 채워집니다
준비먼저 Redis에 상품을 저장합니다.위의 첫 요청과 같은 흐름으로 DB를 읽고 캐시를 채웁니다.

이 실험은 cache-aside에서 자주 쓰는 “DB 갱신 성공 후 캐시 삭제” 흐름을 단순화했습니다. 실제 서비스에서는 DB 쓰기와 캐시 삭제 중 하나가 실패할 때를 위한 재시도나 이벤트 처리도 필요합니다.

한 단계 더 · 요청 몰림

TTL이 끝난 순간 요청 10개가 들어오면?

모두가 같은 캐시 미스를 보면 원본 DB를 동시에 읽는 캐시 스탬피드가 생길 수 있습니다.

실제 부하 측정이 아닌 원리 비교입니다. 운영 환경에서는 잠금, single-flight, TTL 무작위 분산, 만료 전 갱신 같은 방법을 상황에 맞게 선택합니다.

장점 세 가지만

Redis를 캐시로 쓰는 이유

01반복 조회가 빨라져요.

자주 찾는 값을 메모리에서 바로 읽습니다.

02DB가 덜 바빠져요.

같은 데이터를 매번 원본에서 읽지 않습니다.

03오래된 값은 지워져요.

TTL이 끝나거나 데이터가 바뀌면 캐시를 비웁니다.

캐시 확인없으면 DB 조회Redis에 잠시 저장변경되면 캐시 무효화
교육용 시뮬레이션입니다.

실제 Redis 서버나 데이터베이스에 연결하지 않습니다. 운영 환경의 응답 속도와 동시 요청 결과는 네트워크, 데이터 크기, 서버 구성과 캐시 적중률에 따라 달라집니다.

참고: Redis 공식 Cache-aside 안내 · TTL 명령 문서

이 데모에 대하여

캐시가 맞고 틀리는 순간을 명령으로 재현합니다

캐시는 빠르지만 원본과 어긋날 수 있습니다. 이 화면은 첫 조회와 재조회, 값이 바뀐 뒤의 조회, 만료된 뒤의 조회를 각각 명령 단위로 실행해서 언제 캐시가 답하고 언제 원본까지 가는지를 보여줍니다. 명령을 직접 입력할 수도 있어서, 순서를 바꿔 가며 오래된 값이 나오는 상황을 스스로 만들어 볼 수 있습니다.

  1. 준비된 시나리오 중 하나를 골라 첫 조회를 실행합니다.
  2. 캐시에 없어서 원본까지 다녀오는 경로를 확인합니다.
  3. 같은 조회를 한 번 더 실행해 이번에는 어디서 답하는지 봅니다.
  4. 원본의 값을 바꾸는 명령을 실행합니다.
  5. 그 직후 조회했을 때 어떤 값이 나오는지 확인합니다.
  6. 만료 시간을 확인하는 명령으로 남은 시간을 봅니다.
  7. 만료된 뒤 다시 조회해 값이 갱신되는지 확인합니다.
  8. 명령을 직접 입력해 순서를 바꿔 실행해 봅니다.
  9. 값을 바꾼 뒤 캐시를 지우는 경우와 지우지 않는 경우를 비교합니다.
  10. 같은 키를 반복 조회할 때와 다른 키를 조회할 때의 경로를 봅니다.
  11. 응답 시간 표시가 경로에 따라 어떻게 달라지는지 확인합니다.
  12. 만료를 짧게 두고 어긋나는 구간이 얼마나 되는지 재어 봅니다.

캐시가 동작하는 방식

01

없으면 가져와서 넣어 둡니다.

조회했을 때 캐시에 값이 없으면 원본에서 읽어 온 뒤 캐시에 저장하고 돌려줍니다. 다음 조회부터는 원본까지 가지 않으므로 훨씬 빠릅니다. 화면이 첫 조회와 재조회의 경로를 다르게 그리는 것이 이 차이이고, 응답 시간 표시도 함께 달라집니다.

02

빠른 이유는 저장 위치입니다.

캐시가 빠른 것은 알고리즘이 특별해서가 아니라 값을 메모리에 두기 때문입니다. 디스크를 거치지 않으므로 조회 한 번에 드는 시간이 크게 줄어듭니다. 대신 담을 수 있는 양이 제한되고, 전원이 꺼지면 사라지므로 원본을 대신할 수는 없습니다.

03

값이 바뀌면 어긋납니다.

원본을 고쳤는데 캐시에 예전 값이 남아 있으면 조회는 옛 값을 돌려줍니다. 오류가 아니라 캐시가 원래 그렇게 동작하는 것인데, 이 구간이 얼마나 길어도 되는지를 정하는 일이 캐시 설계의 핵심입니다. 화면에서 값을 바꾼 직후 조회해 보면 이 상황을 바로 만들 수 있습니다.

04

만료 시간이 어긋남의 상한입니다.

저장할 때 유효 시간을 함께 정해 두면 그 시간이 지난 뒤에는 캐시가 답하지 않고 다시 원본을 읽습니다. 그래서 원본과 어긋나 있을 수 있는 최대 시간이 이 값으로 정해집니다. 짧게 잡으면 어긋남은 줄지만 원본에 가는 횟수가 늘고, 길게 잡으면 반대가 됩니다.

05

고칠 때 지우는 방법도 있습니다.

만료를 기다리는 대신 원본을 고치는 시점에 캐시를 지워 버리면 다음 조회가 곧바로 새 값을 가져옵니다. 어긋나는 구간이 훨씬 짧아지지만, 고치는 코드가 캐시의 존재를 알아야 하고 지우는 것을 빠뜨리면 문제가 다시 생깁니다. 화면에서 두 방식을 모두 실행해 볼 수 있습니다.

06

명령을 그대로 보여줍니다.

화면의 동작이 버튼 뒤에 숨어 있으면 실제 코드로 어떻게 옮기는지 연결되지 않습니다. 그래서 각 단계에 대응하는 명령을 그대로 노출하고 직접 입력할 수도 있게 했습니다. 여기서 익힌 명령 이름과 순서가 실제 사용 환경에서 그대로 쓰입니다.

07

동시 요청도 재현합니다.

캐시가 비어 있는 순간에 요청이 여러 개 몰리면 모두 원본으로 가게 됩니다. 값이 하나만 필요한데 원본을 여러 번 읽는 셈이고, 원본이 감당하기 어려운 상황이면 이것 자체가 사고가 됩니다. 화면에서 이 상황을 만들어 볼 수 있게 해 둔 것은 캐시가 항상 부담을 줄여 주지는 않는다는 점을 보이기 위해서입니다.

08

적중률이 효과를 정합니다.

캐시에서 답한 비율이 높아야 실제로 빨라집니다. 같은 값을 반복해서 조회하는 경우에는 효과가 크지만, 매번 다른 값을 찾는다면 캐시를 채우기만 하고 쓰지는 못합니다. 화면에서 같은 키를 반복 조회할 때와 다른 키를 조회할 때의 경로가 어떻게 달라지는지 비교해 보면 이 차이가 드러납니다.

09

원본이 진실입니다.

캐시에 있는 값과 원본의 값이 다를 때 맞는 것은 언제나 원본입니다. 캐시는 원본을 빠르게 다시 보여주기 위한 사본일 뿐이고, 사라져도 서비스가 동작해야 합니다. 캐시가 없으면 조회가 실패하도록 만들어 두면 그 순간부터 캐시가 장애 지점이 되므로, 비어 있을 때도 원본으로 갈 수 있는 경로를 남겨 두어야 합니다.

10

무엇을 담을지가 먼저입니다.

모든 것을 캐시에 넣으면 메모리가 금세 차고 정작 자주 쓰는 값이 밀려납니다. 자주 조회되면서 자주 바뀌지 않는 것이 캐시에 가장 잘 맞고, 반대로 매번 달라지는 값은 넣어 봐야 도움이 되지 않습니다. 화면에서 시나리오를 몇 가지로 나눠 둔 것도 대상에 따라 결과가 달라진다는 점을 보이기 위한 것입니다.

실제 서버에 연결하지 않습니다.

이 화면은 브라우저 안에서 캐시와 원본의 동작을 흉내 낼 뿐 실제 서버에 접속하지 않습니다. 응답 시간으로 표시되는 값도 실제 측정이 아니라 경로에 따라 정해 둔 예시이며, 실제 지연은 서버 위치와 자료 크기, 회선 상태에 따라 크게 달라집니다. 다루는 명령도 값을 저장하고 읽고 지우고 만료를 확인하는 기본적인 것들로 제한했습니다. 메모리가 가득 찼을 때 무엇을 먼저 버릴지 정하는 정책, 값을 디스크에 남기는 설정, 여러 대로 나눠 운영할 때의 분배, 장애가 났을 때의 대비, 여러 명령을 하나로 묶어 처리하는 방법은 다루지 않습니다. 실제 도입을 검토한다면 공식 문서와 함께 그 서비스의 자료 크기와 조회 패턴을 먼저 확인해야 합니다. 캐시를 붙이면 빨라진다는 기대보다, 무엇이 얼마나 자주 조회되는지를 먼저 재는 편이 순서에 맞습니다.

참고 자료Redis — 캐시 어사이드 패턴Redis — TTL 명령Redis — 캐시 무효화 개념

실험을 마쳤다면