정진(바르게 나아가기)
/
포스트
Search
Duplicate
Share
포스트
Search
WEB
tech
web
Token
2022/11/15
스프링부트
tech
SpringBoot
Backend
프론트엔드
tech
Frontend
nextJS
네트워크 보안
tech
network
security
자료구조
tech
dataStructure
알고리즘
tech
algorithms
에러 모음ㄷㄷ;;
tech
error
DevOps
tech
devOps
문제 모음
tech
코딩테스트
오픽
EnglishTest
JAVA
Redis란?
•
Redis 는 일종의 Database 로써 in-memory 기반의 저장소 이다. in-memory 기반이란, 전통의 database 는 정보를 disk(HHD, SSD 등) 에 저장하는 방식이고 레디스는 RAM이라 불리는 저장소를 사용한다. key-value 기반의 저장소이고, 캐시 및 메시지 브로커로 사용된다.
도입 이유
•
기존 로직은 iot 데이터를 수신 하고 있는 상태에서 이 데이터를 자바 메모리 상에 저장 후 특정 주기마다 API 요청을 받아 Postgresql에서 조회를 하여 iot 데이터와 Postgresql 데이터를 가공 후 전송 해주는 방식이었는데, 이러한 방식은 api 방식으로 대량의 데이터를 처리하여 응답해주니 처리 시간이 매우 오래 걸렸다. 5분 동안 모은 데이터를 처리 하는데 5분 이상이 소모되었다. 때문에 이 로직을 없애고 iot 데이터 수신 시 마다 필요한 데이터를 빼내올 수 있는 저장소가 필요했고, 기존 api 로직을 websocket 방식으로 바꿈으로써 클라이언트의 요청시 작동하는 로직이 아니라 스트리밍 방식으로 한번에 하나의 데이터만 처리할 수 있게 하는 로직이 필요했다.
•
iot 데이터를 수신해서 Postgresql 에 저장되어있는 데이터와 매칭 및 가공하여 GIS 상에 표출하는 로직이 존재하는데
분당 10만건
이상의 iot 데이터를 처리해야하는 상황에서 매 주기마다 db에 접근하여 데이터를 가공하기에는 큰 무리가 있었다. 그렇다고 db의 데이터를 자바에 담고 있기에는 리스크(out of memory)가 크고 데이터가 휘발성이라는 점에서 불편이 있었다. 다시 말해 현재 필요한 요구 사항은 빠른 속도로 데이터를 꺼내올 수 있고, 휘발성 데이터가 아닌 영속성을 띄는 데이터 저장소인데, 이에 부합하는 저장소가 redis 였다.
구성 방법
•
일단 클러스터링 구성은 불가피해 보였다. 분당 10만번의 데이터의 select 가 일어나야하는 상황에서 단일 쓰레드로 동작하는 방식은 조금 무리가 있어보였기 때문에 같은 서버 내에서라도 3개의 cluster 를 구성했다.
•
도커 compose 파일
redis.conf ⇒ compose 의 각 컨테이너 volume 에 맞게 디렉토리 설정
•
위와 같은 설정으로 compose 를 실행하고 난 뒤에 redis 컨테이너 내부로 접속하여, 컨테이너 끼리의 cluster 설정 필요
Redis