# in-memory

18개의 포스트
post-thumbnail

[Redis] Cluster, 클러스터

Redis 클러스터(Cluster, 이하 클러스터)는 자동으로 여러 Redis 노드로 수평적 스케일링(샤딩)이 가능하게 해준다. 클러스터는 파티션 간에 어느 정도의 가용성을 제공한다. 일부 노드가 실패하거나 통신할 수 없을 때 작업을 계속할 수 있게 해준다. 하지만 더 큰 오류가 발생하는 경우(i.g. 대부분의 마스터를 사용할 수 없는 경우) 작동을 중지한다. 파티션 간 가용성 부분은 Redis Sentinel의 자동 장애 극복(Automatic failover) 기능과 비슷해 보인다. 클러스터의 기능을 정리하자면, 데이터셋을 여러 노드로 자동으로 분할할 수 있는 기능 일부 노드에서 장애가 발생하거나 클러스터의 나머지 부분과 통신할 수 없을 때 작업을 계속할 수 있는 기능 Redis Cluster data sharding 클러스터는 일관된 해시를 사용하지 않고 모든 키가 해시 슬롯(hash slot)이라고 부르는 것의 일부인 다른 형태의 샤딩을 사용한다

2023년 9월 3일
·
0개의 댓글
·
post-thumbnail

[Redis] Senitnel, 센티넬

Redis Sentinel(이하 Sentinel)은 Redis Cluster를 사용하지 않을 때 고가용성(안정성 UP)을 제공한다. 큰 그림으로 보는 Sentinel의 전체 기능 목록: Monitoring 모니터링 끊임없이 마스터와 레플리카가 잘 작동하고 있는지 확인한다. Notification 알림 Redis에 문제가 생기면 API를 통해 시스템 관리자나 프로그램에 알림을 준다. Automatic failover 자동 장애 극복 마스터 개체가 제대로 작동하지 않으면 Sentinel은 레플리카를 마스터로 승격시키고 다른 레플리카는 새 마스터를 사용하도록 재구성된다. Redis 서버를 사용하고 있는 애플리케이션은 연결할 새 주소 정보를 받는다. Configuration provider 환경 설정 클라이언트는 주어진 서비스를 담당하는 현재 Redis 마스터의 주소를 묻기 위해 Sentinel에 연결한다. 장애 조치가 발생하면 S

2023년 9월 3일
·
0개의 댓글
·
post-thumbnail

[Redis] Replication, 복제

Redis 복제(Replication)의 기본적인 특성을 알아본다. 이후 이를 통해 어떻게 고가용성 확보와 페일오버(failover, 장애 극복) 기능을 가지는지 알아볼 수 있다. 기본적으로 리더 팔로워(leader follower)라는 마스터 개체를 완전히 똑같이 복제하는 마스터 레플리카(master-replica)를 허용한다. 이 시스템은 다음 세 가지 주요 메커니즘으로 작동한다. 마스터와 레플리카 개체가 잘 연결된 상태라면, 마스터는 가지고 있는 데이터셋의 변경점들을 레플리카에 명령어들을 통해 계속 업데이트시켜준다. 네트워크 이슈가 있거나 마스터 또는 레플리카의 연결 타임아웃이 발생해 마스터와 레플리카의 연결이 끊긴다면, 레플리카는 재연결을 하여 부분 재동기화를 시도한다. 그 말인즉슨, 연결이 끊긴 동안 들어왔던 명령어들을 가져오기를 시도한다. 만약 부분 재동기화가 불가능하다면, 레플리카는 전체 재동기화를 요청한다. 이 작업은 더 복잡해지는데 마스터가 모든

2023년 9월 3일
·
0개의 댓글
·
post-thumbnail

[Redis] Transactions, 트랜잭션

Redis Transactions(이하 Transactions)는 명령어 그룹을 한 번에 처리할 수 있도록 해준다. 관련 명령어 목록: MULTI EXEC DISCARD WATCH Transactions는 중요한 두 가지를 보장해준다. 트랜잭션의 모든 명령은 순차적으로 직렬화되고 실행된다. 다른 클라이언트의 요청이 오면 절대 실행 중간에 그 요청이 실행되지 않는다. 이것은 명령어가 단일 분리된 작업으로 실행되는 것을 보장한다. EXEC 명령어는 트랜잭션의 모든 명령을 실행시킨다. 클라이언트가 EXEC 명령을 호출하기 전에 트랜잭션의 컨텍스트에서 서버와의 연결이 끊긴 다면 모든 작업은 실행되지 않는다. 사용 방법 MULTI라는 명령어를 치면 OK라는 싸인과 함께 여러 명령어를 받을 준비가 된다. 바로바로 실행되던 것과 달리 Redis는 명령어를 큐(Queue)에 넣는다. EXEC 명령어가 들어올 때 실행된다. `

2023년 9월 2일
·
0개의 댓글
·
post-thumbnail

[Redis] Data Types, 자료형

Redis는 단순히 key-value 저장소가 아니고 다양한 자료를 지원하는 자료 구조 서버이다. 기존에 있던 key-value 저장소들은 string key를 string value와 연관지어 사용해왔지만, redis에서는 value가 단지 string에 국한되지 않고 더 복잡한 자료 구조를 가질 수 있다. Binary-safe strings Lists Hashes Sets Sorted sets Bit arrays(Bitmaps) HyperLogLogs Streams Keys Binary-safe라고 하면 어떠한 binary sequence라도 key가 될 수 있다는 것이다. 예를 들어, "foo"와 같은 문자열(string)부터 JPEG 파일까지 key가 될 수있다. 공백도 유효한 key가

2023년 9월 2일
·
0개의 댓글
·
post-thumbnail

[Redis] 개론

Redis는 C언어로 작성된 Key-Value 기반 In-Memory 데이터 구조 저장 공간으로 속도가 빠르고 데이터베이스, 캐시, 메시지 브로커, 스트리밍 엔진과 같은 역할로 쓰일 수 있다. 리눅스, *BSD, Mac OS X와 같은 거의 모든 POSIX 시스템에서 외부적인 의존 없이 작동한다. Redis는 거의 리눅스와 OS X에서 개발 및 테스트 되었고 리눅스에 배포하는 것을 추천한다고 한다. 공식적인 윈도우 빌드 제공은 없다. 지원하는 자료 구조 Strings Hashes Lists Sets Sorted sets Bitmaps Hyperloglogs Geospatial indexes Streams 10분만에 보는 Redis 자료 구조 튜토리얼 Redis는 [rep

2023년 9월 2일
·
0개의 댓글
·

JWT를 프론트엔드에서 관리하는 방법

localStorage 웹 페이지를 닫거나 새로고침 해도 데이터가 지워지지 않음 클라이언트 측에서 사용하는 키-값 저장소 임 javaScript로 데이터를 저장하거나 검색할 수 있음 데이터가 영구적으로 저장되지만 사용자가 수동으로 브라우저 데이터를 지우지 않는 한 지워지지 않음 보안에 취약, 중요한 정보나 개인정보를 저장하는 것은 좋지 않음 localStorage에 저장되는 모든 데이터는 문자열 형태로 저장됨 객체나 배열을 저장하려면 JSON.stringify()로 변환 검색할 때는 JSON.parse()로 다시 객체나 배열로 변환 HttpOnly Cookie 웹 서버와 클라이언트 간에 정보를 주고 받기 위해 사용되는 작은 데이터 조각임 javaScript를 통해 엑세스 할 수 없음 스크립트 기반 공격으로부터 쿠키를 보호하는 데 도음이 됨 HttpOnly 쿠키는 주로 백엔드에서 설정되며, 사용자 인증 같은 보안이 필요한 작업에 사용

2023년 8월 13일
·
0개의 댓글
·
post-thumbnail

h2 인메모리 방식에서 테스트코드

h2 인메모리 스프링부트를 연습하면서 데이터베이스는 필연적인 부분인데 이를 외부 데이터베이스를 연결시키지 않고 내 컴퓨터 램에다가 저장해버리는 인메모리 방식이 있다. 문제점 부트에서는 main 디렉토리의 resources안에 있는 application. yml or properties 파일에 DB를 연결한다. 문제는 test 디렉토리에서 db를 탐색해야하는 코드를 짰을 때 조회하는 부분은 main이 만든 db에 들어가서 빼오는건 잘 하는데 문제는 삽입 수정 삭제는 전혀 되지 않는다는 점이다. 예시 먼저 서버를 시작할 때 유저와 푸드를 하나씩 넣었다. 그리고 테스트 환경에서 수정을 진행해보고 수정한 것을 불러서 출력하는 test2와 그러고 난 후 실행하는 test3를 만들었다. 두 메소드를 각각 실행했을 경우 DB에 반영이 전혀 안되는 모습이다. user2에 관한 쿼리문이 생성되지 않는 이유는 영속성 캐시에 user의 정보가 있기 때문이다. 한 트

2023년 7월 7일
·
0개의 댓글
·
post-thumbnail

Redis: 빠르지만 강력한 가볍지만 진중한

Redis(이하 '레디스')는 Remote Dictionary Server의 약자로 직독직해 하면 원격 사전 서버이다. 레디스는 현대 소프트웨어 개발에서 널리 사용되는 고성능 오픈소스 인메모리 데이터 구조 스토어이다. 전통적인 디스크에 저장하는 데이터베이스와 달리, 레디스는 시스템의 주 메모리에 데이터를 저장하여 데이터 액세스와 조작속도를 극적으로 빠르게 만들어 준다. 레디스의 주요 특징은 아래와 같다. 특징 1) In-memory data store 위에서 언급한 바와 같이, 레디스는 데이터를 메모리에 직접 저장한다. 이러한 특징은 실시간 데이터 응답성과 빠른 데이터 transaction이 요구되는 어플리케이션에서 매우 큰 장점으로 작용한다. 특징 2) 다양한 데이터 구조 레디스는 단순한 문자열 뿐만 아니라 list, set, hash, bitmap 등과 같이 다양한 데이터 구조를 지원하여 개발자들로 하여금 개발의 유연성을 가져갈 수 있도록 도

2023년 6월 12일
·
0개의 댓글
·
post-thumbnail

H2 데이터베이스 (In-Memory) 메모리 모드 사용

1) H2 데이터베이스 - cheat sheet 접속 https://www.h2database.com/html/cheatSheet.html 2) In-Memory 부분 복사 > jdbc:h2:mem:test 3) main 디렉토리와 test 디렉토리 하위의 resources 디렉토리를 구분하고, resources 디렉토리 하위에 application.yml 파일 복사-붙여넣기 4) spring datasource의 url 부분을 'jdbc:h2:mem:test'으로 변경 ![](https://velog.velcdn.com/ima

2023년 5월 18일
·
0개의 댓글
·

[DB] RDB와 In-memory의 차이

RDBMS 보조기억 장치에 저장한다. row와 column이 존재한다 데이터를 저장하는 공간이 지정 된다. 관계 (1:n, n:1, n:m) 등 데이터를 연결해 관리한다. SQL을 통해 접근한다 관계를 통해 성능을 향상시키지만 하드웨어의 스펙이 상승돼야한다. NoSQL 보조기억 장치에 저장한다. Key-Value형태의 해쉬테이블느낌으로 저장된다. 형식이 없어 구조 변경이나 데이터의 형식이 변경이 잦다 In-Memory RAM과같은 주 기억 장치에 저장함 key-value형태로 저장한다. rdbms,nosql에 비해서 용량의 크기가 제한적이다 주기억장치의 한계로 용량의 크기가 제한적이지만, In-Out이 매우 빠르다 주로 두개가 사용된다 Memcached 데이터 타입을 string으로만 저장한다 오직 메모리에만 저장한다 메모리가 부족한경우 일부 데이터를 삭제하여 메모리를 활용한다 복제가

2022년 7월 18일
·
0개의 댓글
·
post-thumbnail

레디스(Redis) 알아보기

Overview 2010년 트위터, 페이스북, 아마존 등의 글로벌 기업들이 급부상했습니다. 모바일 등의 클라이언트 증가로 사용자와의 인터랙티브가 많아졌습니다. 이렇게 많은 요청과 응답이 왔을 때 기존 RDBMS로는 성능적인 문제를 해결하기 위해 많은 비용을 들여야 했습니다. 또한 실시간 정보를 처리하는 기업들이 많아지면서 연산 속도가 중요해졌습니다. 쿠팡은 하루에 350만명 이상이 접속하는 대규모 트래픽이 발생합니다. 회원 정보와는 무관하게 이러한 350만명에게는 똑같은 메인페이지가 보여집니다. 이렇게 같은 데이터를 수백만번, 수천만번 웹 서버에서 요청을 받아 DB에게 동일한 쿼리를 날려 정보를 가져오는 것은 효율적이지 않아 보입니다. 또한 대다수의 방문자는 다른 방문자가 조회한 페이지와 중복된 데이터를 많이 요청하곤 합니다. 사회현상을 분석할

2022년 6월 26일
·
0개의 댓글
·
post-thumbnail

In-memory DB, Redis를 사용한 이유

결론적으로 말하자면, Cache 서버로 조회성능을 높이고, Session 서버를 만들어 모든 세션이 하나의 DB를 바라보게 하기 위해서입니다. 또, 불필요한 복제(Session-Clustering)가 일어나지 않고, 서버를 계속 추가시켜도 성능의 저하 우려(Sticky Session)를 해결할 수 있습니다. In-memory Database란? Disk(HDD, SSD)에 저장되는 데이터베이스와는 다르게 Memory에 데이터 저장 목적으로 사용되는 데이터베이스를 말합니다. 보통 디스크에 저장이 되면 읽고/쓰기가 느리기 때문에 시간이 걸리게 되는데 이러한 응답 시간을 줄이고자 설계된 것이 In-memory Database 입니다. 하지만 메모리에 저장되기 때문에 서버가 다운되거나 동작 과정 중에 데이터가 유실될 수 있는 가능성이 큽니다. 그래서 Redis의 경우 이럴 때를 대비하여 동작 중에 로그나 `스냅샷(snapshots

2022년 5월 29일
·
0개의 댓글
·

기술 면접 대비 3탄 - Redis

오늘은 내가 능숙하게 사용하고자 하는 no-sql종류의 하나인 redis에 대해서 작성해보려고 한다. redis의 정의는 in-memory로 저장되어 디스크를 긁어서 데이터를 가져오는 방식이 아닌 cache방식으로 빠르게 원하는 데이터를 가져올수 있는 방식의 db이다. in-memory방식이란 데이터를 디스크에 저장하는것이 아닌 ram에 저장하는 방식을 뜻한다. 하지만 디스크에 데이터를 저장하게 되면 데이터를 영구적으로 저장할수 있지만 ram에 저장하게 되면 디바이스를 껏다 키는 순간 데이터가 휘발성으로 다 사라지게 된다. 이에 따른 백업 방식은 조금 이따가 이야기 해보도록 하겠다. redis를 소개했을때 redis가 데이터를 저장하는 방식은 key-value방식으로 저장될수 있는 데이터 타입은 문자열, 리스트, 해시, 셋, 정렬된 셋등 다양한 방식의 타입을 지원한다. 특히 sorted-set으로 저장된 데이터는 빠르게 데이터를 가져올수있어 많은 요청에 대한 빠른 응답에 처리할때

2022년 4월 13일
·
0개의 댓글
·

인메모리 데이터베이스란?

디스크가 아닌 메모리에 데이터를 저장하는 데이터베이스이다. 당연히 메모리에 바로 데이터를 저장하기 때문에 디스크로 부터 데이터를 가져오는 시간이 절약하여 디스크 접근보다 훨씬 빠른 데이터 작업을 가능하게 한다. (NVMe SSD조차 DDR4 RAM보다는 10여배 가량 느리다고 한다.) 단점으로는 RAM에 데이터를 저장하기 때문에, 전원이 갑자기 꺼지게 된다면 모든 데이터는 소멸된다. 즉 영속성(persistence)가 보장되지 않는다. 그렇기 때문에 로그인 세션과 같은 잃어버려도 문제되지 않는 데이터를 저장하는데 사용하거나 테스트DB를 위해 사용한다. mysql과 같은 전통적인 DBMS 제품도 옵션을 추가하여 인메모리 방식을 지원하기도 한다. ex) MySQL/MariaDB의 MEMORY 엔진 대표적인 인메모리 데이터베이스 Amazon ElastiCache (미국) Redis (미국) 알티베이스 (Altibase) (한국) Kairos (한국) SAP HANA (독일

2022년 2월 27일
·
1개의 댓글
·
post-thumbnail

Redis 설치하기 @ Local

In-Memory Store Redis는 애플리케이션 개발에 자주 사용되고 있는 인기 있는 오픈소스 소프트웨어입니다. Key-Value 형태로 간편하게 다양한 데이터 구조를 메모리에 저장할 수 있어, 빠르고 간편하게 데이터 관리가 가능합니다. 캐싱, 세션 관리, Pub/Sub, 채팅 등 다양한 사용 사례를 가지고 있습니다. Install Homebrew를 이용하여 설치해봅시다! Startup / Shutdown brew services를 이용하여 기동과 정지를 합니다. 사용 데이터 입력 데이터 조회 데이터 삭제 Key 이름 변경 참조문서 Redis Official Site Redis란 무엇인가요? - Amazon Web Services

2022년 1월 26일
·
0개의 댓글
·

Redis란?

Redis란? 백엔드 공부를 하면서 성능을 더 높이기 위해 빠르게 조회용으로 쓰는 NoSQL에 대해서 많이 들어봤습니다. 그 중에서 대표적인 몽고 DB와 Redis가 유명한데 Redis가 무엇인지 궁금하여 찾아봤습니다. 1. Redis의 특징 Redis는 In-Memory 기반의 키-값 형식의 비정형 데이터 구조를 가졌습니다. 따라서 별도의 쿼리 없이도 데이터를 간단히 조회할 수 있습니다. Redis는 크게 String, Set, Sorted Set, Hash, List 자료구조를 지원하고, 서비스의 특성에 따라서 캐시로도 사용가능하고, Persistence Data Storage로 사용할 수도 있습니다. 2. 캐시 사용의 이점 서비스 요청이 증가할수록, 특히 DB에서 데이터를 조회하는 경우에는 많은 부하를 줄 수 있습니다. 이런 상황에서 나중에 요청된 결과를 미리 저장해두었다가 빨리 제공하기 위해 캐시를 사용합니다. Redis는 메모리 기반이기때문

2021년 5월 23일
·
0개의 댓글
·
post-thumbnail

TIL32: Database / SQL / RDBMS

- In-memory : 전원이 꺼지면 데이터가 날라가버림 File I/O : 원하는 데이터만 가져올 수 없고 모든 데이터를 가져와 필터링 과정을 거쳐야 함 Database : 필터링 뿐만 아니라 File I/O로 구현이 힘든 여러 기능을 가지고 있는 데이터에 특화된 서버 >- Structured Query Language(SQL) 데이터베이스에서 사용하는 구조화된 질문 언어 데이터베이스에 Query를 보내어 원하는 데이터만 뽑아 냄 >- Schema 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 Entity간의 관계 데이터베이스의 "청사진(Blue Print)"이라고 할 수 있음 >- Relational DataBase Management System(RDBMS) 계형 데이터 모델에 기초를 둔 관계형 데이터 베이스(Relational DataBase, RDB)를 생성, 수정

2021년 1월 14일
·
0개의 댓글
·