Redis란?
Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)이다.
데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소이다.
왜 필요한가?
- 데이터베이스는 물리디스크에 직접 쓰기 때문에 데이터가 쉽게 손실되지 않는다.
- 하지만 사용자가 많아질수록 부하가 많아져 느려질 수 있다.
- 캐시를 이용하여 데이터베이스의 과부화를 막을 수 있다.
- jwt방식으로 로그인기능 구현시 보다 Refresh토큰과 로그아웃을 효율적으로 구현할 수 있다.
- jwt방식은 만료시간이 적힌 입장 티켓을 클라이언트에게 발급해주는 방식이다.
- 이 방식은 한번 발급해주면 서버에서는 더이상 토큰내용을 수정할 수 없다.
- 그래서 access토큰(짧은 만료시간), refresh토큰(일반적으로 만료시간이 김, 이 토큰을 이용하여 access토큰을 재발급, 앱 자동로그인기능구현시 필요) 두가지 토큰을 동시에 발급을 해준다. - refresh토큰(cf.로테이션 방식:refresh토큰은 1회용)을 통해 어느정도 jwt의 단점(토큰탈취)을 극복할 순 있지만 결국 트레이드오프이다.(보안vs편의)
- refresh토큰과 로그아웃(블랙리스트 등의 방법)을 구현하려면 데이터베이스가 필요하다.
- 데이터베이스로 구현을 하게 되면 부하가 많이 걸릴 수 있다. 또한 느려질 수 있다.
- 이에 대한 대처법이 Redis가 될 수 있다.
Redis의 특징
- Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없다.
- 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠르다.
- String, List, Set, Sorted Set, Hash 자료구조를 지원한다.
- Single Treaded이다.
- 한번에 하나의 명령만 처리할 수 있다. 그렇기 때문에 중간에 처리시간이 긴 명령어가 들어오면 뒤의 명령들은 대기상태가 된다. (get,set명령어의 경우 초당 10만개이상처리할 수 있다.→빠르다)
Redis사용시 주의점
- 서버장애 발생시 그에 대한 대책이 꼭 필요하다
- 인메모리 데이터 저장소 특성상 서버장애시 데이터유실이 발생할 수 있다.
- 메모리 관리가 중요하다.
- 싱글 쓰레드의 특성상, 한번에 하나의 명령만 처리할 수 있다. 처리시간이 긴 요청, 명령은 피해야 한다.
참고
'I leaned > Etc' 카테고리의 다른 글
클라우드 네이티브 애플리케이션 개발 (0) | 2023.07.05 |
---|---|
클라우드 서비스 (0) | 2023.07.05 |
대용량 시스템 (1) | 2023.06.01 |
도커(Docker) (0) | 2023.05.30 |
텍스트파일과 바이너리파일 (0) | 2023.05.11 |