Redis 에 관하여

몽루문·2024년 4월 1일
0

Redis

목록 보기
1/2
post-thumbnail

프로그램 구현중에서 Spring 을 사용하여 RestAPI 를 구현하면서 DB 만을 사용하여 데이터를 모두 다룰수는 없다.
종종 메모리 영역을 적극적으로 사용할 때가 있는데 이런 경우를 'Local Cache 를 활용한다.' 라고 한다.
하지만 이러한 프로그램에 종속된 Local Cache 보다는 MSA 가 도입되면 여러 서비스에서 동시에 사용할 수 있도록 Global Cache 프로그램인 Redis 에 관해서 알아보려고 한다.

🚩 Redis 에 관하여

📝 Redis 이란 ?

■ Redis 의 정의

  • Redis 는 Remote Dictionary Server 의 약자로 키(Key) - 값(Value) 쌍의 해시 맵과 같은 구조를 가진

    오픈소스 기반의 비관계형 ( NoSQL ) In-Memory 데이터베이스

■ In-Memory ( 인 메모리 ) 의 정의

  • 컴퓨터의 주기억장치인 RAM 에 데이터를 올려서 사용하는 방법
  • RAM 에 데이터를 저장하게 되면 메모리 내부에서 처리가 되므로 데이터를 저장/조회할 때

    하드디스크를 오고가는 과정을 거치지 않아도 되어 속도가 빠름
  • 서버의 메모리 용량을 초과하는 데이터를 처리할 경우

    RAM 의 특성인 휘발성에 따라 데이터가 유실될 수 있음

📝 Redis 의 사용 이유

  • 기존의 SQL 기반의 RDMS 는 데이터를 물리디스크에 직접 쓰기 때문에 빈번하게 바뀌는 데이터의 경우 디스크 사용량이 많아져 속도가 떨어지는 문제가 생겼다.
    그래서 Redis 를 사용하여 데이터를 RAM 에 Cache 하여 디스크 사용량도 줄이고 속도를 높인다.

📝 Redis 특징

1. 고성능 Key-Value 구조의 저장소

속도가 중요한 빅데이터의 저장소에 적합한 NoSQL 방식을 채택하였기에 데이터 형식의 제약이 없고 빠르다.

2. 빠른 처리 속도

디스크에 직접적인 사용이 들어가지 않고 RAM 에서 사용하는 데이터베이스이므로 속도가 빠르다.

3. 다양한 Data Type(Collection)을 지원

아래의 사진과 같은 다양한 Data Type 을 지원하여 데이터를 다루기 편리하다.

4. AOF, RDB 방식

Redis 가 가지는 특징인 인메모리는 RAM 의 휘발성 특징을 가지기에 데이터가 유실될 경우를 방지하여 두가지 백업 기능을 제공한다.

○ AOF ( Append On File )

  • Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태

○ RDB ( Snapshotting )

  • 순간적으로 메모리에 있는 내용 전체를 디스크에 담아 영구 저장하는 방식

5. 싱글 스레드

Redis 는 싱글 스레드 기반의 데이터베이스이므로 명령을 처리할 때 스레드간의 데이터 간섭이 발생하지 않는다.
하지만 싱글 스레드라고해서 속도가 느린 것은 아니므로 걱정하지 않아도 된다.

📝 Redis 의 주의사항

■ 시간 복잡도

Redis 는 싱글 스레드 기반의 데이터베이스이므로 스레드 간섭이 없다는 좋은 점도 있지만 RDMS 처럼 데이터를 구조화하여 저장할 경우
시간 복잡도가 급격하게 상승하여 데이터 요청 - 처리 - 응답 속도가 무지막지하게 길어진다.
이것이 점점 쌓이다보면 장애가 발생하므로 Redis 를 사용할 때는 데이터의 형식은 언제나 간단하게, 복잡하지 않게 구성하여 사용하는 것이 바람직하다.

■ 메모리 단편화

Redis 에서 데이터를 빈번하게 입력하고 해제하다보면 디스크가 아닌 메모리이기떄문에 메모리 단편화가 발생한다.
메모리 단편화가 서버가 허용하는 램의 총량을 넘어가면 메모리 스왑이 발생하는데 메모리 스왑 ( Memory Swap )으로 인한 대기시간 ( Latency )이 발생하므로 Redis 를 사용할때는
반드시 TTL ( Time To Live ) 을 지정하여서 사용하고 해제를 잊지 말아야한다.

📝 Redis 의 주요 사용처

이제 실무에서 Redis 를 사용하여 어디에 적용하면 좋을지 생각해보았다.
내가 생각한 내용은 아래와 같다.

  1. 데이터 캐싱
  • 데이터 캐싱 기능이다. Redis 를 사용하면 Global Cache 이기 때문에 예를 들어서 상태정보 같은 것들은 프로토콜이 아닌 서버로서 접속하여 데이터를 처리하면 될 것 같다.
  1. 사용자 세션 관리
  • 사용자에 대한 로그인 정보 및 로그인 유효시간 정보를 MSA 로 서비스를 구현하다 보면 공유하기가 힘든데, Redis 를 이용하여 TTL 주고 JWT 에 대한 내용 혹은 세션 ID 를 저장하여 처리하면 충분히 처리가 가능 할 것 같다.
  1. 메시지 큐잉 ( 메시지 브로커 역할 )
  • Redis 가 RabbitMQ 나 Kafka 와 같은 메세징 시스템처럼 고도화된 기능을 제공하지는 않지만, 인 메모리 특성을 살려서 단순하지만 가볍고 빠른 메시지 큐잉 기능을 제공하기에 기존의 웹소켓으로 패킷을 만들어 처리했던 부분들을
    메시지 큐잉으로 처리가 가능할 것 같다.

🚩 마치며..

지금까지 Redis 에 대해서 알아보았다.
실무에서 Local Cache 도 자주 쓰고 데이터베이스에서 속도가 떨어져서 문제가 됐던 경험도 있었는데
Redis 를 사용하면서 조금 나아졌으면 좋겠다.

profile
알고 있는 것을 정리하고, 새로운 것을 알기위해 끄적이는곳..

0개의 댓글