[WIL] 항해99 12주차

woonie·2022년 4월 3일
0

WIL

목록 보기
12/12
post-thumbnail

이번 프로젝트를 처음 진행하게 되면서 팀에서 나온 의견이 실시간 채팅을 만들어보자 였다.
처음 채팅을 구현하면서 실시간이니 만큼 빠른 속도로 채팅을 주고 받아야겠다고 생각했다.
어떻게 하면 속도를 빠르게 할 수 있을지 고민해보고 검색을 해봤는데 인메모리 데이터 구조 저장소인 Redis를 알게되었다.

redis.io 에는 다음과 같이 redis를 소개한다. Redis는 인메모리 데이터 구조 저장소로, 데이터베이스, 캐시, 메시지 브로커로 사용한다고 말한다.

인메모리(In-memory)?

인메모리란 컴퓨터의 메인 메모리 RAM에 데이터를 올려 사용하는 방법이다.
메모리에 데이터를 올리는 이유는 속도 때문이다. 저장공간에서 데이터를 가져오는 속도와 RAM에 올려진 데이터를 가져오는 속도가 수백배 이상 빠르다.
그러하기에 Redis는 빠른 속도가 장점이다.
하지만 치명적인 단점이 있다. 바로 용량이다. 해서 메인 데이터베이스로 사용하기에는 무리가 있다. 그렇기에 보조적인 수단으로 사용되는 경우가 많다.

캐시(cache)

cache란 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 말한다. 캐시에 있는 데이터는 시간과 자원 면에서 최소한의 비용으로 반복적으로 접근 할 수 있다.

캐시는 크게 두가지로 나눌 수 있다.

Local Cache

  • Local 장비 내에서만 사용 되는 캐시
  • Local 장비의 Resource를 이용한다 (Memory, Disk)
  • Local에서 작동 되기 때문에 속도가 빠르다.
  • Local에서만 작동되기 때문에 다른 서버와 데이터 공유가 어렵다

Global Cache

  • 여러 서버에서 Cache Server에 접근하여 사용하는 캐시
  • 데이터를 분산하여 저장 할 수 있다.
  • Replication - 데이터를 복제
  • Sharding - 데이터를 분산하여 저장
  • Local Cache에 비해 상대적으로 느리다 (네트워크 트래픽)
  • 별도의 Cache Server를 이용하기 때문에 서버 간 데이터 공유가 쉽다.

Redis는 Global Cache에 적합하다.

Redis 데이터 구조

Redis 는 key-value 형태의 데이터를 저장소이다. 즉, key 하나당 value를 저장하는 형태이다. redis는 단순히 string뿐만 아니라 아래와 같은 다양한 종류의 데이터 구조를 지원한다.

  • 문자열(string)
  • 해시(hashes)
  • 리스트(list)
  • 집합(sets)
  • 정렬된 집합(sorted sets)
  • 비트맵(bitmap)
  • 하이퍼로그 로그(hyperloglog)
  • 지리공간 인덱스(geospatial indexes)
  • 스트림(streams)

Redis 메모리 관리

Redis는 메모리에 데이터를 저장하여 사용한다. 만약 물리적인 메모리보다 더 많은 용량을 사용하려고 한다면 문제가 발생한다. 때문에 메모리 관리가 매우 중요하다.

공간을 만들어 임시 저장하게 된다. 메모리 부족을 해결하기 위한 좋은 방법이 될 수 있다. 하지만 치명적인 단점이 발생한다. 바로 SWAP을 하는동안 레이턴시가 발생하게 된다.

보통 Redis가 느려졌다면 RAM 용량이 부족해서 메모리 SWAP이 발생한 것이다. 만약 사용중인 Redis에 메모리 SWAP이 발생했다면 계속해서 SWAP이 발생한다. 해결하기 위해서 프로세스를 재실행해야 한다.

profile
동료들과 함께하는 개발의 중요성에 관심이 많습니다. 언제나 호기심을 갖고 꾸준히 노력하는 개발자로서 성장하고 있습니다.

0개의 댓글