Post

redis에 대하여 - 들어가며

들어가며

이번 포스트 Redis에 대하여 공부해보겠습니다.

Redis 란

Remote Dictionary Server - 원격 사전 서버

메모리 내에서 데이터 구조를 저장하고 관리하기 위한 키-값 저장소 입니다.

오픈 소스의 인 메모리 데이터 저장소 라고 이야기 할 수 있습니다.

여기서 키-값 저장소는 여러 언어들에서 지원하는 Dictionary 타입의 자료구조들

혹은 , NoSQL , Json 같은 데이터 구조를 의미합니다.

1
2
3
4
//** 예를 들어
{
	"사람" : "세진"
}

이런식으로 구조를 가지고 있습니다.

인메모리?

주 기억장치인 RAM(Random Access Memory)에 저장하는 것을 말합니다.

Redis에서는 Cache에 저장한다 라고 표현하는데요

Cache

데이터나 값을 임시로 저장하는 메모리나 저장장치를 가리킵니다. 캐시는 주로 빠른 데이터 접근을 위해 사용되며, 이전에 액세스한 데이터에 대한 재 액세스 속도를 높이는 데 도움이 됩니다.

“나중에 요청 올 결과를 미리 저장해두었다가 빠르게 서비스해주는 것”이라고 표현하면 됩니다.

예를 들어 이런 식으로 설명해보겠습니다.

제목 추가

미국에 있는 어떤 서비스를 받아오기 위해 한국에 있는 사용자가 요청을 주고 받고 있다고 가정해보겠습니다. 광 랜을 통해 빠르게 통신한다고 해도 많은 과정을 거쳐 소요가 발생하겠죠.

최근 이슈였던 트위치 코리아 철수도 이런 문제들 때문 이였습니다. 한국의 ISP사들 - 통신사들이 깔아 놓은 망을 사용하고 트위치에 경우 본국의 ISP사에 지불하는 사용료 + 한국의 ISP사의 지불하는 사용료가 높아지며 철수 요인중 하나로 뽑히며 화제를 가지고 왔습니다.

예를 들어 구글,유튜브 , 넷플릭스같이 더많은 사람들이 사용하는 사업체들은 그런 망을 사용하는데 비용은 물론 서비스 품질에도 악영향을 미치게 될 것입니다,

그래서 나온게 캐시서버를 활용하는 방법입니다.

제목 추가 (1)

이런식으로 사람들이 자주 사용하는 컨텐츠를 캐시서버를 설치에 두고 해당 서버에 저장해두면

꼭 미국까지 갈필요없이 한국 내에서도 빠르게 서비스를 할 수 있게됩니다.

제가 생각했을때는 이게 캐시를 사용하는 이유입니다.

실제로 개발할 때 쓴다면 이런 식으로 쓸 수 있죠

제목 추가 (3)

사람들이 자주 쓰는데이터 (Ex : 메인 페이지 , 인증토큰 등)는 Cache 서버에

자주 쓰이지는 않는 데이터는 메인서버에 두면 서비스 품질도 향상되고 처리하기 위해

대기하고 있는 서버도 좀 더 빠르고 유동적으로 서비스를 제공할 수 있게 됩니다.

(물론 캐시에 저장했다고 RDB에 저장하지 않는 것은 아닙니다.)

그래서 나온게 ReDis입니다.

캐시의 구조

(https://www.youtube.com/watch?v=mPB2CZiAkKM)

우아한 테크 세미나에서 공부한 내용을 참고했습니다.

Look-Aside Cache

제목 추가 (4)

위에서 예로 설명한 구조와 같이 특정 자주 사용되는 데이터를 캐시에 저장해 두고 사용하는 구조를 말합니다.

write Back

제목 추가 (5)

DB에 쓰기 작업이 많은 경우에는 캐시에 저장할 데이터를 모아두었다가

특정 시점에 Bacth툴을 사용하여 올려주면 훨씬 빠른 속도로 처리할 수 있습니다.

예를 들어 , 1개의 데이터를 100번보내는 것과 100개의 데이터를 1번 보내는 것과의 차이는

아주 크겠죠.

제가 했던 저번 프로젝트 때 다양한 테이블의 저장되어있는 값들을 조회해서

영수증으로 만들어 저장하고 이를 여러 API에서 불러지는 경우가 있었는데요

이때, 저는 반정규화 - 즉, 데이터를 필요한 데이터만 따로 모아서 중복하게 만드는 방법을 사용해 처리했습니다.

5개의 테이블에서 값을 뽑아서 한번 MongoDB에 저장해두면 이후에 조회 할때는 MongoDB를 통해 5회 테이블 조회를 스킵하는 구조로 데이터를 제공할 수 있었습니다.

Spring에서도 SpringBacth가 있는데 이것도 나중에 한번 공부해보고 다루겠습니다.

다음 포스트

레디스의 Collections - 자료를 저장하는 구조에 대해서 이야기하겠습니다.

This post is licensed under CC BY 4.0 by the author.