Redis 사용 예시 - g-market/b-shop-backend GitHub Wiki
- Remote Dictionary Server
- Storage: 데이터 저장소 (데이터 관점)
- Database: 전동적인 DBMS의 역할을 수행 (영속성 관점)
- Middleware: 애플리케이션이 이용할 수 있는 유용한 기능을 제공하는 소프트웨어
- 아주 빠른 데이터 저장소의 역할
- 분산된 서버들간의 커뮤니케이션(동기화, 작업 분할 등)
- 내장된 자료구조를 활용한 기능 구현
Read | Write | 비교 | |
---|---|---|---|
HDD | 130 MB/s | 120 MB/s | |
SSD | 500 MB/s | 400 MB/s | HDD보다 3~4배 빠름 |
RAM | 20,000 MB/s | 20,000 MB/s | SSD 보다 40배 빠름 |
- ✔️: Redis의 RefreshToken 같은 단기적인 데이터를 저장하는 데이터 저장소 역할
- DB에는 유저의 정보같은 바뀌면 큰 문제를 야기하는 영속성을 요하는 데이터를 저장한다.
- RefreshToken 유저의 임시적인 로그인 상태를 나타내기에, Redis 장애가 나도 로그인 상태가 풀리는 것이기에 재로그인로 하면 되기에 적합하다.
- Application이 장애가 나도 Redis의 데이터는 단기적으로 보존
- Application이 여러 머신에서 돌아도 강튼 데이터를 접근 가능
애플리케이션과 DB의 중간에서 디스크의 접근을 줄이기 위해, 디비에 가기전에 먼저 Redis에 저장해놓고 이를 읽어가는 방식이다.
추후 캐시를 하여 도입할 예정
Redis가 제공하는 자료구조를 활용해 복잡한 로직을 쉽게 구현
- ✔️: 장바구니의 회원이 담은 아이템의 pk를 담아, 데이터베이스에 접근할 때 속도를 높임
- AOF 및 클러스터 구조를 통해서 영속성을 확보한다.
// redis.conf
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
services:
b-shop-redis:
container_name: b-shop-redis
image: redis:6.2.7
environment:
- TZ=Asia/Seoul
- REDIS_PASSWORD=${REDIS_PASSWORD}
ports:
- ${REDIS_PORT}:6379
volumes:
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf --requirepass ${REDIS_PASSWORD}
매초 마다 실행했던 명령어를 뒤에 연달아 저장한다.
캐시란 자주 사용하는 데이터를 미리 보관해두 임시 장소를 의미
캐시는 비교적 저장 공간이 적고 전체적인 비용이 비쌉니다.
대신 빠른 IO를 통해 성능적 이점을 가져올 수 있습니다.
캐시로 활용되는 데이터는 다음과 같습니다.
- 도중에 변경될 일이 없는 데이터베이스 조회 값
- 자주 호출되는 데이터
로컬 캐시
- 로컬(해당 서버)에서만 사용하는 캐시
- 외부 서버와 트랜잭션 비용이 들지 않기 때문에 속도가 빠름
- 로컬에서만 사용하기 때문에 분산 서버의 구조에서 캐시를 공유하기 어려움(공유하는 방법은 존재한다!
중요한 것은 꺽이지 않은 마음
)
글로벌 캐시
- 여러 서버에서 접근할 수 있는 캐시 서버를 구축하여 사용하는 방식
- 네트워크를 통해 데이터를 가져오는 트랜잭션 비용이 있기 때문에 로컬 캐시에 비해 상대적으로 느림
- 별도의 서버로 운영되기 때문에 서버 간 데이터 공유에 용이함