Server

[Redis/Cloud] Redis는 무엇이고, 왜 사용 할까?

a-몬드 2022. 4. 26. 11:55
반응형

회사에서 미니프로젝트를 진행하던 중 session 저장 문제 로 인해 신입 백앤드 개발자끼리 옹기종기 모여 고군분투하는 모습을 여러 개발자 분들께서 보셨다. 

그때 해주신 조언중에 JWT랑 Redis, 현재 회사에서는 Redis를 사용하고 있고 지금 미리 사용해보는것도 나쁘지 않다고 조언해 주셨다. 그래서 공부해본 Redis

 

Redis란?

 

시스템 메모리를 사용하는 키-값 데이터 스토어

다양한 인 메모리 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성

현재 가장 인기 있는 키-값 스토어로서, 다양한 개발언어를 지원

대부분의 백엔드 프레임워크를 지원하고, 모듈을 사용해 적절한 형태로 구현할 수 있어 개발 난이도 낮음 


인 메모리 데이터 구조

 

일반적으로 mysql, oracle 등의 RDB들이 하드디스크에 데이터를 저장하고 관리

레디스는 데이터를 주기억장치인 ram, In-memory에서 관리

하드디스크를 오고 가는 과정을 거치지 않고 메모리 내부에서 처리

RDB보다 빠른 성능, 병목 현상이 발생X 

 

클라우드 서비스

Redis는 클라우드 서비스를 사용해 외부 자원을 사용

여러 웹 서버들의 공유 메모리 역할

 

예를 들어서 설명하자면 다중 웹서버를 사용할때 사용자가 웹서비스를 사용하다가 서버에 문제가 발생하여 다른 서버로 재접속할때 데이터(ex:세션 데이터)가 공유되지 않아 재로그인 해야하는 경우가 발생할 수 있다.

이때 session 정보를 따로 Redis인 외부 서버에 두어 관리를 하게 되면 재로그인과 같은 일은 발생하지 않을 것이다.

 

Redis를 왜 사용 할까?

1. 키-값 형태의 데이터타입을 처리해야 할 때

2. I/O가 빈번히 발생하여 효율이 떨어질때

3. 세션관리, 채팅 및 메시징 등등

 

나훈아 콘서트 티켓팅 페이지를 생각해 보자 동시간에 갑자기 5~6만명의 접속이 1~2초만에 발생한다. 이때 해당하는 데이터를 RDS형태의 데이터에 저장해 I/O를 반복한다면 엄청난 자원이 사용될 것이다. 이처럼 많은 I/O를 발생시키는 데이터를 처리할 때 레디스를 사용해 데이터를 캐싱 처리하고, 일정한 주기에 따라 RDS에 업데이트를 한다면 RDS에 가해지는 부담을 크게 줄이고, 성능은 향상할 수 있다.

가장 많이 사용되는 것은 사용자의 세션 관리이다. 사용자의 세션을 유지하고, 불러오고, 여러 활동들을 추적할때 매우 효과적으로 사용할 수 있다. 그리고 매우 빠르게 동작한다는 점을 사용해 메시지 큐잉에도 사용할 수 있다.


캐싱

다른 데이터베이스 ""에 배치된 Redis는 성능이 뛰어난 인 메모리 캐시를 생성

액세스 지연 시간감소

처리량 증가

관계형 또는 NoSQL 데이터베이스의 부담 감소

 

채팅 및 메시징

Redis에서는 패턴 매칭과 더불어 PUB/SUB 표준을 지원

Redis를 사용하여 고성능 채팅방, 실시간 코멘트 스트림 및 서버 상호 통신을 지원

PUB/SUB를 사용하여 게시된 이벤트를 기반으로 작업을 트리거 가능

 


In-memory 저장 방식의 문제점

저장 방식이 빠르지만 서버 장애가 발생할 경우, 데이터 유실이 발생할 수 있다.

서버의 메모리 용량을 초과하는 데이터를 처리할 경우

서버 자체에도 문제가 생기고, ram의 특성인 휘발성에 따라 ram에 저장되었던 레디스의 데이터들은 유실 될 수 있다.

 

그러므로 레디스는 캐싱 서버로 사용하는 것이 적합

유실되어도 비교적 무방한 데이터들을 저장하는 것이 좋다.

 

 

 

 

출처 참고

https://velog.io/@tilsong/Redis%EC%9D%98-%EC%A3%BC%EC%9A%94-%EA%B8%B0%EB%8A%A5-1-%EC%9D%B8-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

 

https://brunch.co.kr/@skykamja24/575

 

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

반응형

'Server' 카테고리의 다른 글

[Server/Nginx/웹서버]Nginx에서 Method 비활성화하기  (0) 2022.07.06
Cache 전략  (0) 2022.05.31