2024.07.09
🔥오늘의 공부🔥
● 1.
캐시가 무엇인지 알아보자
Redis를 간단히 알아보자
Redis(Remote Dictionary Server)
비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 NoSQL이며, 인메모리 데이터 구조를 가지고 Key-Value형태로 데이터를 저장을 해주고 DB, Cache등 다양한 용도로 사용이 가능한 오픈 소스 인메모리 데이터베이스이다.
특징
1 ) 인메모리 데이터 저장소이며 메모리에 데이터를 저장하고 불러오기 때문에 매우 빠른 데이터 읽기 및 쓰기가 가능하다.
2 ) 인메모리 방식이라 디스크 기반 데이터베이스보다 훨씬 빠른 성능을 보장해준다.
3 ) Dictionary로써 고성능 Key-Value 구조의 저장소이다.
4 ) 대용량 트래픽을 처리해야 하는 시스템에서는 Redis는 필수적으로 사용이 된다.
Redis 단점
1 ) 저장소가 메모리이다 보니 용량의 제한이 있고, 대규모 데이터를 저장하기 위해서는 그만큼의 용량을 필요로하기 떄문에 비용에 대한 문제가 발생한다는 단점이있다.
2 ) 비정형 데이터 즉, NoSql의 특징을 가지고있어 관계형 데이터베이스의 관계나 복잡한 트랜잭션의 기능을 제공받지 못하므로 데이터 관리의 어려움이 존재한다.
3 ) 메모리에 저장하기 떄문에 서버가 종료되면 데이터가 손실된다는 문제로 인해 데이터의 신뢰성이 떨어진다.
( 비정상적으로 서버가 종료될 경우의 문제 )
Cache
동일한 데이터에 반복해서 접근해야 하거나 많은 연산이 필요할 경우를 대비해 반복되는 데이터를 미리 복사해 놓은 임시 저장소를 의미한다. 쉽게 말해, 데이터의 접근과 계산에 대한 속도를 높이기 위한 하나의 저장소(공간)라고 생각하면 된다.
Redis 적용시 주의사항
캐싱 적용을 할 때는 반드시 자주 사용 될 것으로 예상되는 데이터에 적용해야 합니다.
만약 10만건 중에 10건 정도 접근하는 데이터를 캐싱한다면 굳이 필요없는 캐싱 공간만 차지하고 캐시 서버를 구성하고 유지관리하는 비용만 버리는 셈이된다. ( 자주 사용되는 데이터만을 위주로 적용을 해주어야 한다!! 반드시!! )
데이터 접근 빈도
자주 조회되는 데이터는 캐싱에 적합합니다. 반대로 자주 조회되지 않는 데이터는 캐싱에 부적합합니다.
데이터 변경 빈도
변경이 잦거나 실시간 제공되어야 하는 데이터는 캐시의 데이터 또한 업데이트를 진행을 해줘야하는데 이때 드는 비용이 그냥 DB를 조회하는 것보다 많이 들기 때문에 해당 상황에서는 사용을 제한하는 것이 좋다.
데이터 사용 패턴
쓰기 빈도가 높다면 데이터 일관성이 떨어지므로 캐싱 대상에 부적합 합니다.
Redis의 자료형
Reids의 주요 자료형에는 아래와 같은 것들이 있습니다.
- Strings: 가장 기본적인 데이터 타입으로 문자열, 숫자, 바이너리 데이터 저장 가능 주요 명령어: SET, GET, INCR, DECR
- Hashes: 필드-값 쌍으로 구성된 해시 테이블 주요 명령어: HSET, HGET, HDEL.
- Lists: 순서가 있는 문자열의 컬렉션으로 큐 및 스택으로 사용 주요 명령어: LPUSH, RPUSH, LPOP, RPOP
- Sets: 고유한 문자열의 집합. 주요 명령어: SADD, SREM, SMEMBERS
이외에도 Sorted Set(ZSet), Hyperloglog, Stream, Bitmaps 등이 있습니다.
기본적으로 Redis는 스프링부트에 연동하여 자바코드로 사용을 한다. 원래 Redis를 설치하면 GUI를 제공하지 않아 커맨드라인을 이용해 명령어로만 칠 수가 있다. 즉, 기본적인 Redis는 터미널을 이용한다는 점이다. 기본적인 명령어를 알아야 좋음.
Redis 유효기간
Redis는 DB에는 없는 데이터의 유효기간 기능을 제공을 해준다. 일반적으로 데이터의 유효기간을 TTL(Time to live)라고 말하며, 레디스에서는 이를 Expire라고 표현을 한다. ( 결국 두개다 동일한 말임 )
Expire를 사용하면 만료된 데이터를 직접 제거할 필요없이 자동으로 삭제가 된다. 이는 삭제할 데이터 관리를 위해 삭제 대상의 선정, 조회, 삭제를 직접 처리하지 않아도 되어 유지보수를 용의하게 한다.
회고
Redis 면접 단골 질문
Redis의 데이터 지속성(persistence 또는 백업) 방식에는 어떤 것이 있나요?
Redis 클러스터와 Sentinel의 차이점은 무엇인가요? ( 레디스의 모드는 총 3개이다. 실제로는 클러스트와 Sentinel 사용함)
Redis Sentinel의 페일오버(Failover:하나의 서버가 죽었을 때 다른 서버가 이를 대체하는 것)과정은 어떻게 이뤄지나요?
'내일배움캠프 Spring 5기' 카테고리의 다른 글
내일배움캠프 60일차 TIL - Security 예외처리 (0) | 2024.07.13 |
---|---|
내일배움캠프 59일차 TIL - 심화 프로젝트 설계 (0) | 2024.07.10 |
내일배움캠프 57일차 TIL - Docker(1) (0) | 2024.07.08 |
내일배움캠프 56일차 TIL - AWS(3) RDS (0) | 2024.07.04 |
내일배움캠프 55일차 TIL - QueryDSL Pagination (0) | 2024.07.04 |