도커 redis:8.2.4 컨테이너 환경에서 작성된 게시글입니다.
유튜브 채널 JSCODE의 강의를 보며 공부한걸 정리한 게시글입니다.
Redis 란?
짱빠른 nosql 데이터베이스. 모든 데이터를 메모리에 저장하기때문에 굉장히 빠르다.
Redis 주요 사용 사례
- 캐싱
- 세션관리
- 실시간 분석 및 통계
- 메시지 큐
- 지리공간 인덱싱 (Geospatial Indexing)
- 속도 제한 (Rate Limiting)
- 실시간 채팅 및 메시징
이렇게 다양한 용도로 쓰이는데, 강의에서는 이중 캐싱만 다룬다.
Redis 기본 명령어
redis-cli를 사용해서 실습해보자. 레디스 컨테이너 안에서 redis-cli 명령어를 입력하면 된다.

- set
데이터 저장
끝에 NX를 붙이면 중복확인을 하고, 중복 시 nil을 반환한다.
"" 은 안써도 되는데 cli환경에서
set dodontak:name "Jeong Cheol"
set dodontak:email "asd@naver.com"
set dodontak:name "Jeong Cheol" NX

- get
데이터 조회
key가 존재하면 value를 반환하고, 없으면 nil을 반환한다.
get dodontak:name

- keys
모든 key 조회
key 리스트를 반환한다.
keys *

- del
데이터 삭제
성공하면 1, 실패하면 0이 반환된다. (integer)
del dodontak:email


- ttl
만료시간 설정/확인
set dodontak:pet dog ex 30
ttl dodontak:pet


만료시간이 지나서 제거되면 -2 를 반환한다.
만료시간을 설정하지 않았다면 -1을 반환한다
- flushall
모든 데이터 삭제
flushall

Redis Key 네이밍 컨벤션
: 을 이용해 계층적 의미를 구분해 사용.
- users:100:profile : 사용자들 중 PK가 100인 사용자의 프로필
- product:123:details : 상품들 중 PK가 123인 상품의 세부사항
위와같은 컨벤션의 장점
- 가독성 : 데이터 의미와 용도 파악이 쉬워짐
- 일관성 : 코드의 일관성이 높아지고 유지보수가 쉬워짐
- 검색 및 필터링 용이성 : Redis의 패턴매칭 기능을 사용해 특정 유형의 Key를 찾기 쉬워짐
- 확장성 : 서로 다른 Key와 이름이 겹쳐 충돌할 일이 적어짐
캐시Cache, 캐싱Caching이란?
원본 저장소보다 데이터를 빠르게 가져올 수 있는 임시 데이터 저장소.
데이터를 캐싱할 때 사용하는 전략
레디스를 캐시로 쓸 때 어떤 방식으로 사용할지 전략이 다양하다. 그 중 가장 널리 사용되는 2가지 전략을 알아보자. 각 전략은 하나만 쓰는게 아니라 복합적으로 사용할 수도 있다.
Cache Aside (= Look Aside, Lazy Loading) 전략
먼저 캐시에 데이터를 요청하고 있으면 받아 쓰고, 없으면 DB에 데이터를 요청해서 받아서 캐시에 저장하는 전략
Write Around 전략
데이터를 저장할 때 DB에만 저장하는 전략.
쓰기 작업에는 캐시에 반영하지 않고 DB에만 반영한다. (이게 전략...?)
Cache Aside와 Write Around 전략의 한계점과 해결 방법
한계점
- 캐시 데이터와 DB 데이터가 일치하지 않을 수 있다.
조회할때는 캐시에서 가져오고, 저장할 때는 DB에만 저장해서 생기는 문제 - 캐시에 저장할 수 있는 공간이 비교적 작다.
DB의 저장공간은 hdd/ssd 인데 Redis는 메모리이기 때문에 공간이 작다.
데이터 불일치 해결 방법
데이터를 저장할 때 캐시와 DB에 모두 저장한다는 방법도 있겠지만 성능이 느려지는 문제가 있다.
어쩔 수 없이 트레이드 오프가 발생할 수 밖에 없다. 그래서 데이터 조회 성능 개선 목적으로 레디스를 쓰는 경우 데이터 일관성을 포기하고 성능 향상을 택한다.
이런 이유로 캐시를 적용시키기에 적절한 데이터는 이렇다.
- 자주 조회되는 데이터
- 잘 변하지 않는 데이터
- 실시간으로 정확하게 일치하지 않아도 되는 데이터
하지만 장기간 데이터가 일치하지 않는 건 문제가 될 수 있기에 주기적으로 데이터를 동기화 시켜줘야 한다. 이때 활용하는 것이 앞서 배운 만료 시간 설정 기능이다. (TTL) 데이터가 만료시간이 지나 삭제되면 DB의 데이터를 새로 조회해서 캐시에 넣기 때문에 캐시의 데이터가 갱신되는 효과가 있다.
작은 저장 공간 해결 방법
만료 시간 설정 기능을 활용하면 캐시 공간을 효율적으로 쓸 수 있다. 자주 조회하지 않는 데이터는 만료 시간에 의해 삭제되기 때문.
캐싱으로 조회 성능 개선하기 전 반드시 해야할 것
데이터 조회 성능 개선하는 방법이 다양하다.
- SQL튜닝
- 캐싱 서버 활용
- 레플리케이션
- 샤딩
- DB 스케일 업
그런데 그 중 SQL튜닝을 가장 먼저 고려해야한다. 왜냐하면 SQL튜닝 외의 방법은 금전/시간적인 비용이 들기 때문. 또 SQL튜닝이 근본적인 해결법인 경우도 많다.
'공부 > DB' 카테고리의 다른 글
| hiredis with.C/C++ (0) | 2026.03.09 |
|---|---|
| postgresql libpq C/C++ (0) | 2026.03.04 |
| DBCP (DB connection pool) (0) | 2026.02.19 |
| DB Partitioning, Sharding, Replication (0) | 2026.02.19 |
| postgreSQL EXPLAIN ANALYZE (0) | 2026.02.18 |