본문 바로가기
PM으로 성장하기/개발 공부

인 메모리 데이터베이스와 Redis

by 고양이 고씨 2023. 5. 3.

개발자들이 작성해놓은 서비스 설계 문서를 보면, 저 빨간색 네모상자를 세겹 쌓아놓은 아이콘이 자주 등장한다. 구글링하면서 얻은 정보를 정리해보았다.


Redis란?

Redis는 Remote Dictionary Server의 약자로, 인 메모리 데이터베이스(In-Memory Database, IMDB) 제품들 중 하나이다. 디스크가 아닌 메모리에 데이터를 보유하고 있기 때문에, 메모리 상에 색인을 통해 빠르게 검색할 수 있는 장점이 있다. 하지만 DB 서버 전원이 꺼져버리면 자료들이 모두 삭제된다.

참고로 색인(index)이란, 데이터를 기록할 때의 이름, 속성, 기록한 장소 등을 보기 쉽게 표시하는 것이다. 즉, 데이터에 대한 참조용 데이터를 의미한다.

 

Redis의 장점과 사용 사례는 AWS 사이트에 가장 잘 나와 있는 것 같다.

https://aws.amazon.com/ko/elasticache/what-is-redis/

 

장점

Redis는 다양한 자료 구조를 제공하는 데 강점이 있다고 한다. 기본적인 데이터 유형은 String 으로, 텍스트 또는 이진 데이터가 이에 해당한다. Lists of Strings 는 문자열이 추가된 순서대로 유지되며, Sorted Sets 은 점수에 따라 정렬되고, Hashes는 필드와 값 목록을 저장하며, HyperLogLogs는 데이터 세트에 고유한 항목을 센다. 거의 모든 유형의 데이터가 저장된다고 한다.

 

또한 비동기식(Asynchronous, 동시에 일어나지 않는) 복제를 지원하여, 서버가 장애가 발생할 경우 다른 서버로 분산시킬 수 있다. 또한 특정 시점의 데이터 세트를 디스크로 복사하는 스냅샷 기능과, 데이터가 변경될 때마다 이를 디스크에 저장하는 AOF(Append Only File) 생성을 모두 지원한다. 이를 통해 장애가 발생하면, 데이터를 신속하게 복구할 수 있다.

 

사례

1. 캐싱: Redis는 인 메모리 캐시를 생성하여, 액세스 지연 시간을 줄이고, 처리량을 늘리며, 데이터베이스의 부담을 덜어준다.

*캐싱은 캐시를 사용하는 것을 말하며, 캐시는 필요한 데이터를 일시적으로 저장하는 저장소를 말한다.

2. 실시간 순위: Redis Sorted Set 데이터 구조를 이용하여 점수에 따라 정렬시킴으로써 좋아요를 가장 많이 받은 사람의 메시지를 게시할 수 있다.

3. 채팅 및 메시징: PUB/SUB 을 사용하여 게시된 이벤트를 기반으로 작업을 트리거하거나, 실시간 코멘트 스트림 및 서버 상호 통신을 지원할 수 있다.

*PUB/SUB은 pub(publisher)가 topic(task)에 메시지를 보내면 해당 topic을 구독한 sub(subsciber)에게 메시지가 전송되면서 데이터가 교환되는 형태이다. 메시지 큐(Message Queue)의 패턴 중 하나이다. 참고로 메시지 큐는 프로세스 또는 프로그램 간 데이터 통신 방법 중 하나이다.

4. 세션 관리: 세션 키에 대해 적절한 TTL(Time To Leave, 패킷이 폐기될 때까지 네트워크에 존재하도록 설정된 시간)과 Key-Value Store(키와 값을 한 쌍으로 저장)로 사용하여 세션 정보를 관리할 수 있다.

5. 속도 제한: Redis 카운터를 사용하여 특정 기간 동안 액세스 요청의 수를 셀 수 있고, 한도가 초과될 경우 조치를 취할 수 있어 게시물 수를 제어하거나, 리소스 사용량을 제한하는 데 사용할 수 있다.

6. 대기열: Redis List 자료구조를 사용하여 영구 대기열을 구현할 수 있다.


참고자료

 

[DB] Redis란 무엇일까? 간단하게 알아보기!, https://devlog-wjdrbs96.tistory.com/374

인 메모리 데이터베이스, 나무위키, https://namu.wiki/w/%EC%9D%B8%20%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

[웹에 대한 지식] 색인(INDEX)이란? https://crear.kr/%EC%9B%B9%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A7%80%EC%8B%9D-%EC%83%89%EC%9D%B8-index-%EC%9D%B8%EB%8D%B1%EC%8A%A4/

Redis란 무엇입니까? AWS, https://aws.amazon.com/ko/elasticache/what-is-redis/

[Server] pub/sub 이란?, https://resilient-923.tistory.com/402

728x90

댓글