학습

Redis란

물빠진떡 2024. 7. 22. 01:51

서론


마피아 투게더라는 프로젝트를 진행하면서 기존 JVM 메모리로 관리하고 있던 게임내의 데이터 Repository를 Redis로 바꾸게 되면서 이에 대한 학습을 진행하였다.

기존 JVM 인메모리로 관리하던 것이 문제가 된다고 생각한 것은

  1. 모놀로식 서버에서 모든 데이터를 관리하는 것이 단일 장애점(SPOF)을 유발
  2. MSA 아키택처로 변경하거나 혹은 스케일 아웃 진행시 데이터 관리에 문제가 발생
    이라고 판단하였다.

그렇다면 DB로 어떤 스택을 사용해야 하는 것일까?
우리는 영속성 DB와 인메모리 기반의 DB를 고민하게 되었다.
이중에서 영속성 DB를 채택하지 않은 이유는 우리의 서비스는 인증 인가의 과정이 없는 서비스 이기 때문에 이전 유저의 기록을 영구 저장할 필요가 없다고 판단했기 때문이다. 때문에 에초에 영속성 계층을 도입하지 않았고 JVM으로 해당 데이터들을 관리하였었다.
이때문에 MongoDB와 같은 NoSql 기반의 영속성 DB가 아닌 Redis와 같은 인메모리 기반의 데이터 베이스를 채택하게 되었다.

Redis란


Redis is the world’s fastest in-memory database.  

About Redis

Redis 공식 사이트에서는 Redis는 세계에서 가장 빠른 인메모리 데이터베이스라고 소개한다. 물론 본인 사이트에서 소개하는거지만 그래도 Redis는 전체 6위, key-value 기반의 데이터베이스에서는 1위를 차지하고 있을 만큼 인기를 차지하고 있다.

DB-Engines

key-value


key-value란 딕셔너리, 해쉬와 같이 연관 배열의 저장, 검색, 관리의 데이터 스토리지 패러다임이다. 각 레코드를 고유하게 식별하는 키를 사용하여 저장하고 이를 이용하여 빠르게 검색한다.

Redis의 장점


  1. 성능
    In-memory이기 때문에 빠르다. 다른 영속성 계층의 DB와는 다르게 Disk io 과정이 없기 때문에 빠른 처리 속도를 보여준다
  2. 다양한 데이터 구조
    String, List, Set, Hash, Sorted Set, Bitmap, JSON 과 같이 다양한 데이터 구조를 제공한다
  3. 개발의 용의성
    쿼리문을 필요로 하지 않으며 단순한 명령 구조를 가진다
  4. 영속성
    인메모리 기반이긴 해도 기본적으로 영속성 계층도 지원하기 때문에 장애가 발생하여 Redis 서버에 문제가 발생해도 데이터 복구가 가능하게 된다
  5. 싱글스레드 방식
    싱글스레드 방식이기 때문에 원자성이 확보되고 들어온 명령에 대하여 경쟁 상태가 되지 않는다

사용처


Redis는 위의 여러 장점 때문에

  • 캐싱
  • 채팅, 메시지
  • 랭킹
  • 토큰관리
  • 실시간 분석
    등 실시간으로 변동이 많거나 동일 반복 요청에 대해 처리해야 할때 많이 사용한다

'학습' 카테고리의 다른 글

Block/Non-block vs Sync/Async  (4) 2024.10.31
Java로 Redis lock 구현하기  (0) 2024.10.21
Redis의 Lock  (4) 2024.10.19
[면접복기] 쓰레드와 프로세스의 차이는 무엇인가요?  (1) 2024.09.17
[면접 복기] HTTP와 TCP 의 차이  (0) 2024.09.15