[CS 지식] redis

신현식·2023년 5월 19일
0

CS 지식

목록 보기
16/17

redis란

Redis(Remote Dictionary Storage,레디스)는 모든 데이터를 메모리에 저장하고 조회하는 in-memory DB, 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반의 key-value 구조의 데이터 관리 시스템(DBMS)이다. 일종의 NoSQL이다.

인메모리 상태에서 데이터를 처리함으로써 흔히 사용하는 관계형 데이터베이스(RDS) 그리고 몽고 DB로 대표되는 문서형 데이터베이스보다도 빠르고 가볍게 동작한다.

레디스를 사용하는 방법

  • 로컬 환경에서 레디스를 호출한다. AWS EC2를 예로 들자면 인스턴스에 레디스를 설치해 인스턴스 메모리를 사용해 레디스를 사용하는 방법이다. 인스턴스 메모리에 여유가 있다면 비용적인 측면으로나 사용성 측면으로나 뛰어나다.

  • 클라우드 서비스를 사용해 외부 자원을 사용한다. 레디스 랩 등의 서비드파티 서비스를 사용해 레디스를 사용하게 되면 통신하는 웹 서버가 아무리 많아도 하나의 프로에미워크 바인딩을 사용할 수 있다. 이 경우 레디스는 여러 웹 서버들의 공유 메모리 역할을 감당할 수 있다.

레디스를 사용하는 이유

운영 중인 웹 서버에서 키-값 형태의 데이터 타입을 처리해야 하고, I/O가 빈번히 발생해 다른 저장 방식을 사용하면 효율이 떨어지는 경우에 사용한다.
예를 들어 조회수와 같은 카운트 형태의 데이터이다. 이떄 조회수에 해당하는 데이터를 RDS 형태의 데이터에 저장해 I/O를 반복한다면 엄청난 자원이 사용될 것이란 건 뻔하다. 이런 경우에 레디스를 사용해 데이터를 캐싱처리하고 일정한 주기에 때라 RDS에 업데이트 한다면 RDS에 가해지는 부담을 크게 줄이고 성능은 크게 향상될 수 있다.

물론 단순히 레디스만 사용해서 처리하는 것이 아닌 백엔드에서 적당한 연산처리와 스케쥴러 코드를 만들어주어야 한다.

또한 레디스를 사용하는 건 사용자의 세션관리에 많이 사용된다. 사용자의 세션을 유지하고, 불러오고, 여러 활동들을 추적하는 데 매우 효과적으로 사용할 수 있다. 또한 매우 빠르게 동작한다는 점을 사용해 메시지 큐잉에도 사용할 수 있다.

캐시 서버(Cache Server)

데이터 베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않는다. 하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 느려질 수 있다.

일반적으로 서비스 운영 초반이거나 규모가 작은, 사용자가 많지 않은 서비스의 경우에는 WEB - WAS - DB 의 구조로도 데이터 베이스에 무리가 가지 않는다. 하지만 사용자가 늘어난다면 데이터 베이스가 과부하 될 수 있기 때문에 이때 캐시 서버를 도입하여 사용합니다.
그리고 이 캐시 서버로 이용할 수 있는 것이 바로 Redis이다.

캐시는 한번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결괏값을 받을 수 있도록 도와주는 공간이다. 같은 요청이 여러 번 들어오는 경우 매번 데이터 베이스를 거치는 것이 아니라 캐시 서버에서 첫 번째 요청 이후 저장된 결괏값을 바로 내려주기 때문에 DB의 부하를 줄이고 서비스의 속도도 느려지지 않는 장점이 있다.

레디스 자료구조


이렇게 다양한 자료구조를 지원하게 되면 개발의 편의성이 좋아지고 난이도가 낮아진다는 장점이 있다.
예를들어, 어떤 데이터를 정렬을 해야하는 상황이 있을 때, DBMS를 이용한다면 DB에 데이터를 저장하고, 저장된 데이터를 정렬하여 다시 읽어오는 과정은 디스크에 직접 접근을 해야하기 때문에 시간이 더 걸린다는 단점이 있다. 하지만 이때 In-Memory 데이터베이스인 Redis를 이용하고 레디스에서 제공하는 Sorted-Set이라는 자료구조를 사용하면 더 빠르고 간단하게 데이터를 정렬할 수 있다.

  • 문자열(String): 거의 대부분의 데이터를 문자열로 표현
  • 해쉬(Hash): 해쉬는 필드를 가질 수 없음, 예를 들어 사용자 정보라는 해시가 있다면 이메일과 닉네임을 가질 수 있다.
  • 리스트(List): 연결 리스트로 배열의 왼쪽, 오른쪽에 엘리먼트를 추가할 수 있다. 리스트 안의 데이터는 문자열만 가능
  • 셋(Set): 리스트와 유사하지만 고유값을 저장한다는 점에서 차이가 있음, Sorted Set 정렬을 통해서 특정 기준 값에 들어온 데이터만 필터링하는 게 가능
profile
전공 소개

0개의 댓글